Свой VPN-сервер AmneziaWG 3.1 одной командой
Превратите чистый VPS с Ubuntu или Debian в self-hosted VPN с обходом DPI и блокировок. Без Docker, без веб-панели, без знаний Linux.
Новая установка по умолчанию ставит AmneziaWG 3.1. Роутерам, чья прошивка ещё не поддерживает 3.1 (например, стабильная KeeneticOS), Hiddify и давно не обновлявшимся приложениям нужен 2.0: добавьте --protocol=2.0. На ARM и на ядре старше 6.7 установщик сам ставит 2.0, а уже работающий сервер остаётся на своей версии. Что ставится и как вернуться на 2.0
$ wget -O install_amneziawg.sh https://github.com/bivlked/amneziawg-installer/releases/latest/download/install_amneziawg.sh $ chmod +x install_amneziawg.sh $ sudo bash ./install_amneziawg.sh
Команда всегда берёт последний релиз, все версии есть на странице релизов. Перед запуском можно проверить подпись. Три команды, две перезагрузки, около двадцати минут до готового VPN.
Что это даёт
AmneziaWG - это WireGuard с обфускацией трафика, поэтому для DPI handshake уже не выглядит как обычный VPN. Скрипт настраивает весь сервер за вас.
Вы даёте команду свежему VPS по SSH. Она ставит модуль ядра AmneziaWG, закрывает firewall, включает форвардинг, оптимизирует систему под одну задачу и создаёт первого клиента. В конце вы получаете QR-код для WG Tunnel или приложения AmneziaWG и ссылку vpn:// для Amnezia VPN. Добавить ещё устройство потом - одна команда.
Возможности
Всё, что нужно небольшому VPN-серверу, с разумными настройками по умолчанию и без правки конфигов вручную.
Обход DPI
AmneziaWG 3.1 по умолчанию: шифрование заголовков и добавочный паддинг поверх мусорных пакетов, паддинга S1-S4 и маскирующего пакета I1. Профиль 2.0, где заголовки маскируются (H1-H4), а не шифруются, включается одним флагом.
Защита по умолчанию
Firewall UFW с deny-all и лимитом на SSH, Fail2Ban, строгие права на файлы и hardening через sysctl.
Управление клиентами
Добавление, удаление, список и перегенерация. QR-коды, vpn-ссылки для импорта в одно касание и гостевые конфиги с датой истечения.
IPv6
В профиле по умолчанию IPv6 устройства уходит в туннель и там глохнет, наружу со своим адресом он не выходит. Пока такой VPN включён, ресурсы только по IPv6 недоступны, и локальная сеть по IPv6 тоже. Локальную сеть по IPv4 полный туннель по умолчанию тоже забирает в VPN, и останется ли она доступной, решает клиент: нужны домашние устройства при включённом VPN - ставить с --route-amnezia. Нужен рабочий IPv6 в туннеле - --allow-ipv6-tunnel при нативном IPv6 на сервере.
ARM и Raspberry Pi
Готовые модули ядра для Raspberry Pi и для Ubuntu 24.04 и Debian 12/13 на ARM64-серверах (Hetzner CAX, Oracle Ampere A1, AWS Graviton), а где пакета нет - сборка через DKMS. ARM-серверы получают профиль 2.0.
Переживает перезагрузки
Машина состояний с возобновлением после ребута. После обновления ядра DKMS сам собирает модуль под новое ядро, а на ARM с готовым модулем его ставит повторный запуск установщика.
Понимает скрипты и ботов
Почти все команды управления понимают --json и отвечают одним объектом даже при сбое (list и stats отдают массив). На этом уже работает сторонний Telegram-бот.
Мобильные операторы
Флаг --mobile включает профиль под сотовые сети и, если порт не задан явно, берёт 443/udp: нестандартные UDP-порты у операторов часто не проходят.
Как установить AmneziaWG 3.1 на свой сервер
От чистого VPS до работающего VPN за три шага.
Арендуйте чистый VPS с Ubuntu или Debian и подключитесь по SSH под root.
Запустите команду выше. Скрипт сам перезагрузит сервер, когда нужно. После ребута запустите её снова - она продолжит с того места, где остановилась.
Заберите файлы клиента с сервера из
/root/awg/(как это сделать, показано в README), затем добавьте их в приложение: WG Tunnel или AmneziaWG на Android, AmneziaWG на iPhone (QR-код или файл .conf), AmneziaWG на Mac и Windows (файл .conf) (почему эти). Amnezia VPN вместо этого принимает ссылку vpn://. Для сервера 3.1 приложение должно поддерживать 3.1: какие поддерживают.
Для автоматизации тот же скрипт принимает --yes --route-all и любой другой параметр флагом. Полный гайд покрывает выбор VPS, нюансы ARM, диагностику и удаление.
Поддерживаемые системы
Проверено на чистых минимальных серверных установках. Обновления ядра обрабатываются автоматически через DKMS, а на ARM-серверах с готовой сборкой после смены ядра запустите установщик ещё раз.
Для нового сервера: Ubuntu 24.04 LTS или Debian 13 - выбор по умолчанию, Ubuntu 26.04 тоже подойдёт.
Debian 12 ставится и работает, но для нового сервера его лучше не брать. У Debian 12 обычная поддержка кончилась 11 июля 2026, обновления безопасности идут через Debian LTS до 30 июня 2028. К тому же на его штатном ядре 6.1 ставится AmneziaWG 2.0, а не 3.1. Ubuntu 25.10 с версии 6.0.0 не поддерживается: у неё закончилась поддержка от Canonical.
Рассчитано на скромный бюджет: 1 vCPU, от 512 МБ памяти, от 2 ГБ свободного места на диске (лучше 3 ГБ). И amd64, и arm64.
Почему обычный bash-скрипт
Работает как модуль ядра, и между вами и туннелем нет ничего лишнего.
Веб-панель оправдана только если вы постоянно заводите и меняете клиентов. У большинства VPN-сервер настраивается один раз и забывается, так что bash-подход держит след минимальным и спокойно работает на самом дешёвом VPS. Модуль в ядре быстрее, чем туннель в userspace, и нет ничего лишнего, что нужно патчить. Если вам всё же хочется UI или другой компромисс - в сравнении в README честно написано, когда другой инструмент подойдёт лучше. А чем он отличается от официального приложения Amnezia - на отдельной странице.
Частые вопросы
Что такое AmneziaWG?
Как установить AmneziaWG 3.1 на свой сервер?
wget -O install_amneziawg.sh https://github.com/bivlked/amneziawg-installer/releases/latest/download/install_amneziawg.sh и запустите его: sudo bash ./install_amneziawg.sh. Понадобятся две перезагрузки: на вопрос «Перезагрузить сейчас?» ответьте y, затем подключитесь снова и повторите вторую команду. Профиль 3.1 ставится по умолчанию, модулем ядра и без Docker; на ARM и на штатном Debian 12 установщик сам поставит 2.0. Другой путь - официальное приложение Amnezia VPN: оно подключается к серверу по SSH и разворачивает AmneziaWG в Docker, а клиентами вы управляете из приложения. Чем подходы отличаются, разобрано на странице сравнения.Это бесплатно?
Нужны ли знания Linux?
/root/awg/, а как перенести их на телефон, показано в README.Какой VPS выбрать?
--ssh-port=ПОРТ. Установщик определяет порт и сам, но при установке с --yes подтверждения не будет, и проверить его окажется некому.Обходит ли DPI и блокировки?
Какую версию AmneziaWG ставит установщик - 3.1 или 2.0?
HeaderProtectionKey) и добавочный паддинг поверх обфускации 2.0. На ядре старше 6.7 (штатный Debian 12) и на ARM установщик сам ставит 2.0 и объясняет причину в итоговом отчёте. Клиентам без поддержки 3.1, например роутерам на стабильной KeeneticOS, Hiddify и давно не обновлявшимся приложениям, нужен сервер, поставленный с --protocol=2.0. Уже работающий сервер после обновлений остаётся на своей версии. Обычно сменить её - это --uninstall, новая установка и новые профили для всех клиентов; восстановление бэкапа, снятого на другом поколении, тоже её меняет, с предупреждением заранее.Работает ли на ARM и Raspberry Pi?
Как обновиться на новую версию?
--force. Ключи сервера, клиенты и настройки обфускации переживают переустановку, и версия протокола тоже: сервер 2.0 остаётся на 2.0. После обновления ядра DKMS сам собирает модуль под новое ядро. На ARM с готовым модулем повторный запуск установщика ставит модуль под текущее ядро.Можно ли управлять из скрипта или бота?
--json и отвечают одним JSON-объектом даже тогда, когда команда завершилась ошибкой - разбирать ответ можно всегда. Исключения: list и stats отдают массив, а show и diagnose флага не понимают. Новые поля со временем появляются, существующие я не переименовываю. Для запусков без человека есть --yes, а с AWG_STRICT_CONFIRM=1 команда вроде удаления клиента откажется работать, если --yes забыли, вместо молчаливого согласия. На этом интерфейсе уже работает сторонний Telegram-бот awgram.AmneziaWG не подключается, хотя обычный WireGuard работает?
[Interface]. Совпадать обязаны S1-S4: приёмник срезает этот паддинг, поэтому расхождение означает, что пакет отброшен и хендшейк не сойдётся. H1-H4 должны быть совместимы: приёмник проверяет, что полученное значение попадает в его собственный диапазон, так что проще всего держать их одинаковыми. В 2.0 это диапазоны, в профиле 3.1 - 1-4. Серверу 3.1 нужен ещё одинаковый HeaderProtectionKey у каждого клиента: без него или с другим ключом хендшейка нет, и ошибки часто тоже нет. А Jc/Jmin/Jmax, маскирующие пакеты I1-I5 и ContentPaddingAddition совпадать не обязаны: пакеты-обманки вторая сторона отбрасывает, а узел без I1 просто не шлёт их вовсе. Регистр у I1-I5 при этом важен: только верхний. Сверьте и версии: приложение без поддержки 3.1 к серверу 3.1 не подключится, а старые сборки amneziawg-tools не понимают 2.0. Полный разбор - в подробном руководстве по диагностике.