ru

AmneziaWG на VPS: обход блокировки WireGuard через ТСПУ

Летом 2024 года ТСПУ начали массово рвать соединения WireGuard в России: оборудование DPU научилось детектировать сигнатуру handshake-пакета WireGuard по фиксированным байтам типа сообщения и предсказуемой длине. AmneziaWG - это форк WireGuard от команды Amnezia VPN, который добавляет к протоколу мусорные (junk) пакеты и рандомизирует магические заголовки, из-за чего трафик перестаёт совпадать с известной сигнатурой. Ниже - как поднять AmneziaWG на собственном офшорном VPS, какие параметры обфускации выставить под российский DPI и как мигрировать с обычного WireGuard без переустановки клиентов.

Need this done for your project?

We implement, you ship. Async, documented, done in days.

Start a Brief

Почему ТСПУ блокирует обычный WireGuard

WireGuard был спроектирован ради минимализма, а не маскировки. Каждое соединение начинается с пакета handshake_initiation, у которого первый байт всегда равен 0x01, а сам пакет имеет фиксированную длину 148 байт. Ответный handshake_response - 92 байта с первым байтом 0x02. Эта пара коротких UDP-пакетов с предсказуемыми размерами и типами - идеальная мишень для DPI.

  • Сигнатура по типу сообщения: ТСПУ ищет в UDP-полезной нагрузке байты типа 0x01-0x04 в начале сессии.
  • Сигнатура по длине: постоянные 148/92 байта на старте сессии - редкий и заметный паттерн.
  • Поведенческий анализ: WireGuard шлёт keepalive строго каждые 25 секунд - регулярность тоже выдаёт протокол.

В отличие от Reality или obfs4, обычный WireGuard не маскируется под HTTPS - он просто шифрует содержимое, но форма пакета остаётся узнаваемой. Поэтому в 2024-2026 годах в России массово рвутся именно WireGuard-сессии, тогда как настроенный AmneziaWG продолжает работать на тех же провайдерах.

Что именно меняет AmneziaWG

AmneziaWG - это форк официальных wireguard-go и инструментов, переименованный в amneziawg-go и awg. Криптография не тронута (тот же Noise, Curve25519, ChaCha20-Poly1305), но к транспортному слою добавлены параметры обфускации, которые ломают обе сигнатуры выше:

  • Jc - количество мусорных (junk) пакетов, которые клиент шлёт перед настоящим handshake. Эти пакеты случайной длины и наполнения, чтобы DPI не видел "чистый" старт сессии.
  • Jmin / Jmax - минимальный и максимальный размер каждого junk-пакета в байтах.
  • S1 / S2 - сколько случайных байт добавить внутрь пакетов init и response, чтобы сломать фиксированные длины 148 и 92.
  • H1, H2, H3, H4 - переопределение "магических заголовков" (типов сообщений) для init, response, cookie и transport. Вместо предсказуемых 0x01-0x04 ставятся ваши случайные 32-битные значения.

Ключевая идея: после правильной настройки в UDP-потоке нет ни одного байта, по которому DPI узнал бы WireGuard. Пакеты выглядят как случайный UDP-шум. Главное правило - значения H1-H4 и junk-параметры должны полностью совпадать на сервере и клиенте, иначе handshake не пройдёт.

Установка AmneziaWG на офшорный VPS

Понадобится VPS с публичным IP вне России. Лучше всего подойдёт офшорный VPS в Европе - низкий пинг до РФ и юрисдикция вне досягаемости запросов РКН. Ниже - установка на Ubuntu/Debian через DKMS-модуль ядра (есть и userspace-вариант amneziawg-go, если ядро трогать нельзя).

sudo apt update && sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:amnezia/ppa
sudo apt update
sudo apt install -y amneziawg amneziawg-tools

Сгенерируйте ключи сервера и включите форвардинг:

cd /etc/amnezia/amneziawg
wg genkey | tee server.key | wg pubkey > server.pub
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/awg.conf
sudo sysctl -p /etc/sysctl.d/awg.conf

