Скрипт для автоустановки AmneziaWG 2.0 на Ubuntu

Привет!

Поделюсь скриптом, который написал для автоматической установки и настройки AmneziaWG 2.0 на выделенном Ubuntu-сервере (24.04 / 25.10). Рассчитан на тех, кто хочет быстро поднять VPN одной командой на чистом сервере без глубоких знаний Linux, не упустив при этом важных моментов.

Что делает

  • Полная установка AmneziaWG 2.0 с нуля (PPA, DKMS, ядерный модуль)

  • Генерация параметров обфускации AWG 2.0 (H1–H4 ranges, S1–S4, I1 CPS, Jc/Jmin/Jmax)

  • Создание клиентских конфигов с QR-кодами

  • Настройка UFW, Fail2Ban, sysctl-харденинг

  • Обновление и оптимизация OS под железо сервера (BBR, буферы, swap)

  • Управление клиентами: add/remove/list/regen/backup/restore

Особенности

  • AWG 2.0: поддержка новых параметров протокола (H1–H4 ranges, S3–S4, I1–I5 CPS concealment)

  • State machine с resume: установка переживает ребуты сервера и продолжается с того же шага

  • Неинтерактивный режим: все параметры через CLI-флаги для автоматизации

  • Двуязычный: русская и английская версии скриптов

  • Один сервер — одна задача: скрипт считает VPN единственной задачей сервера и оптимизирует всё под это

Установка

wget -O install_amneziawg.sh https://raw.githubusercontent.com/bivlked/amneziawg-installer/main/install_amneziawg.sh
chmod +x install_amneziawg.sh
sudo ./install_amneziawg.sh

Или неинтерактивно:

sudo ./install_amneziawg.sh --port=51820 --disallow-ipv6 --route-amnezia --yes

После установки управление клиентами:

sudo ./manage_amneziawg.sh add client2
sudo ./manage_amneziawg.sh list
sudo ./manage_amneziawg.sh remove client2

Ссылки

Буду рад вопросам и обратной связи. Если кто-то столкнётся с проблемами при установке — пишите, помогу разобраться.

Обновление: вышла v5.5.1

  • Полная поддержка AWG 2.0 (H1-H4 диапазоны, S1-S4, CPS)
  • Английская версия скрипта (install_amneziawg_en.sh)
  • Протестировано на Ubuntu 24.04 и 25.10

Написал подробную статью на английском с разбором того, как именно AWG 2.0 обходит DPI — динамические заголовки, padding,
имитация протоколов:

GitHub: GitHub - bivlked/amneziawg-installer: One-command installer & manager for AmneziaWG 2.0 VPN on Ubuntu 24.04 LTS — traffic obfuscation, auto-hardening, client management · GitHub

Ставится ли поверх уже установленной 1.0.ХХХХХХХХХХХ версии?

Нет, поверх не встанет. В 2.0 полностью поменялись параметры обфускации, конфиги несовместимы.

Нужно сначала удалить, потом заново:
sudo bash install_amneziawg.sh --uninstall
sudo bash install_amneziawg.sh

При удалении бэкап сохранится в /root/. После переустановки клиентам надо будет раздать новые конфиги, старые не подойдут.

Если 1.x ставилась не через этот скрипт, то сначала вручную снести amneziawg-dkms, amneziawg-tools и /etc/amnezia/.

а нет ли возможности все это собрать в докер контрейнере?

Любопытно, а dpi не сагрится на большое количество непонятного мусора в сторону одного ip?

Нет, скрипт ставит ядерный модуль через DKMS, из контейнера это не сделать. Зато kernel module даёт скорость почти как у обычного WireGuard. Docker-решения используют userspace (amneziawg-go), который заметно медленнее.
Если Docker принципиален — посмотри GitHub - AlexisHW/amneziawg-web-ui: Full-featured Web UI to setup and manage AmneziaWG in docker · GitHub или GitHub - w0rng/amnezia-wg-easy: The easiest way to run WireGuard VPN + Web-based Admin UI. · GitHub.

Первый AWG с разбегу не завёлся ни в докере, ни в LXC.

Наоборот, наконец-то что-то бездокерное! Прям огромный респект. Как кто-то в issues уже написал, тоже жду адаптацию под debian, понятно что мы вычищаем убунту от всякого, но (имхо) убунту всю не вычистить. :slight_smile:

