Make AmneziaWG 3.1 the default generation
install.sh now defaults to AWG_GEN=3.1: an incompatible module or kernel fails with diagnostics instead of silently falling back to 2.0 and handing out a server with weaker obfuscation. AWG_GEN=auto keeps the old fallback for old kernels, AWG_GEN=2.0 still forces 2.0. Servers already installed on 2.0 no longer need a reinstall: POST /awg/upgrade (button in the users tab) backs up awg1.conf, rewrites [Interface] with HeaderProtectionKey and the 3.1 block install.sh writes, raises any S1-S4 below 12 (header protection needs a 12-byte nonce and the module only reports "Invalid argument"), restarts the interface and reissues every vpn:// key. Bringing the interface up is the only real proof the kernel accepted the params, so a failure restores the previous conf and brings 2.0 back up. Reissue is not optional: 2.0-era keys stop working the moment the generation changes. restartAwg() now re-reads the obfuscation params, generation and keepalive from awg1.conf before syncing peers. The conf can change while the interface is down, and a stale CONFIG.gen meant new keys were built on the old params. README: install from git.ma7neko.ru (Gitea) instead of raw.githubusercontent, and document the 3.1 default with the AWG_GEN=auto escape hatch.
This commit is contained in:
+22
-17
@@ -134,15 +134,16 @@ H3="2133604274-2140756116"
|
||||
H4="2143656228-2147444225"
|
||||
|
||||
# Поколение протокола и закрепление версии пакета — управляются переменными
|
||||
# окружения, задаются ДО запуска: `AWG_GEN=2.0 bash install.sh`.
|
||||
# AWG_GEN=auto (по умолчанию) — как раньше: 3.1, если модуль 3.x и ядро ≥ 5.5,
|
||||
# иначе 2.0, без лишних вопросов.
|
||||
# окружения, задаются ДО запуска: `AWG_GEN=auto bash install.sh`.
|
||||
# AWG_GEN=3.1 (по умолчанию) — основное поколение: если модуль в ядре не 3.x
|
||||
# или ядро старше 5.5, install.sh падает с диагностикой. Тихий откат на 2.0
|
||||
# здесь нежелателен: он молча выдал бы сервер со слабой обфускацией.
|
||||
# AWG_GEN=auto — старое поведение: 3.1, если условия выполняются, иначе 2.0
|
||||
# без вопросов. Для установки на заведомо старое ядро/модуль.
|
||||
# AWG_GEN=2.0 — не трогать модуль (ни апгрейд, ни перезагрузка), сразу 2.0.
|
||||
# AWG_GEN=3.1 — требовать 3.1: если условия не выполняются, install.sh падает
|
||||
# с диагностикой вместо тихого отката (апстрим ещё нестабилен, см. issues
|
||||
# #215/#216/#217 в amneziawg-linux-kernel-module — тихий откат на 2.0 здесь
|
||||
# нежелателен, если оператор явно просил 3.1).
|
||||
AWG_GEN="${AWG_GEN:-auto}"
|
||||
# Сервер, установленный на 2.0, переводится на 3.1 позже из панели
|
||||
# (POST /awg/upgrade) — переустановка для этого не нужна.
|
||||
AWG_GEN="${AWG_GEN:-3.1}"
|
||||
[[ "$AWG_GEN" =~ ^(auto|2\.0|3\.1)$ ]] || fail "AWG_GEN должен быть auto, 2.0 или 3.1 (задано: $AWG_GEN)"
|
||||
# AWG_PIN=y (по умолчанию) — после успешной установки держит amneziawg{,-dkms,-tools}
|
||||
# через `apt-mark hold`: unattended-upgrades не должен подменять модуль под живым
|
||||
@@ -513,11 +514,11 @@ fi
|
||||
# - ядро: header protection использует библиотечный chacha-API
|
||||
# (chacha_init/chacha20_crypt), которого нет до 5.5 — модуль там не соберётся
|
||||
# (upstream issue #210). Проблема с nla_put_uint на ядрах < 6.7 уже исправлена.
|
||||
# Если 3.1 недоступен и AWG_GEN=auto — не падаем, а пишем 2.0-конфиг: awg-ctrl
|
||||
# определяет поколение по наличию HeaderProtectionKey в конфиге, так что всё
|
||||
# продолжит работать ровно как раньше. При AWG_GEN=3.1 недоступность — fail
|
||||
# (см. AWG_GEN выше): апстрим модуля ещё нестабилен, тихий откат при явном
|
||||
# запросе 3.1 может незаметно подсунуть более слабую обфускацию.
|
||||
# При AWG_GEN=3.1 (по умолчанию) недоступность — fail с диагностикой: тихий
|
||||
# откат подсунул бы более слабую обфускацию незаметно для оператора.
|
||||
# При AWG_GEN=auto не падаем, а пишем 2.0-конфиг: awg-ctrl определяет поколение
|
||||
# по наличию HeaderProtectionKey в конфиге, так что всё продолжит работать ровно
|
||||
# как раньше, а перейти на 3.1 можно потом из панели.
|
||||
|
||||
kernel_lt_5_5() {
|
||||
local maj min
|
||||
@@ -576,7 +577,8 @@ else
|
||||
if [[ "${MOD_VER%%.*}" != "3" ]]; then
|
||||
AWG3="n"
|
||||
if [[ "$AWG_GEN" == "3.1" ]]; then
|
||||
fail "AWG_GEN=3.1 запрошен явно, но в ядре модуль версии '${MOD_VER:-неизвестно}' (на диске $(disk_mod_ver)) — нужна 3.x."
|
||||
fail "Нужен модуль amneziawg 3.x, а в ядре версия '${MOD_VER:-неизвестно}' (на диске $(disk_mod_ver)).
|
||||
Перезагрузи сервер и запусти установку снова — или поставь на 2.0: AWG_GEN=auto bash install.sh"
|
||||
fi
|
||||
warn "В ядре модуль версии '${MOD_VER:-неизвестно}' — ставим сервер на AmneziaWG 2.0."
|
||||
[[ "$(disk_mod_ver)" == 3.* ]] && \
|
||||
@@ -584,7 +586,8 @@ else
|
||||
elif kernel_lt_5_5; then
|
||||
AWG3="n"
|
||||
if [[ "$AWG_GEN" == "3.1" ]]; then
|
||||
fail "AWG_GEN=3.1 запрошен явно, но ядро $KERNEL старше 5.5 — header protection не соберётся (upstream issue #210)."
|
||||
fail "Ядро $KERNEL старше 5.5 — header protection не соберётся (upstream issue #210).
|
||||
Обнови ядро — или поставь на 2.0: AWG_GEN=auto bash install.sh"
|
||||
fi
|
||||
warn "Ядро $KERNEL старше 5.5 — header protection не соберётся (upstream issue #210)."
|
||||
warn "Ставим сервер на AmneziaWG 2.0."
|
||||
@@ -594,7 +597,8 @@ fi
|
||||
if [[ "$AWG3" == "y" ]]; then
|
||||
ok "AmneziaWG 3.1 доступен (модуль $MOD_VER, ядро $KERNEL)"
|
||||
else
|
||||
warn "Сервер будет работать на AmneziaWG 2.0. Обнови ядро/модуль и переустанови, чтобы перейти на 3.1."
|
||||
warn "Сервер будет работать на AmneziaWG 2.0. Обнови ядро/модуль — и переходи на 3.1"
|
||||
warn "кнопкой «Перейти на AWG 3.1» в панели, переустановка не нужна."
|
||||
fi
|
||||
|
||||
step "2/7 Node.js"
|
||||
@@ -762,7 +766,8 @@ if ! awg-quick up "$IFACE"; then
|
||||
AWG3="n"; NEW_GEN="2.0"
|
||||
warn "Откатываемся на AmneziaWG 2.0. Конфиг 3.1 сохранён: ${AWG_CONF}.awg31"
|
||||
[[ "$AWG_GEN" == "3.1" ]] && \
|
||||
warn "Запрошено AWG_GEN=3.1, но интерфейс поднялся на 2.0 — см. ${AWG_CONF}.awg31 и dmesg выше."
|
||||
warn "Модуль и ядро подходят под 3.1, но интерфейс поднялся на 2.0 — см. ${AWG_CONF}.awg31 и dmesg выше."
|
||||
warn "Разберись с причиной и повтори переход кнопкой «Перейти на AWG 3.1» в панели."
|
||||
|
||||
awg-quick up "$IFACE" \
|
||||
|| fail "awg-quick up $IFACE не работает даже на 2.0 — смотри dmesg выше"
|
||||
|
||||
Reference in New Issue
Block a user