Amnezia VPN на своём сервере: AmneziaWG вместо WireGuard
Amnezia VPN на своём сервере: установка AmneziaWG через приложение или вручную, параметры обфускации, клиенты и диагностика, когда WireGuard не работает.
Для подключения из России нужен AmneziaWG, а не обычный WireGuard. ТСПУ распознаёт рукопожатие WireGuard и режет его: на IP ForestsNet Cloud чистый WireGuard из России не подключается вообще. AmneziaWG работает, потому что перед рукопожатием отправляет «шум» и меняет служебные поля пакетов. Обычный WireGuard по-прежнему хорош для связи между своими серверами и в сетях без DPI — см. «WireGuard VPN: сервер и клиенты».
Актуально на сентябрь 2026 года: приложение AmneziaVPN 5.0.3.0, протокол AmneziaWG 3.1 (amneziawg-tools 3.1.20260812, модуль ядра 3.1.20260906, amneziawg-go 3.1.20260828).
Что понадобится
- VPS ForestsNet Cloud в Нидерландах или Германии на Ubuntu 22.04/24.04 или Debian 12/13 — их Amnezia поддерживает официально. Хватит 1 vCPU и 1 ГБ RAM, от 10 подключений лучше 2 ГБ.
- SSH под
rootили пользователем сsudoбез пароля — см. «Консоль VNC и первое подключение». - Приложение AmneziaVPN (шаг 2) или AmneziaWG (шаг 3).
- Запас трафика: в пакет идёт только исходящий, а у VPN он примерно равен тому, что скачивают клиенты.
Шаг 1. Разберитесь, почему WireGuard блокируется
Что DPI видит в WireGuard
WireGuard никогда не маскировался. Каждый его пакет начинается с номера типа (1–4) и трёх нулевых байтов, а служебные пакеты фиксированного размера: инициация рукопожатия — 148 байт, ответ — 92, cookie — 64. Первый UDP-пакет нового соединения — 148 байт, начинающиеся с 01 00 00 00. Ровно эти признаки проверяет открытый DPI-движок nDPI.
Массовая волна блокировок WireGuard и OpenVPN в России прошла в августе 2023 года, к 2025-му WireGuard заблокирован в большинстве регионов. У одних операторов не проходит рукопожатие, у других поток замирает после пары пакетов данных.
Что меняет AmneziaWG
AmneziaWG (AWG) — форк WireGuard от команды Amnezia: криптография та же, меняется только внешний вид пакетов. Перед каждым рукопожатием инициатор, обычно клиент, отправляет с того же UDP-порта:
I1–I5— сигнатурные пакеты: шаблоны байтов, имитирующие начало другого протокола, например DNS или QUIC;- затем
Jcпакетов мусора случайного размера отJminдоJmaxбайт.
Меняются и сами пакеты WireGuard:
S1–S4— случайный префикс к инициации, ответу, cookie и пакетам данных: размеры 148/92/64 перестают быть постоянными.H1–H4— замена номеров типов 1–4. С версии 2.0 это диапазоны, каждый пакет получает случайное значение.HeaderProtectionKey(3.x) шифрует поля заголовков, которые у WireGuard идут открытым текстом. Nonce берётся из префикса, поэтомуS1–S4не меньше 12.ContentPaddingAdditionиRandomTrailersдобавляют случайное число байтов,DisableCookiesзапрещает cookie-ответы, таймеры задаются диапазонами.
В итоге первый пакет потока — мусор или имитация другого протокола, а не рукопожатие WireGuard. На наших адресах именно это отличает рабочее подключение из России от нерабочего.
Версии протокола
- 1.0 (конец 2023) —
Jc,Jmin,Jmax,S1,S2, одиночныеH1–H4. - 1.5 (июль 2025) —
I1–I5. - 2.0 (сентябрь 2025, в приложении — январь 2026) —
S3,S4и диапазоныH. - 3.0 и 3.1 (июль–август 2026) — защита заголовков, случайные размеры и таймеры, в 3.1 —
RandomTrailersиDisableCookies. Amnezia выпустила 3.1 после волны блокировок в июне–июле 2026 года и называет 2.0 уязвимой.
Клиент должен поддерживать версию конфига: 3.1 в старом приложении не заработает.
Какие параметры должны совпадать
Одинаковыми на сервере и клиенте должны быть S1–S4, H1–H4, HeaderProtectionKey и RandomTrailers. Различаться могут Jc, Jmin, Jmax, I1–I5, ContentPaddingAddition, таймеры и DisableCookies; мусор и сигнатурные пакеты разработчики советуют задавать только на клиенте.
Проверено на стенде: при расхождении в S1 или ключе заголовков рукопожатия нет совсем, при расхождении в S4 клиент показывает рукопожатие, но данные не идут.
Шаг 2. Установка через приложение AmneziaVPN
Дальше два пути: приложение (этот шаг) или вручную (шаг 3).
Подключите сервер
- Скачайте AmneziaVPN 5.0.3.0+ с amnezia.org или GitHub.
- Выберите «Настроить свой сервер» и введите IP, логин и пароль или приватный ключ (ED25519 или RSA в PEM).
- Режим «Автоматическая» ставит AmneziaWG.
Для входа не под root нужен sudo без пароля, как в документации Amnezia:
echo 'USERNAME ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/USERNAMEЧто приложение делает с сервером
- Проверяет права через
sudo -n. Если работает apt, ждёт — на свежем VPS это обычно автообновления. - Ставит Docker из репозитория дистрибутива (
docker.io). С podman работать откажется. - Создаёт docker-сеть
amnezia-dns-net(172.29.172.0/24, мостamn0) и каталоги/opt/amnezia/<контейнер>. - Меняет хост: включает
ip_forward, запрещает ответ на ping, поднимаетnf_conntrack_maxдо 262144, увеличивает буферы и включаетhybla. - Собирает контейнер
amnezia-awg2изamneziavpn/amneziawg-go— реализации на Go без модуля ядра. Контейнер работает с--privilegedи--restart always, без логов, наружу — один UDP-порт. - Внутри контейнера генерирует ключи, пишет
/opt/amnezia/awg/awg0.conf, поднимает интерфейс и NAT, затем собирает профиль устройства.
Параметры по умолчанию — AWG 3.1: случайный UDP-порт 30000–49999, Jc 4–6, Jmin 10, Jmax 50, S1–S4 по 12 байт, H1–H4 = 1–4, свой HeaderProtectionKey, ContentPaddingAddition 10–100, включённые RandomTrailers и DisableCookies, таймеры диапазонами (RekeyAfterTime 100–120 с, KeepaliveTimeout 5–15 с, PersistentKeepalive 25–35 с). I1 — 44-байтный пакет, похожий на DNS-ответ.
Стандартные H1–H4 здесь не слабость: заголовки зашифрованы ключом, и документация Amnezia сама советует в этом режиме оставлять 1–4. Случайные H были маскировкой до версии 3.0.
Docker публикует UDP-порт в обход цепочки INPUT, поэтому ufw обычно не мешает, а внешний файрвол порт должен пропускать; документация Amnezia советует порт ниже 9999 — часть провайдеров режет UDP на высоких портах. Ключи и пользователи живут только в контейнере: удалили его — потеряли все подключения.
Какой протокол выбрать
- AmneziaWG — основной: UDP, высокая скорость, умеренный расход батареи.
- XRay (VLESS + Reality) — запасной: TCP 443, выручает, когда режут UDP. На серверах ForestsNet Cloud нельзя выдавать себя за чужой сайт, поэтому в SNI и dest указывайте свой домен, а не подставленный приложением, — см. Условия использования. VLESS с панелью — «3x-ui: установка и настройка VLESS + Reality».
- WireGuard, OpenVPN, IKEv2 — только для сетей без DPI. OpenVPN over Cloak и over Shadowsocks в 5.x помечены как неподдерживаемые.
Сервисы — AmneziaDNS, SFTP, SOCKS5, прокси для Telegram (см. «MTProto-прокси для Telegram на своём сервере»). Сравнение протоколов — «Свой VPN на VPS: какой протокол выбрать».
Как раздать доступ и что с ограничениями
«Поделиться» работает в двух режимах:
- Доступ к VPN без управления сервером — для людей: один протокол, одно устройство. Ключ
vpn://— для приложений Amnezia; для AmneziaWG и роутеров выгружайте «оригинальный формат AmneziaWG» — обычный.conf. - Полный доступ к серверу и VPN — в ключе лежат SSH-логин и пароль или приватный ключ, то есть сервер целиком. Отозвать его нельзя, только сменить доступ по SSH. Только для своих устройств.
На вкладке «Пользователи» видны последнее рукопожатие и трафик каждого подключения, там же их отзывают. Лимитов скорости, трафика и срока в приложении нет — нужна отдельная панель, например Remnawave для VLESS.
Параметры и переход на 3.1
Параметры — в настройках сервера: «Протоколы» → AmneziaWG. Раздел сервера меняет порт, подсеть и обфускацию, раздел подключения — I1, мусор и MTU этого устройства.
Если AWG ставили до августа 2026 года, на сервере, скорее всего, 2.0. Переход по документации: обновить приложение, удалить AmneziaWG вместе с пользователями, установить заново на порт ниже 9999 и раздать доступ.
Шаг 3. Ручная установка AmneziaWG
Этот путь — если нужны модуль ядра вместо Docker и полный контроль над конфигами. Параметры те же, что ставит приложение, поэтому клиентам нужна поддержка AWG 3: подойдут текущие AmneziaVPN и AmneziaWG.
Поставьте модуль ядра и утилиты
Сначала обновите систему и перезагрузитесь, если обновилось ядро. Ubuntu:
sudo apt update
sudo apt install -y software-properties-common python3-launchpadlib gnupg2 linux-headers-$(uname -r)
sudo add-apt-repository -y ppa:amnezia/ppa
sudo apt install -y amneziawgDebian использует тот же PPA с веткой focal. Утилиты apt-key из официальной инструкции в Debian 13 нет, поэтому ключ подключаем через signed-by:
sudo apt update && sudo apt install -y curl gnupg linux-headers-$(uname -r)
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x75C9DD72C799870E310542E24166F2C257290828' | sudo gpg --dearmor -o /etc/apt/keyrings/amnezia.gpg
echo 'deb [signed-by=/etc/apt/keyrings/amnezia.gpg] https://ppa.launchpadcontent.net/amnezia/ppa/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/amnezia.list
sudo apt update && sudo apt install -y amneziawgawg --version должен показать amneziawg-tools v3.1…, а sudo modprobe amneziawg пройти без ошибок; версия пакета 1.0.20210914-… о протоколе ничего не говорит. DKMS пересобирает модуль после обновления ядра, если есть его заголовки, — поставьте мета-пакет, например linux-headers-generic или linux-headers-amd64.
Сгенерируйте ключи и параметры
Дальше — под root в /etc/amnezia/amneziawg, пакет уже создал этот каталог с правами 700:
sudo -i
cd /etc/amnezia/amneziawg && umask 077
awg genkey | tee server.key | awg pubkey > server.pub
awg genkey | tee client1.key | awg pubkey > client1.pub
awg genpsk > client1.psk
awg genkey > hpk.key
r() { shuf -i "$1-$2" -n 1; }
while :; do
S1=$(r 12 64); S2=$(r 12 64); S3=$(r 12 64); S4=$(r 12 24)
[ $((S2 + 28)) -ne "$S3" ] && break
done
cat > common.txt <<EOF
S1 = $S1
S2 = $S2
S3 = $S3
S4 = $S4
H1 = 1
H2 = 2
H3 = 3
H4 = 4
HeaderProtectionKey = $(cat hpk.key)
RandomTrailers = on
EOFcommon.txt — общий блок для сервера и всех клиентов. S не меньше 12, иначе ключ заголовков не примется; S4 добавляется к каждому пакету данных, поэтому он маленький. Цикл следит, чтобы служебные пакеты не совпали по размеру (92 + S2 ≠ 64 + S3) — приложение Amnezia проверяет то же. RandomTrailers включают с обеих сторон, иначе сервер отбросит удлинённое рукопожатие.
Соберите конфиг сервера
PORT=$(r 1025 9999); echo "$PORT" > port.txt
WAN=$(ip route get 1.1.1.1 | sed -n 's/.* dev \([^ ]*\).*/\1/p')
cat > awg0.conf <<EOF
[Interface]
Address = 10.66.66.1/24
ListenPort = $PORT
PrivateKey = $(cat server.key)
MTU = 1400
$(cat common.txt)
DisableCookies = on
PostUp = iptables -I FORWARD -i %i -j ACCEPT
PostUp = iptables -I FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.66.66.0/24 -o $WAN -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.66.66.0/24 -o $WAN -j MASQUERADE
[Peer]
# client1
PublicKey = $(cat client1.pub)
PresharedKey = $(cat client1.psk)
AllowedIPs = 10.66.66.2/32
EOF
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-amneziawg.conf && sysctl --system
ufw allow "$PORT"/udp # если включён ufw
systemctl enable --now awg-quick@awg0- Порт — случайный ниже 9999.
WAN— внешний интерфейс: MASQUERADE наeth0при реальномens3— частая причина «подключено, интернета нет». MTU = 1400оставляет запас подS4. Правила FORWARD стоят в начале цепочки, чтобы их не перехватили ufw и Docker.- Мусора и
I1на сервере нет — их отправляет клиент.
Соберите конфиг клиента
I1 собираем как DNS-ответ — по принципу приложения Amnezia, но со своим доменом, случайными ID и адресом. Вместо 203.0.113.10 подставьте IP вашего VPS:
dns_i1() {
local q="" l
for l in ${1//./ }; do
q+=$(printf '%02x' "${#l}")$(printf '%s' "$l" | od -An -tx1 | tr -d ' \n')
done
echo "<r 2><b 0x81800001000100000000${q}0000010001c00c000100010000012c0004><r 4>"
}
SERVER_IP=203.0.113.10
cat > client1.conf <<EOF
[Interface]
PrivateKey = $(cat client1.key)
Address = 10.66.66.2/32
DNS = 1.1.1.1, 1.0.0.1
MTU = 1280
Jc = $(r 4 6)
Jmin = $(r 10 30)
Jmax = $(r 60 120)
I1 = $(dns_i1 yandex.ru)
$(cat common.txt)
ContentPaddingAddition = 10-100
RekeyAfterTime = 100-120
KeepaliveTimeout = 5-15
[Peer]
PublicKey = $(cat server.pub)
PresharedKey = $(cat client1.psk)
Endpoint = $SERVER_IP:$(cat port.txt)
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25-35
EOF
qrencode -t ansiutf8 < client1.confМусор держим небольшим: крупный мобильные операторы пропускают хуже, а Jmax больше MTU ведёт к фрагментации. MTU = 1280 безопасен для мобильных сетей, ::/0 не пускает IPv6 мимо туннеля, qrencode ставится из apt.
Проверьте и добавьте клиентов
Новому клиенту сгенерируйте ключи и PSK, допишите в awg0.conf секцию [Peer] со следующим адресом (10.66.66.3/32) и выполните systemctl reload awg-quick@awg0 — изменения применятся через awg syncconf без обрыва соединений.
Профиль 2.0 для роутеров
Keenetic в стабильной ветке 5.1 и большинство сборок для OpenWrt понимают только параметры 2.0. Для них поднимите второй интерфейс awg1 с другими подсетью и портом, без HeaderProtectionKey, RandomTrailers, DisableCookies, ContentPaddingAddition и таймеров, с обычным PersistentKeepalive = 25. Защиту здесь дают случайные S и непересекающиеся диапазоны H:
while :; do
S1=$(r 15 150); S2=$(r 15 150); S3=$(r 15 150); S4=$(r 12 32)
[ $((S1 + 56)) -ne "$S2" ] && [ $((S2 + 28)) -ne "$S3" ] && [ $((S1 + 84)) -ne "$S3" ] && break
done
read -r a b c d e f g h <<< "$(shuf -i 5-2147483647 -n 8 | sort -n | tr '\n' ' ')"
printf 'S1 = %s\nS2 = %s\nS3 = %s\nS4 = %s\nH1 = %s-%s\nH2 = %s-%s\nH3 = %s-%s\nH4 = %s-%s\n' \
"$S1" "$S2" "$S3" "$S4" "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" > common-v2.txtШаг 4. Подключите клиентов
- Windows — AmneziaWG 3.1.0 (MSI с GitHub) или AmneziaVPN 5.0.3.0.
- macOS — AmneziaWG 3.1.4 из App Store или AmneziaVPN для macOS 13+.
- Android — AmneziaWG 3.1.4 из Google Play (файл или QR) или AmneziaVPN, который ставится и на Android TV.
- iOS — AmneziaWG 3.1.4 есть в российском App Store, в него импортируется
.conf. AmneziaVPN там нет, а DefaultVPN от Amnezia управлять своим сервером не умеет. - Linux —
awg-quickиз того же PPA или AmneziaVPN. - Keenetic —
S3,S4иI1–I5с KeeneticOS 5.1, AWG 3.1 пока только в тестовой 5.2 Alpha 11. Конфиг загружается в «Других подключениях», нужен компонент WireGuard VPN. - OpenWrt — сборки Slava-Shchipunov/awg-openwrt, на которые ссылается Amnezia: 2.0 для 23.05.6, 24.10.3–24.10.7 и 25.12.0–25.12.4, 3.1 — для 24.10.8 и 25.12.5.
- GL.iNet — AWG 2.0 с прошивки 4.9. У MikroTik нативной поддержки нет, у Apple TV — официального клиента.
Диагностика
Обфускация или сеть
Смотрите на сервер во время подключения. При установке через приложение: sudo docker exec amnezia-awg2 awg show.
awg show awg0
tcpdump -ni any udp port "$(cat /etc/amnezia/amneziawg/port.txt)"- Пакеты не приходят — неверный IP или порт, закрытый порт, блокировка по пути. Проверьте с другой сети.
- Пакеты приходят, сервер молчит —
latest handshakeнет, сервер не может их разобрать: не совпадают ключи,S1/S2,HeaderProtectionKeyилиRandomTrailers. Такие пакеты AWG отбрасывает молча, в логах пусто. - На сервере есть адрес клиента, но нет рукопожатия, а клиент «подключён» — у пира видны
endpointи байты вtransfer, но нетlatest handshake. Сервер ответил на рукопожатие, но не принимает данные: расходятсяS3/S4илиH3/H4, либо DPI режет данные после рукопожатия. - Рукопожатие есть, счётчики растут, сайты не открываются — проблема за туннелем: NAT, форвардинг, DNS, MTU.
Симптом → причина → что сделать
- Подключается, но нет трафика. Проверьте
sysctl net.ipv4.ip_forward, интерфейс в MASQUERADE и счётчик правила:iptables -t nat -L POSTROUTING -v -n. Если данные идут несколько секунд и замирают, DPI режет поток после рукопожатия — сменитеI1. - Работает на Wi-Fi, но не на мобильном. Мобильные операторы строже к UDP. По замерам сообщества в 2026 году, у части операторов одного мусора мало: DNS-подобный
I1проходит, случайные байты — нет, а поддельный QUIC ТСПУ проверяет и отбрасывает. ПоставьтеMTU = 1280, попробуйте другой порт. При «белых списках» мобильного интернета зарубежный UDP не проходит вовсе — не поможет ни AWG, ни VLESS. Держите XRay запасным протоколом. - Скорость низкая. Мелкие запросы идут, а большие страницы встают — это MTU, снизьте его на клиенте. Контейнер Amnezia работает в userspace и на 1 vCPU упирается в процессор (
top), модуль ядра быстрее. Если XRay по TCP заметно быстрее, оператор шейпит UDP. - Перестало работать после обновления. Сервер на 3.1, клиент старый — нужны AmneziaVPN от 5.0.1.5 или AmneziaWG 3.1 и новый конфиг.
Line unrecognized— устарелиamneziawg-tools.Module amneziawg not foundпосле обновления ядра — DKMS не собрал модуль:dkms status, заголовки ядра,dkms autoinstall. Keenetic после обновления серверного модуля видит рукопожатие без данных — открытый issue #215, оставьте роутерам профиль 2.0.
Если не подключается ни из одной российской сети, а из-за рубежа работает, возможна блокировка IP. ForestsNet ежедневно проверяет адреса на блокировки ТСПУ — напишите в поддержку.
Безопасность и обслуживание
- SSH — только по ключу: «Усиление SSH». AmneziaVPN хранит SSH-доступ к серверу — берегите устройство с ним как сам ключ.
- Файрвол — в ufw сначала SSH, потом порт AWG: «Файрвол ufw: порты».
- Обновления — держите AmneziaVPN свежим: в 5.0.1.5 закрыта уязвимость, найденная Positive Technologies. После
apt upgradeс новым модулем перезагрузите сервер. - Ротация ключей — потерянное устройство отзовите сразу: удалите его
[Peer]и выполнитеsystemctl reload awg-quick@awg0. Ключ сервера иHeaderProtectionKeyменяются только вместе с перевыпуском всех клиентских конфигов. - Бэкап —
/etc/amnezia/amneziawgпри ручной установке; в Docker ключи только в контейнере:sudo docker cp amnezia-awg2:/opt/amnezia/awg ./awg-backup.
Раздаёте VPN другим — закройте торренты: «Как заблокировать торренты на своём VPN или прокси». Остальное — в «Чеклисте базовой защиты VPS».
Источники
- Документация Amnezia: AmneziaWG, переход на 3.1, диагностика, требования к VPS, раздача доступа, Keenetic, OpenWrt.
- GitHub Amnezia: amnezia-client 5.0.3.0 (скрипты
client/server_scripts/awg,awgInstaller.cpp), amneziawg-go, amneziawg-tools, amneziawg-linux-kernel-module и issue #215, amneziawg-windows-client, PPA. - Роутеры: awg-openwrt, KeeneticOS 5.1, 5.2, GL.iNet.
- Хабр: «Итоги „заблокированного“ 2025 года», «AmneziaWG 2.0: от маскировки трафика к мимикрии», «AmneziaWG: от 2.0 к 3.1», «Свой AmneziaWG пару лет спустя».
- ntc.party: «Блокировка VPN-протоколов на ТСПУ», «Генератор i1..i5 для amnezia», «Мобильная сеть 09.05.2025»; замеры I1 в bivlked/amneziawg-installer.
- net4people/bbs #274 — блокировка WireGuard и OpenVPN в России в августе 2023; детектор WireGuard в nDPI.