Создайте /etc/amnezia/amneziawg/awg0.conf. Раздел [Interface] содержит блок обфускации - это и есть отличие от обычного WireGuard:

[Interface]
PrivateKey = <server.key>
Address = 10.13.13.1/24
ListenPort = 51820
Jc = 4
Jmin = 40
Jmax = 70
S1 = 50
S2 = 100
H1 = 1234567890
H2 = 2345678901
H3 = 3456789012
H4 = 4567890123
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <client.pub>
AllowedIPs = 10.13.13.2/32

Поднимите интерфейс и поставьте в автозагрузку:

sudo awg-quick up awg0
sudo systemctl enable awg-quick@awg0

Откройте порт 51820/udp в файрволе VPS. Менять стандартный порт не обязательно - после обфускации DPI всё равно не определит протокол по содержимому.

Подбор junk-параметров под российский DPI

Универсального "правильного" набора нет: ТСПУ у разных провайдеров настроены по-разному, поэтому параметры подбираются. Практические ориентиры на 2026 год:

  • Jc: 3-10 junk-пакетов. Слишком много (>128) замедляет установку соединения и сам по себе становится аномалией.
  • Jmin / Jmax: вилка вроде 40-70 байт. Главное, чтобы Jmin < Jmax и значения не были одинаковыми у всех клиентов.
  • S1 / S2: 15-150 байт. Важное ограничение: S1 + 56 не должно равняться S2 - иначе после добавления случайных байт init-пакет совпадёт по длине с response, и DPI снова получит паттерн.
  • H1-H4: любые четыре разных 32-битных числа больше 4 (значения 0-4 зарезервированы под штатные типы WireGuard). Сгенерируйте их случайно и держите в секрете.

Каждому клиенту лучше выдавать уникальный профиль с разными junk-параметрами - тогда даже статистический анализ потоков не сведёт всех пользователей одного сервера в общую сигнатуру. Если соединение установилось, но через несколько минут рвётся, увеличьте Jc и разброс Jmin/Jmax: вероятно, провайдер ловит вас по поведенческому анализу keepalive, а не по handshake.

Миграция с обычного WireGuard и клиенты

Если у вас уже работает WireGuard, мигрировать просто: криптоключи остаются прежними, добавляется только блок обфускации. На сервере скопируйте существующий wg0.conf, переименуйте интерфейс в awg0 и допишите в [Interface] строки Jc/Jmin/Jmax/S1/S2/H1-H4. Ровно те же значения пропишите в каждый клиентский конфиг - иначе handshake не сойдётся.

Клиентский конфиг отличается от обычного WireGuard только этим же блоком:

[Interface]
PrivateKey = <client.key>
Address = 10.13.13.2/24
DNS = 1.1.1.1
Jc = 4
Jmin = 40
Jmax = 70
S1 = 50
S2 = 100
H1 = 1234567890
H2 = 2345678901
H3 = 3456789012
H4 = 4567890123

[Peer]
PublicKey = <server.pub>
Endpoint = ваш_vps_ip:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Клиенты с поддержкой AmneziaWG: AmneziaVPN (Windows, macOS, Linux, Android, iOS) импортирует такой конфиг напрямую и сам подставляет junk-параметры. На Android также работает обновлённый WG Tunnel. На роутерах с OpenWrt и Keenetic есть пакеты amneziawg. Обычное приложение WireGuard конфиг с блоком обфускации не примет - нужен именно AmneziaWG-совместимый клиент.

Для постоянного использования всей семьёй или командой имеет смысл взять отдельный офшорный VPS под VPN, а если нужны выделенные ресурсы под десятки клиентов и высокий трафик - офшорный выделенный сервер. Оплата криптовалютой, без привязки к личности.

Privacy & anti-censorship guides

Why Anubiz Host

100% async — no calls, no meetings
Delivered in days, not weeks
Full documentation included
Production-grade from day one
Security-first approach
Post-delivery support included

Ready to get started?

Skip the research. Tell us what you need, and we'll scope it, implement it, and hand it back — fully documented and production-ready.

Anubiz Chat AI

Online
AmneziaWG на VPS: обфускация WireGuard от DPI РКН | Anubiz Host