Немного не понятна сложность с ppa’шками от убунты для дебиана, у амнезии же прописано в мануале, добавляем репы, добавляем ключи и точно такой же apt install amnezia.

Еще как пожелание изобрести ключ установки “без всего”, ну или, придумать как подсасывать конфиги. Конкретно чего хочется: настроил сервер А, с него манипулирую ключами, пользователями. Хочу сделать зеркальный сервер Б, да что бы конфиги синхронились rsync’ом (это уже самостоятельно) <= и вот для такого кейса сделать условный install_amneziawg.sh –empty который всё поставит, но ничего не настроит и в конце установки скажет: “положи папки /etc/amneziawg и /root/awg на место и перезагрузи сервер” и со следующего ребута бац, и у тебя зеркальный сервер (окей, айпишник endpoint’а нужно будет поменять руками, не проблема. Либо предусмотреть прописывание доменного имени, что бы при двух фулл-зеркальных серверов оставалось только A-запись махнуть если что-то с сервером А пойдет не так)

Мусор улетает только при подключении, несколько пакетов и всё, дальше обычный трафик. После handshake каждый пакет с рандомным заголовком и размером, фиксированного паттерна нет. Шифрованный UDP на один IP это нормальная история, так любой видеозвонок выглядит.

Спасибо)

Debian 12 и 13 уже в v5.6.0, тестирую сейчас.

По прашкам - PPA это Launchpad, там только Ubuntu codenames. Для Debian пришлось маппить: bookworm→focal, trixie→noble. Плюс Debian 12 ещё на старом .list формате, а 13-й уже на DEB822, linux-headers называются иначе, snapd/cloud-init нет - пришлось обернуть cleanup чтобы не падал. Мелочей набралось, но всё решаемо.

По --empty - пока такого нет. Но можно через backup/restore: ставишь на первом сервере, manage_amneziawg.sh backup, скидываешь tar.gz на второй, там обычная установка (–yes для неинтерактива) и manage_amneziawg.sh restore. Подхватит конфиги, ключи, клиентов.

С Endpoint нюанс - инсталлятор прописывает IP автоматически. Для failover через DNS нужно руками заменить на домен в клиентских конфигах. Поддержку домена при установке тоже можно добавить.

Закинь feature request в GitHub · Where software is built, так проще отслеживать.

@413xk, все три issue закрыты)

  • syncconf вместо restart — add/remove клиентов больше не роняет туннель (#19)
  • Endpoint при установке — спрашивает IP или домен, пишет в конфиги (#20)
  • –no-tweaks — ставит AWG без оптимизаций сервера, для тех у кого уже настроено (#21)

Debian 12 и 13 протестированы, всё работает. В заголовке “на Ubuntu” уже неправда)

Ещё из нового в v5.7.1:

  • vpn:// URI — генерирует ссылки для импорта в Amnezia Client одним тапом
  • stats — статистика по клиентам (трафик, хендшейки), есть --json
  • –expires — временные клиенты (–expires=7d), автоудаление по крону

CHANGELOG: amneziawg-installer/CHANGELOG.md at main · bivlked/amneziawg-installer · GitHub

Накопилось за три недели - 10 релизов, сейчас v5.7.11.

Главное - разобрался с kernel panic при быстрых add/remove клиентов. 413xk
(segfault / kernelpanic на debian12 при управлении пользователями · Issue #27 · bivlked/amneziawg-installer · GitHub) поймал, Fourdot-co
(kernel panic · Issue #29 · bivlked/amneziawg-installer · GitHub, луктуд зфтшс (kernel panic) · Issue #30 · bivlked/amneziawg-installer · GitHub)
залез в C-код модуля и нашёл deadlock в обфускации пакетов. Баг в самом ядерном модуле (upstream
peer_remove_after_dead deadlocks on flush_workqueue(wg-kex) waiting for in-flight wg_packet_handshake_send_worker during peer removal · Issue #146 · amnezia-vpn/amneziawg-linux-kernel-module · GitHub), не в скрипте. Обошёл так:

  • timeout на syncconf - если модуль повис, fallback на restart
  • –apply-mode=restart - рестарт вместо syncconf для тех у кого падает
  • batch add/remove - manage add client1 client2 client3, один syncconf вместо трёх

Ещё из важного:

CHANGELOG: https://github.com/bivlked/amneziawg-installer/blob/main/CHANGELOG.md ·
https://github.com/bivlked/amneziawg-installer 180★