RU Русский | EN English
# AmneziaWG 3.x Installer: Дополнительная информация и настройки Это дополнение к основному [README.md](README.md), содержащее более глубокие технические детали, пояснения и продвинутые опции для скриптов установки и управления AmneziaWG 3.x (3.1 по умолчанию) и 2.0. Пошаговый гайд по развёртыванию на VPS - в [INSTALL_VPS.ru.md](INSTALL_VPS.ru.md). ## Оглавление - [✨ Возможности (Подробно)](#features-detailed-adv) - [🔐 Параметры обфускации (3.1 и 2.0)](#awg2-params-adv) - [Presets](#presets-adv) - [🆕 Третья линия AmneziaWG для self-hosted](#awg3-adv) - [Что добавила 3.1](#awg3-31-adv) - [Какую линию модуля вы получите](#awg3-lines-adv) - [Что 3.0 меняет на проводе, а что нет](#awg3-wire-adv) - [Новые параметры 3.0](#awg3-params-adv) - [Что обязано совпадать, а что нет](#awg3-must-match-adv) - [Три вещи, на которых легко потерять вечер](#awg3-gotchas-adv) - [Профиль 3.1: что установщик включает и что нет](#awg3-not-yet-adv) - [Где вместо 3.1 ставится 2.0](#awg3-fallback-adv) - [⚙️ Детали конфигурации клиента](#config-details-adv) - [AllowedIPs](#allowedips-adv) - [IPv6 устройства, `::/0` и локальная сеть](#client-ipv6-adv) - [Что видно сайту при делении трафика по адресу назначения](#split-detect-adv) - [Изоляция клиентов](#client-isolation-adv) - [IPv6 dual-stack в туннеле (v5.15.0+)](#ipv6-tunnel-adv) - [PersistentKeepalive](#persistentkeepalive-adv) - [DNS](#dns-adv) - [Свой DNS-сервер для клиентов](#own-dns-adv) - [Изменение настроек по умолчанию](#change-defaults-adv) - [🔒 Настройки безопасности сервера](#security-adv) - [Фаервол UFW](#ufw-adv) - [Параметры ядра (Sysctl)](#sysctl-adv) - [Модуль ядра и пространства имён пользователей](#userns-module-adv) - [Fail2Ban (Автоматическая установка)](#fail2ban-adv) - [Смена серверного ключа](#server-key-rotation-adv) - [🧹 Оптимизация сервера](#optimization-adv) - [📋 Примеры конфигурации](#config-examples-adv) - [🖥️ CLI Параметры запуска скриптов](#cli-params-adv) - [install_amneziawg.sh](#install-cli-adv) - [manage_amneziawg.sh](#manage-cli-adv) - [🧑💻 Полный список команд управления](#manage-commands-adv) - [🤖 JSON-интерфейс для автоматизации (--json)](#json-api-adv) - [🛠️ Технические детали](#tech-details-adv) - [Архитектура скриптов](#architecture-adv) - [DKMS](#dkms-adv) - [Генерация ключей и конфигов](#keygen-adv) - [🔄 Как обновить скрипты](#update-scripts-adv) - [❓ FAQ (Дополнительные вопросы)](#faq-advanced-adv) - [🩺 Диагностика и деинсталляция](#diag-uninstall-adv) - [Содержимое диагностического отчёта](#diagnostic-report-adv) - [🔧 Устранение неполадок (подробно)](#troubleshooting-adv) - [📊 Статистика трафика (stats)](#stats-adv) - [⏳ Временные клиенты (--expires)](#expires-adv) - [📱 vpn:// URI импорт](#vpnuri-adv) - [📱 MTU и мобильные клиенты](#mtu-mobile-adv) - [🚧 Хостинг недоступен из России (Hetzner): блокировка по AS](#as-blocking-adv) - [🛡️ Активное зондирование (active probing) и обфускация без прокси](#active-probing-adv) - [📋 Совместимость клиентов](#client-compat-adv) - [Какое поколение AmneziaWG понимает клиент](#client-gen-adv) - [🐧 Поддержка Debian](#debian-support-adv) - [🔧 Raspberry Pi и ARM64](#arm-support-adv) - [🐧 Подключение Linux-машины как клиента](#linux-client-adv) - [Раздельный список маршрутов и адрес сервера](#linux-client-loop-adv) - [📦 LXC / Docker через amneziawg-go (userspace)](#lxc-userspace-adv) - [🗄️ AmneziaWG на Synology NAS (DSM)](#synology-adv) - [⚠️ Известные ограничения](#limitations-adv) - [🤝 Внесение вклада (Contributing)](#contributing-adv) - [💖 Благодарности](#thanks-adv) --- > История изменений по версиям: [CHANGELOG.md](CHANGELOG.md) --- ## ✨ Возможности (Подробно) * **AmneziaWG 3.1 по умолчанию:** шифрование заголовков (`HeaderProtectionKey`, свой ключ на каждую установку) и добавочный паддинг (`ContentPaddingAddition`) поверх пакетов-пустышек, паддинга `S1`-`S4` и маскирующего пакета `I1`. AmneziaWG 2.0 ставится по флагу `--protocol=2.0` (для клиентов без 3.1) или автоматически там, где установщик 3.1 не выдаёт (ARM, ядро старее 6.7): [подробнее](#awg3-fallback-adv). * **Нативная генерация:** Ключи генерируются через `awg genkey/pubkey`, конфиги — через Bash-шаблоны, QR — через `qrencode`. Внешняя зависимость от Python/awgcfg.py полностью устранена. * **Автоматическая установка:** Устанавливает AmneziaWG, DKMS модуль, зависимости, настраивает сеть, фаервол, sysctl. * **Возобновляемость:** Использует файл состояния (`/root/awg/setup_state`) для продолжения после обязательных перезагрузок. * **Оптимизация сервера:** * Удаление ненужных пакетов (snapd, modemmanager, и др.) * Hardware-aware настройка swap и сетевых буферов * **Безопасность по умолчанию:** * `UFW`: Политика `deny incoming`, лимит SSH, разрешение VPN-порта. * `IPv6`: По умолчанию отключается через `sysctl` (в вопросе ответ по умолчанию «да», с `--yes` отключается без вопроса; оставить - флаг `--allow-ipv6`). * `Права доступа`: Строгие права (600/700) на все ключи и конфиги. * `Sysctl`: BBR congestion control, защита от спуфинга, оптимизация TCP. * `Fail2Ban`: Автоматическая установка и настройка для SSH. * **Резервное копирование:** Команда `backup` в скрипте управления (включая ключи клиентов). --- ## 🔐 Параметры обфускации (3.1 и 2.0) Эти параметры обфускации есть в обоих профилях, 3.1 и 2.0; различаются только нижние границы `S3`/`S4` и форма `H1`-`H4` (колонка «Профиль 3.1»). Параметры, которые есть только в 3.1 (`HeaderProtectionKey`, `ContentPaddingAddition`), - в разделе [Профиль 3.1](#awg3-not-yet-adv). Все значения генерируются при установке и выдаются клиентам такими же, как на сервере. Источник истины для команд `manage` и для переустановки - живой `/etc/amnezia/amneziawg/awg0.conf`; копия набора в `/root/awg/awgsetup_cfg.init` используется, только когда `awg0.conf` нет, то есть обычно при первой установке. Ключ `HeaderProtectionKey` в init не пишется: он хранится в `awg0.conf` и в `/root/awg/server_hpk.key`. | Параметр | Описание | Профиль 2.0 | Профиль 3.1 | Пример (2.0) | |----------|----------|----------|----------|--------| | `Jc` | Количество junk-пакетов | 3-6 | так же | `5` | | `Jmin` | Мин. размер junk (байт) | 40-89 | так же | `55` | | `Jmax` | Макс. размер junk (байт) | Jmin+50..Jmin+250 | так же | `200` | | `S1` | Padding init-сообщения (байт) | 15-150 | так же | `72` | | `S2` | Padding response-сообщения (байт) | 15-150, S1+56≠S2 | так же | `56` | | `S3` | Padding cookie-сообщения (байт) | 8-55 | 12-55 | `32` | | `S4` | Padding data-сообщения (байт) | 4-27 | 12-27 | `16` | | `H1` | Идентификатор init-сообщения | Диапазон uint32 | `1` | `134567-245678` | | `H2` | Идентификатор response-сообщения | Диапазон uint32 | `2` | `3456789-4567890` | | `H3` | Идентификатор cookie-сообщения | Диапазон uint32 | `3` | `56789012-67890123` | | `H4` | Идентификатор data-сообщения | Диапазон uint32 | `4` | `456789012-567890123` | | `I1` | CPS-пакет маскировки | Теги `` / `--protocol=2.0 или там, где установщик выбрал 2.0 сам (штатный Debian 12 с ядром 6.1, ARM), - метку получает ожидаемо. Чтобы убрать её, нужен сервер 3.1, то есть переустановка с перевыпуском всех профилей, и все ваши клиенты должны понимать 3.1.
--protocol=2.0: профиль второй линии для него рабочий путь, а не временный компромисс. Третью линию на роутерах дают сторонние проекты: AWG Manager для Keenetic (v2.19.16 от 14 октября 2026; на KeeneticOS 5.2 Alpha 11 и новее штатным модулем, на других прошивках своим модулем ядра или встроенным sing-box), awg-openwrt для OpenWrt (третью линию дают только пакеты для OpenWrt 25.12.5 и 24.10.8, заменённые 22 сентября 2026 под прежними тегами; скачанные раньше и пакеты для более старых OpenWrt её не дают), для MikroTik и RouterOS - amneziawg-mikrotik-c (v1.4.3 от 8 октября 2026) и AmneziaWG-MikroTik. Таблица - в разделе Какое поколение AmneziaWG понимает клиент.
--protocol=2.0.
AllowedIPs: полный туннель разблокирует функцию, а частичный список подсетей клиент считает уже разделённым на уровне маршрутов и прячет свой переключатель с этой надписью. Надёжная форма полного туннеля, которую он распознаёт, - пара 0.0.0.0/0, ::/0, и именно её выдаёт установка по умолчанию. Надпись появляется, когда клиенту достался список подсетей вместо 0.0.0.0/0, ::/0: так выдаёт режим «Amnezia» (--route-amnezia), свой список сетей (--route-custom=) и индивидуальный AllowedIPs, заданный через modify. Решение, docker не нужен: переведите клиента на полный туннель - замените строку в его .conf на AllowedIPs = 0.0.0.0/0, ::/0 и переимпортируйте, либо перевыпустите клиента в режиме "Весь трафик" (--route-all). После этого страница раздельного туннелирования в приложении откроется, и сайты/приложения выбираются уже там. Если же нужно просто пустить в туннель часть трафика (сплит на уровне сети), это делает сам AllowedIPs - отдельная функция приложения для этого не требуется.
I1 (CPS) и зависало на подключении; на текущих версиях приложения это не перепроверено. Мобильные (iOS/Android) и CLI-клиенты CPS понимают и подключаются нормально. Ставьте с флагом --no-cps: установщик уберёт I1 из серверного конфига и всех клиентов, и десктоп подключится. Теряется только слой CPS, остальная обфускация (Jc/S1-S4/H1-H4, а на сервере 3.1 и шифрование заголовков) остаётся. На уже установленном сервере то же самое через переустановку (поколение протокола она не меняет): sudo bash install_amneziawg.sh --force --no-cps, затем перевыпустите существующих клиентов sudo bash /root/awg/manage_amneziawg.sh regen (без этого в клиентском конфиге останется I1, а десктопное приложение спотыкается именно на нём). Чтобы позже вернуть CPS, переустановите с любым флагом перегенерации набора, например --preset=default - учтите, что это перегенерирует ВЕСЬ набор обфускации (H1-H4/S1-S4 тоже), поэтому после возврата снова нужен regen всех клиентов. Флаг убирает только I1: если вы вручную прописывали I2-I5, они останутся в конфигах. Issue #159.
ListenPort в /etc/amnezia/amneziawg/awg0.conf. 2. Измените AWG_PORT в /root/awg/awgsetup_cfg.init. 3. Обновите UFW (sudo ufw delete allow <старый_порт>/udp, sudo ufw allow <новый_порт>/udp). 4. Перезапустите сервис (sudo systemctl restart awg-quick@awg0). 5. Перегенерируйте конфиги ВСЕХ клиентов (sudo bash /root/awg/manage_amneziawg.sh regen) и передайте их клиентам.
sudo bash ./install_amneziawg.sh --uninstall) и установить заново, указав новую подсеть при первом запуске. Переустановка поверх живого сервера (--force) с другой подсетью прерывается, пока в конфиге есть клиенты - их адреса выданы в старой подсети.
MTU = 1280 устанавливается автоматически. Для изменения остановите туннель (sudo systemctl stop awg-quick@awg0) и отредактируйте строку MTU = <значение> в секции [Interface] файла /etc/amnezia/amneziawg/awg0.conf и в .conf файлах клиентов. Там же, в строках PostUp и PostDown файла awg0.conf, поменяйте значения --set-mss: у правил iptables на 40 меньше MTU, у правил ip6tables (если они есть в PostUp) на 60 меньше. При MTU 1200 это 1160 и 1140. Без этого крупные пакеты перестанут пролезать в туннель, и часть сайтов будет открываться через раз. Затем запустите туннель: sudo systemctl start awg-quick@awg0. Останавливать его до правки нужно, чтобы старые правила MSS снялись по старым значениям. Подробнее - в разделе MTU и мобильные клиенты.
[Interface] серверного конфига /etc/amnezia/amneziawg/awg0.conf. Он источник истины для manage: именно оттуда add и regen берут значения для клиентских конфигов. Оттуда же их берёт переустановка (--force), если не заданы флаги --preset/--mobile/--jc/--jmin/--jmax, которые перегенерируют набор. Копия параметров (AWG_Jc, AWG_S1..S4, AWG_H1..H4, AWG_I1..I5) лежит и в /root/awg/awgsetup_cfg.init, но используется, только когда awg0.conf нет, то есть обычно при первой установке: правка только в ней не дойдёт ни до сервера, ни до клиентов. manage предупреждает, если init изменён позже awg0.conf и значения в них расходятся. Порядок ручной правки - в следующем вопросе. На сервере 3.1 в [Interface] есть ещё HeaderProtectionKey и ContentPaddingAddition, а ключ дополнительно лежит копией в /root/awg/server_hpk.key.
/etc/amnezia/amneziawg/awg0.conf в секции [Interface]; имена ключей пишите ровно как в файле.sudo systemctl restart awg-quick@awg0.sudo bash /root/awg/manage_amneziawg.sh regen. regen читает актуальные значения прямо из awg0.conf..conf / QR-коды / vpn:// URI клиентам.HeaderProtectionKey даёт переустановка (--uninstall + установка), и все профили тогда выдаются заново.
--force --preset=default) и затем regen всех клиентов.
manage add/remove/list/--expires), готовые сборки под ARM, headless-режим для автоматизации.AS24940). Обычный junk не помогает; проходит пакет I1/CPS, замаскированный под QUIC с разрешённым SNI (для Hetzner - 7-zip.org). Метод работает не у всех операторов. Полевые результаты и инструкция - в разделе Хостинг недоступен из России.
--endpoint=<внешний_IP> при установке: sudo bash ./install_amneziawg.sh --endpoint=1.2.3.4. На уже установленном сервере впишите адрес в /root/awg/awgsetup_cfg.init (строка export AWG_ENDPOINT='1.2.3.4') и перевыпустите клиентов: sudo bash /root/awg/manage_amneziawg.sh regen. Если AWG_ENDPOINT пуст, regen определяет внешний IP сам.
--endpoint=ВНЕШНИЙ_IP. 3. Убедитесь, что фаервол провайдера разрешает входящий UDP на этот порт.
modify для каждого клиента: sudo bash /root/awg/manage_amneziawg.sh modify <имя> DNS "8.8.8.8,1.0.0.1". Затем перегенерируйте конфиги: sudo bash /root/awg/manage_amneziawg.sh regen. DNS для новых клиентов задаётся строкой CLIENT_DNS в awgsetup_cfg.init, см. Изменение настроек по умолчанию.
sudo awg show. 2. Статистика передачи: sudo awg show awg0 transfer. 3. Логи сервиса: sudo journalctl -u awg-quick@awg0 -f. 4. Общий статус: sudo bash /root/awg/manage_amneziawg.sh check.
s3, s4 или I1, он старее второй линии; если на HeaderProtectionKey или ContentPaddingAddition, он не понимает 3.1. Обновите клиент: amneziawg-windows-client 3.1.0+ для сервера 3.1 (2.0.0+ для сервера 2.0) или Amnezia VPN 5.0.1.5+ (4.8.12.7+ для 2.0). Остальные клиенты - в таблице Какое поколение AmneziaWG понимает клиент.
S3>0 или S4>0 (cookie-/data-padding из AWG 2.0), AWG 1.0-клиент не сможет с ним handshake-нуться - это известная upstream-проблема: amnezia-vpn/amneziawg-linux-kernel-module#168. Мой инсталлятор всегда генерирует оба >0: в профиле 2.0 S3=8..55, S4=4..27, в профиле 3.1 от 12.
.conf, сгенерированные manage add) проблемы нет: manage всегда вписывает S3/S4 в клиентский .conf автоматически. Риск возникает только при:
.conf со снятием S3/S4;wg-quick на старом ядре, без amneziawg-модуля);S3=0/S4=0.S3/S4 в client .conf идентичными серверным. Если очень нужен AWG 1.0 fallback — это отдельная задача за пределами штатного сценария установки, ждите фикса в upstream-issue #168.
dkms status. 2. Попробуйте пересобрать: sudo dkms install amneziawg/$(dkms status | grep amneziawg | head -1 | awk -F'[,/ ]+' '{print $2}'). 3. Убедитесь, что установлены заголовки ядра: sudo apt install linux-headers-$(uname -r). 4. При неустранимой ошибке запустите диагностику: sudo bash ./install_amneziawg.sh --diagnostic.
apt upgrade ядра DKMS не всегда успевал пересобрать модуль amneziawg к моменту следующего reboot. Симптом: awg-quick@awg0 падает с modprobe: FATAL: Module amneziawg not found, и VPN лежит до ручной правки.
/etc/apt/apt.conf.d/99-amneziawg-post-kernel — после apt upgrade хелпер /usr/local/sbin/amneziawg-ensure-module --hook пересобирает DKMS под новое ядро. Лог: /var/log/amneziawg-ensure-module.log (weekly rotate, 4 копии).amneziawg-ensure-module.service — на boot перед awg-quick@awg0 хелпер итерирует ядра с уже установленными headers, пересобирает DKMS под текущее ядро, делает modprobe amneziawg и проверяет загрузку через lsmod. Если headers ещё не установлены — пишет WARN и завершает успехом, не блокируя загрузку. Логи в journal: journalctl -u amneziawg-ensure-module.service.sudo bash /root/awg/manage_amneziawg.sh repair-module доустановит kernel-headers (с AWG_ALLOW_APT_IN_ENSURE=1), пересоберёт DKMS, перезапустит awg-quick.sudo apt install linux-headers-$(uname -r) sudo dkms autoinstall sudo modprobe amneziawg sudo systemctl restart awg-quick@awg0Ограничения:
.deb, а не DKMS - auto-repair не задействован. После kernel upgrade запустите установщик повторно: он подберёт новый prebuilt или перейдёт на DKMS. manage repair-module недостающий готовый модуль не заменит.uname -r (например, linux-headers-azure). Если у вас custom kernel или нестандартный flavor — manage repair-module сделает то же самое в reactive-режиме.sudo bash /root/awg/manage_amneziawg.sh backup. 2. Скопируйте архив: scp root@старый_сервер:/root/awg/backups/awg_backup_*.tar.gz .. 3. На новом сервере установите AmneziaWG того же поколения, что на старом (для сервера 2.0 - с --protocol=2.0): restore возвращает сервер к поколению копии и предупреждает об этом. Бэкап сервера 3.1 переносит и ключ защиты заголовков, поэтому клиентам после переезда нужны новые конфиги только ради нового адреса. Хотите заодно перейти с 2.0 на 3.1 - не восстанавливайте копию, а выдайте клиентам новые профили. 4. Скопируйте бэкап: scp awg_backup_*.tar.gz root@новый_сервер:/root/awg/backups/. 5. Восстановите: sudo bash /root/awg/manage_amneziawg.sh restore (интерактивный выбор, или укажите полный путь к архиву). 6. Проверьте то, что приехало со старого сервера: в /etc/amnezia/amneziawg/awg0.conf строки PostUp/PostDown содержат имя сетевого интерфейса старой машины (-o eth0 и т.п.). Если у нового сервера он называется иначе (ip route get 1.1.1.1), замените имя и перезапустите сервис (sudo systemctl restart awg-quick@awg0). ListenPort должен совпадать с портом, открытым в UFW. Если в /root/awg/awgsetup_cfg.init задан AWG_ENDPOINT, впишите туда новый адрес или оставьте пустым для автоопределения. 7. Перегенерируйте конфиги с новым IP: sudo bash /root/awg/manage_amneziawg.sh regen. 8. Раздайте новые конфиги клиентам.
MTU = 1280 в секции [Interface] серверного и клиентского конфигов: установщик ставит её сам с v5.7.4, в более старых конфигах её надо добавить (сотовые сети имеют MTU ниже стандартных 1420, а iOS строго обрабатывает PMTU, подробнее - в разделе MTU и мобильные клиенты). Если строка на месте, а рукопожатие на мобильной сети не собирается, дело обычно в I1 или порте: см. Рукопожатие не собирается на мобильном интернете, а при нестабильном подключении - следующий вопрос. Клиенту сервера 3.1 нужна поддержка 3.1, см. таблицу клиентов.
0.0.0.0/5, который включает служебный 0.0.0.0/8. Ядро iOS спотыкается на этом блоке и не доходит до остальных маршрутов, поэтому туннель поднимается и через ~10 секунд встаёт (симптом легко спутать с DPI). Разобрался и предложил фикс @LiaNdrY (Issue #42). В v5.16.1 первый диапазон списка разбит на 1.0.0.0/8, 2.0.0.0/7, 4.0.0.0/6 - это тот же охват без проблемного нулевого блока, частные сети по-прежнему остаются вне туннеля.
/root/awg/awgsetup_cfg.init и обычной переустановкой с --force не меняется (берётся из конфига). Поэтому: (1) быстрый разовый фикс - в конфиге iOS-клиента заменить строку AllowedIPs = ... на AllowedIPs = 0.0.0.0/0; (2) сохранить список режима «Amnezia» - отредактировать /root/awg/awgsetup_cfg.init, заменив начальный 0.0.0.0/5 на 1.0.0.0/8, 2.0.0.0/7, 4.0.0.0/6, затем пересоздать клиента (remove + add); (3) либо чистая установка заново (--uninstall, затем установка v5.16.1) - тогда список сгенерируется корректно.
I1, а количество и размер junk-пакетов (Jc, Jmin, Jmax) на него не влияют. Если же подключение просто нестабильно, попробуйте флаг --preset=mobile (с v5.10.0): у него junk-пакетов меньше и они мельче (Jc=3). В Discussion #38 (@elvaleto) на Таттелеком (Летай) с Jc=4-8 подключалось раза с третьего, а после снижения Jc = 3 заработало сразу.
sudo bash install_amneziawg.sh --preset=mobile --yesСуществующая установка — ручная правка:
/etc/amnezia/amneziawg/awg0.conf и замените Jc на 3. Если I1 вида <r N> с N больше 64, замените его на строку формы DNS (где её взять - в разборе) или на <r 64>. I1 формы DNS, который пишут установки v5.33.0 и новее, не трогайте.sudo systemctl restart awg-quick@awg0sudo bash /root/awg/manage_amneziawg.sh regen <имя_клиента> для каждого клиента.I1, см. разбор.
| Оператор | Параметры | Рекомендация | Результат |
|---|---|---|---|
| Таттелеком (Летай) | Jc=3, I1=<r 64> | --preset=mobile | ✅ |
| Yota (Москва) | I1=<b 0xce...>, Jmax=261 | --preset=mobile | ✅ |
| Yota/Tele2 (Москва) | Jc=3, Jmin=40, Jmax=70 | --preset=mobile | ✅ |
| Tele2 (Красноярск) | ранее I1=отсутствует; май 2026: I1=<r 48> | --preset=mobile; в майскую волну I1=<r 48> | ✅ |
| МТС (Приморье) | Jc=3, I1=<r 48> (май 2026) | --preset=mobile + I1=<r 48> | ✅ |
| МТС (Москва) | случайный I1=<r 96> и длиннее не проходит, <r 64> и I1 формы DNS проходят; Jc/Jmin/Jmax не влияют (замер, сентябрь 2026) | I1 формы DNS (на новых установках с v5.33.0 его пишет установщик) или <r 64>, см. разбор | ✅ |
| Beeline | дефолт | --preset=default | ✅ |
| Megafon (Москва) | Jc=3, Jmin=80, Jmax=268 | --preset=mobile | 🔄 тестируется |
| Megafon (регионы) | I1=отсутствует | --preset=mobile + удалить I1 | ✅ |
| Т-Мобайл (Москва и область) | узкий профиль (как в приложении Amnezia): Jc=6, Jmin=10, Jmax=50, DNS-мимик I1=<r 2><b 0x8580...> (полный вид в разделе про роутеры ниже); полный туннель 0.0.0.0/0, ::/0 | ручные параметры; профиль в diagnose --carrier=tmobile_us (имя историческое, профиль относится к этому оператору; сверяет Jc/Jmin/Jmax и что I1 бинарного вида); --preset=mobile здесь не подходит | ✅ |
| Tele2 + Мегафон (Кемерово, 42) | случайный I1 (<r N>) перестал держаться через 2+ дня; работает QUIC-мимикрия I1=<b 0xc3...> либо I1=отсутствует | --preset=mobile + I1=<b 0xc3...> (QUIC) либо удалить I1 | ✅ |
/etc/amnezia/amneziawg/awg0.conf и в клиентских .conf удалить строку I1 = ... целиком (не оставлять пустую). Это режим без маскирующего пакета: остальная обфускация остаётся, а CPS нет (если вы не задавали I2-I5), и handshake проходит DPI у некоторых региональных операторов, где CPS-пакеты сами триггерят блок (Issue #42, @alkorrnd). После правки на сервере: sudo systemctl restart awg-quick@awg0. На клиентах - sudo bash /root/awg/manage_amneziawg.sh regen <имя> для каждого, и раздать новые конфиги.
I1=отсутствует на Tele2 (Красноярск) перестал срабатывать, а короткий I1 = <r 48> прошёл DPI. То же сработало на МТС (Приморье). Тогда это объяснили размером: меньшее значение <r 48> менее заметно для DPI. ⚠️ Замер сентября 2026 уточняет причину: решает не размер, а ФОРМА пакета. Пакет из случайных байт режется независимо от того, велик он или мал (мал - просто реже), а пакет той же длины, но похожий на настоящий протокол, проходит. Короткий <r 48> помогает потому, что на коротком мусоре фильтру не за что зацепиться, и это слабее, чем осмысленная форма. Подробности и таблица: рукопожатие не собирается на мобильном интернете. Если --preset=mobile или I1=отсутствует не помогают - попробуйте I1 = <r 48>. Профиль diagnose --carrier=tele2_krasnoyarsk пока отражает прежнее I1=отсутствует (Issue #42), так что для майской волны задайте I1 = <r 48> вручную (Discussion #38, @alkorrnd + @etotent).
<r N> можно задать I1 как блок, имитирующий начало QUIC-пакета: I1 = <b 0xc30000000108><r 8><b 0x08><r 8><b 0x0045dc><t><r 16>. Первые байты (0xC3 + версия) похожи на QUIC v1 long-header, и DPI, который классифицирует UDP/443 как QUIC, в этом отчёте поток пропустил. На Tele2/Мегафон (Кемерово) держится 2+ дня (Issue #42, @Fourdot-co). Это client-side параметр, меняется только в клиентских .conf, синхронизировать с сервером не нужно; учтите, что правка только одного экспортированного .conf потеряется при следующей перегенерации клиента (regen). Важно: не берите за основу TLS ClientHello (<b 0x160301...>) - это TCP-формат, в UDP DPI распознает TCP-структуру и дропнет пакет. Для UDP-мимикрии подходят QUIC long-header или DTLS (тот же тип handshake ClientHello, но с record header, где добавлены epoch и sequence number).
net.ipv4.conf.all.rp_filter = 1 (strict reverse-path filtering). На Hetzner и подобных облачных хостерах, где шлюз находится в другой подсети чем IP самой VPS, strict mode ломает routing — ответные пакеты не проходят проверку обратного пути. Симптомы: VPS периодически теряет сеть (раз в сутки), а VNC-консоль забивается строками [UFW BLOCK] от Fail2Ban и становится непригодной для работы. Discussion #41 (@z036). С v5.8.2 rp_filter установлен в 2 (loose mode), который проверяет source IP по любому маршруту в таблице (не только обратному через тот же интерфейс), и добавлен kernel.printk = 3 4 1 3 для подавления не-критических kernel messages на VNC-консоли. Если у тебя установка до v5.8.2 — исправь вручную:
/etc/sysctl.d/99-amneziawg-security.confrp_filter = 1 на rp_filter = 2 (обе строки: conf.all и conf.default)kernel.printk = 3 4 1 3sudo sysctl -p /etc/sysctl.d/99-amneziawg-security.confping между сервером и клиентами внутри туннеляufw default deny incoming — это блокирует всё входящее на всех интерфейсах, включая awg0. Forward-правило ufw route allow in on awg0 out on <public_iface> разрешает только туннель → интернет, а input на awg0 (пакеты от клиентов на сам сервер, в том числе ICMP echo-request) под него не попадает.
/etc/ufw/before.rules и заменил ACCEPT на DROP для ICMP без указания интерфейса, эти правила применяются ко всем интерфейсам — включая awg0.
awg0 в UFW:
sudo ufw allow in on awg0 sudo ufw reloadЭто разрешает входящие на интерфейс туннеля целиком — узкая фильтрация ICMP делается через
-i в before.rules (см. ниже).
/etc/ufw/before.rules, добавь -i <public_iface> ко всем DROP-строкам ICMP:
# вместо -A ufw-before-input -p icmp --icmp-type echo-request -j DROP # так (ens3 — твой публичный интерфейс) -A ufw-before-input -i ens3 -p icmp --icmp-type echo-request -j DROPТо же самое для
destination-unreachable, time-exceeded, parameter-problem. Имя публичного интерфейса: ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}'. Применить: sudo ufw reload.
ufw allow in on awg0 proto icmp — UFW не поддерживает icmp через флаг proto (только tcp/udp/esp/ah/gre/ipv6).
ping <IP_сервера_в_туннеле>. С сервера на клиента (ping <IP_клиента>) может не отвечать сам клиент: на Windows и iOS встроенный фаервол часто режет echo-request — поэтому надёжнее проверять с клиента на сервер.
AllowedIPs на клиенте под split tunneling (через VPN идут только нужные подсети - например, только Telegram/Discord, а остальной трафик мимо), убедись что в списке есть подсеть туннеля (10.9.9.0/24 или твоя кастомная). Без неё клиент не маршрутизирует в туннель даже пакеты к самому серверу - ufw status verbose и iptables -L ufw-before-input -v -n могут выглядеть правильно, а ping всё равно не идёт. Покрытие зависит от выбранного режима: дефолтный --route-all (полный туннель 0.0.0.0/0) включает подсеть туннеля автоматически; --route-amnezia (Amnezia List, исключает 10.0.0.0/8) и --route-custom= - нет, добавляй вручную.
sudo ufw route allow in on awg0 out on awg0 && sudo ufw reload. AllowedIPs в клиентских .conf зависит от режима, выбранного при установке (см. абзац выше). Discussion #63.
amneziawg-go внутри LXC, настроенная вручную: LXC / Docker через amneziawg-go.
--endpoint отклоняется с ошибкой «Некорректный --endpoint» — что проверить?--endpoint проходит валидацию перед записью в конфиги. Разрешены три формата: FQDN (vpn.example.com), IPv4 (1.2.3.4), IPv6 в квадратных скобках ([2001:db8::1]). Запрещены перевод строки, CR, одинарные и двойные кавычки, обратный слеш, пробелы и табуляции — они могли бы инжектиться в awgsetup_cfg.init и клиентские .conf. Если нужно передать IPv6 — оберните в []. Если AWG_ENDPOINT в awgsetup_cfg.init не проходит валидацию при повторном запуске, инсталлятор выводит log_warn и использует автоопределение через get_server_public_ip.
flock на /root/awg/.install.lock в начале initialize_setup(). Это защищает от двух параллельных запусков которые иначе могли бы гонять apt-get одновременно и сломать package state. Если ты видишь эту ошибку но никакого второго инсталлятора нет (процесс висит / упал) — удали /root/awg/.install.lock и попробуй снова.
--uninstall не отключил UFW?/root/awg/.ufw_enabled_by_installer только если активировал UFW сам (до этого UFW был в состоянии inactive). При --uninstall UFW отключается только при наличии маркера. Если до установки нашего скрипта UFW уже был активен (например, для защиты SSH или web-сервисов), --uninstall удалит наши правила (VPN-порт, awg0 routing; добавленное правило SSH rate-limit при этом остаётся), но оставит UFW активным. Это защита от destructive uninstall на чужой инфраструктуре. Если тебе нужно принудительно отключить UFW — ufw disable вручную.
regen говорит «отсутствуют обязательные AWG-параметры» — что делать?load_awg_params читает AWG-параметры напрямую из live /etc/amnezia/amneziawg/awg0.conf, а не из закешированного awgsetup_cfg.init. Если ты правил awg0.conf руками и удалил/повредил одно из обязательных полей (Jc, Jmin, Jmax, S1-S4, H1-H4), regen упадёт с этой ошибкой вместо того чтобы молча использовать устаревшие значения из init-файла. Это защита от split-brain между сервером и клиентами. Что делать: (1) проверь grep -E "^(Jc|Jmin|Jmax|S[1-4]|H[1-4]) = " /etc/amnezia/amneziawg/awg0.conf - все 11 полей должны быть; (2) если поле удалено, восстанови его из /root/awg/awgsetup_cfg.init или из awg0.conf.bak-* бэкапа; (3) перезапусти сервис и повтори regen. На сервере 3.1 regen после этой проверки сверяет ещё HeaderProtectionKey в awg0.conf с его копией /root/awg/server_hpk.key; если ошибка про ключ, не создавайте новый (он отрежет всех клиентов). В awg0.conf ключ, заданный серверу (живой интерфейс подхватит его правку только после перезапуска), а в файле - ключ, из которого выпускались профили. Если они разошлись, решите, какой у ваших клиентов: сравните с любым клиентским .conf. Если верен ключ из awg0.conf, уберите файл в сторону (mv /root/awg/server_hpk.key /root/awg/server_hpk.key.old) и запустите manage regen: пропавший файл manage восстанавливает из конфига сам. Если верен ключ из файла, впишите его в строку HeaderProtectionKey в awg0.conf и перезапустите awg-quick@awg0 (или верните конфиг из бэкапа командой manage restore, но бэкап может быть старше последних клиентов).
amneziawg-windows-client подчёркивает H2-H4 красным и не даёт редактировать конфигamneziawg-windows-client (форк wireguard-windows с AWG-патчами). Его встроенный редактор конфигов в ui/syntax/highlighter.go ограничивает H1-H4 диапазоном [0, 2147483647] (это 2^31-1, INT32_MAX), хотя спецификация AmneziaWG допускает полный uint32 (0-4294967295). Значения выше 2^31-1 на сервере работают нормально, но клиент подчёркивает их красным и может блокировать сохранение правок. Upstream issue: amnezia-vpn/amneziawg-windows-client#85 (открыт с февраля 2026, не исправлен). Наш installer с v5.8.1 генерирует H1-H4 в безопасной половине диапазона [0, 2^31-1] — новые установки совместимы с Windows-клиентом из коробки. Если у тебя установка v5.8.0 с «плохими» H: (1) обнови через --uninstall + install_amneziawg.sh v5.8.1 — новые H будут в безопасном диапазоне; либо (2) поправь H2/H3/H4 в awg0.conf вручную на значения меньше 2147483647, перезапусти сервис и перегенерируй клиентские конфиги через manage regen <имя>; либо (3) используй кросс-платформенный Amnezia VPN клиент вместо amneziawg-windows-client — у него этого ограничения нет. Discussion: #40.
<имя>.png своим сканером, переподключались меньше чем за секунду и не теряли туннель при переходе с Wi-Fi на мобильную сеть. На iPhone, Mac и Windows - лёгкий AmneziaWG для вашей платформы (для 3.1: iOS и macOS >= 3.1.4, Windows >= 3.1.0); iPhone и Mac в этой проверке не участвовали. Amnezia VPN (для 3.1 >= 5.0.1.5, для 2.0 >= 4.8.12.7) тоже поддерживается и принимает ссылку vpn://; на Android в той же проверке версия 5.0.3 подключалась около 2 секунд, а после выключения Wi-Fi туннель не восстановился, в том числе по кнопке подключения, помог только перезапуск приложения. На Linux - awg-quick из amneziawg-tools с модулем или amneziawg-go, понимающими поколение сервера (для сервера 3.1 - третьей линии; сборка третьей линии работает и с 2.0), см. Подключение Linux-машины как клиента. Стандартный WireGuard-клиент не подходит. Полная таблица совместимости - в разделе Совместимость клиентов.
S4 по умолчанию (0), а не с заданным в конфиге, и сервер его отбросит (amneziawg-go#168; исправление предложено в #184 и на 13 октября 2026 не влито). Потеря первого пакета обычно означает повторную передачу TCP-пакета или повтор DNS-запроса, то есть задержку; если приложение запрос не повторяет, он может закончиться тайм-аутом. WG Tunnel собран на собственном форке этого движка; есть ли гонка в нём, мы не проверяли. Сама по себе эта гонка не говорит о проблеме в конфиге или на сервере.
tc (traffic control): sudo tc qdisc add dev awg0 root tbf rate 100mbit burst 32kbit latency 400ms. Это ограничит общую пропускную способность интерфейса. Для per-client лимитов потребуется более сложная настройка с tc и iptables (mark + class).
uname -r vs ls /lib/modules/. Если они различаются, обновите ядро: sudo apt update && sudo apt upgrade, перезагрузитесь и запустите инсталлятор повторно.
/root/awg/install_amneziawg.log) строку Предсобранный пакет установлен (английский установщик пишет Prebuilt installed). Если её нет, модуль собран через DKMS: при откате на сборку журнал пишет откат на DKMS.