Свой VPN-сервер AmneziaWG 2.0 одной командой
Превратите чистый VPS с Ubuntu или Debian в self-hosted VPN с обходом DPI и блокировок. Без Docker, без веб-панели, без знаний Linux.
$ wget -O install_amneziawg.sh https://raw.githubusercontent.com/bivlked/amneziawg-installer/v5.21.2/install_amneziawg.sh $ chmod +x install_amneziawg.sh $ sudo bash ./install_amneziawg.sh
Берите актуальную версию со страницы релизов. Три команды, две перезагрузки, около двадцати минут до готового VPN.
Что это даёт
AmneziaWG - это WireGuard с обфускацией трафика, поэтому для DPI handshake уже не выглядит как обычный VPN. Скрипт настраивает весь сервер за вас.
Вы даёте команду свежему VPS по SSH. Она ставит модуль ядра AmneziaWG 2.0 через DKMS, закрывает firewall, включает форвардинг, оптимизирует систему под одну задачу и создаёт первого клиента. В конце вы получаете QR-код и vpn-ссылку для импорта в Amnezia Client в одно касание. Добавить ещё устройство потом - одна команда.
Возможности
Всё, что нужно небольшому VPN-серверу, с разумными настройками по умолчанию и без правки конфигов вручную.
Обход DPI
Полная обфускация AmneziaWG 2.0: мусорные пакеты, маскировка заголовков (H1-H4), паддинг (S1-S4) и пакеты сокрытия I1-I5.
Защита по умолчанию
Firewall UFW с deny-all и лимитом на SSH, Fail2Ban, строгие права на файлы и hardening через sysctl.
Управление клиентами
Добавление, удаление, список и перегенерация. QR-коды, vpn-ссылки для импорта в одно касание и гостевые конфиги с датой истечения.
IPv6 dual-stack
Опциональная двухстековая маршрутизация, по умолчанию выключена и включается одним флагом, когда нужно.
ARM и Raspberry Pi
Готовые модули ядра для Raspberry Pi 3, 4 и 5, Hetzner CAX, Oracle Ampere A1 и AWS Graviton.
Переживает перезагрузки
Машина состояний с возобновлением после ребута и авто-починка DKMS, которая пересобирает модуль после обновления ядра.
Понимает скрипты и ботов
Почти все команды управления понимают --json и отвечают одним объектом даже при сбое (list и stats отдают массив). На этом уже работает сторонний Telegram-бот.
Мобильные операторы
Флаг --mobile включает профиль под сотовые сети и, если порт не задан явно, берёт 443/udp: нестандартные UDP-порты у операторов часто не проходят.
Быстрый старт
От чистого VPS до работающего VPN за три шага.
Арендуйте чистый VPS с Ubuntu или Debian и подключитесь по SSH под root.
Запустите команду выше. Скрипт сам перезагрузит сервер, когда нужно. После ребута запустите её снова - она продолжит с того места, где остановилась.
Отсканируйте QR-код или откройте vpn-ссылку в Amnezia Client. Готово, вы подключены.
Для автоматизации тот же скрипт принимает --yes --route-all и любой другой параметр флагом. Полный гайд покрывает выбор VPS, нюансы ARM, диагностику и удаление.
Поддерживаемые системы
Проверено на чистых минимальных серверных установках. Обновления ядра обрабатываются автоматически через DKMS.
Рассчитано на скромный бюджет: 1 vCPU, от 512 МБ памяти, 5 ГБ диска. И amd64, и arm64.
Почему обычный bash-скрипт
Работает как модуль ядра, и между вами и туннелем нет ничего лишнего.
Веб-панель оправдана только если вы постоянно заводите и меняете клиентов. У большинства VPN-сервер настраивается один раз и забывается, так что bash-подход держит след минимальным и спокойно работает на самом дешёвом VPS. Модуль в ядре быстрее, чем туннель в userspace, и нет ничего лишнего, что нужно патчить. Если вам всё же хочется UI или другой компромисс - в сравнении в README честно написано, когда другой инструмент подойдёт лучше. А чем он отличается от официального приложения Amnezia - на отдельной странице.
Частые вопросы
Это бесплатно?
Нужны ли знания Linux?
Какой VPS выбрать?
Обходит ли DPI и блокировки?
Работает ли на ARM и Raspberry Pi?
Как обновиться на новую версию?
--force. Ключи сервера, клиенты и настройки обфускации переживают переустановку. После обновления ядра модуль DKMS пересобирается автоматически при следующей загрузке.Можно ли управлять из скрипта или бота?
--json и отвечают одним JSON-объектом даже тогда, когда команда завершилась ошибкой - разбирать ответ можно всегда. Исключения: list и stats отдают массив, а show и diagnose флага не понимают. Новые поля со временем появляются, существующие я не переименовываю. Для запусков без человека есть --yes, а с AWG_STRICT_CONFIRM=1 команда вроде удаления клиента откажется работать, если --yes забыли, вместо молчаливого согласия. На этом интерфейсе уже работает сторонний Telegram-бот awgram.AmneziaWG не подключается, хотя обычный WireGuard работает?
[Interface]. Совпадать обязаны S1-S4 и H1-H4: приёмник срезает этот паддинг и проверяет эти заголовки, поэтому любое расхождение здесь означает, что пакет отброшен и хендшейк не сойдётся. В 2.0 H1-H4 задаются диапазонами - диапазоны должны быть одинаковыми на обеих сторонах. А Jc/Jmin/Jmax и маскирующие пакеты 2.0 I1-I5 совпадать не обязаны: это отдельные пакеты-обманки, вторая сторона их отбрасывает, а узел без I1 просто не шлёт их вовсе. Регистр у I1-I5 при этом важен: только верхний. Сверьте и версии: старые сборки amneziawg-tools не понимают 2.0. Полный разбор - в подробном руководстве по диагностике.