1. Что фильтр видит в обычном WireGuard
WireGuard задумывался как быстрый и простой протокол, а не как незаметный. Простота вышла боком: начало соединения у него всегда выглядит одинаково, и опознать его можно по двум признакам сразу.
- Постоянные длины. Первый пакет рукопожатия — ровно 148 байт, ответ на него — ровно 92, служебное сообщение с меткой — 64. Не «примерно», а ровно: размеры зафиксированы в самом протоколе.
- Постоянное начало. Первый байт пакета — номер его типа (1, 2, 3 или 4), а следующие три байта зарезервированы и всегда равны нулю. То есть каждый пакет начинается с
01 00 00 00или его соседей по списку.
Правило для оборудования фильтрации из этого пишется в одну строку, и работает оно на любом порту: смена 51820 на 443 ничего не меняет, потому что смотрят не на номер порта, а на содержимое. Именно поэтому обычный WireGuard из России наружу у многих операторов не поднимается, хотя внутри страны и в домашней сети работает как работал.
Ответов на это два. Первый — спрятать соединение внутрь чужого настоящего протокола: так устроен Reality, он разобран в отдельной инструкции. Второй — оставить протокол как есть, но изменить его внешность так, чтобы описанное выше правило перестало срабатывать. Это и есть AmneziaWG.
2. Что именно меняет AmneziaWG
AmneziaWG — не новый протокол, а тот же WireGuard с другой внешностью. Криптография не тронута вовсе: рукопожатие, ключи и шифрование остались прежними. Меняется только то, что видно снаружи. Актуальная версия протокола — 3.1, она вышла в ответ на волну блокировок в России летом 2026 года.
| Параметры | Что перестаёт быть заметным |
|---|---|
| Jc, Jmin, Jmax | Перед рукопожатием отправляется несколько бессмысленных пакетов случайной длины. Ровная последовательность «148, затем 92» тонет в этой пачке. |
| S1–S4 | К четырём видам пакетов дописывается случайный префикс: длины становятся 148 + S1, 92 + S2, 64 + S3 и «данные + S4». Постоянных размеров больше нет. |
| H1–H4 | Номера типов 1, 2, 3 и 4 заменяются на числа из заданных диапазонов. Узнаваемое начало пакета пропадает. |
| I1–I5 | До пяти пакетов, описанных вручную и отправляемых перед рукопожатием. В них кладут начало настоящего чужого протокола — например первый пакет QUIC, — чтобы соединение начиналось как что-то другое. |
| HeaderProtectionKey | Служебные части пакета, которые у WireGuard идут открыто, дополнительно шифруются. Постоянных полей, за которые можно зацепиться, не остаётся. |
| ContentPaddingAddition | WireGuard добивает данные до длины, кратной 16 байтам, и это повторяющийся шаблон. Добавка случайного числа байт его ломает. |
| RandomTrailers | Случайный хвост в конце пакетов: даже с префиксами последовательности «запрос — ответ» остаются похожими по размеру, хвост убирает и это сходство. |
| Тайминги, DisableCookies | Интервалы служебных событий берутся из диапазона, а не из констант, и отключается отправка служебного ответа с меткой — по нему протокол опознавали при активной проверке. |
Главное, что нужно понять про этот набор: это описание формата пакетов, а не настройка «сделать понезаметнее». Префиксы S1–S4, диапазоны заголовков H1–H4 и ключ защиты заголовков обязаны совпадать на сервере и на клиенте — сторона с другими значениями просто не разберёт то, что ей прислали. Поэтому панель задаёт набор один раз и вписывает его целиком в конфигурацию каждого клиента.
Чего это стоит
- Мусорные пакеты, префиксы и хвосты — это трафик, который передаётся впустую. На мобильном тарифе с ограниченным пакетом расход заметен.
- Обычный клиент WireGuard к такому серверу не подключится, нужен клиент AmneziaWG — и версии, понимающей 3.1.
- Роутеры отстают: версию 3.1 не понимают ни KeeneticOS, ни OpenWrt — обе прошивки работают с версиями 1.5 и 2.0.
Сравнение AmneziaWG с Reality и Hysteria2 по скорости, клиентам и поведению на плохом канале — в отдельной статье про выбор протокола. Здесь дальше только практика.
3. Как включить AmneziaWG в 3X-UI 3.7
Раньше AmneziaWG на сервере означал отдельную установку: сборку модуля ядра под своё ядро либо запуск в контейнере со своими правилами маршрутизации. Панель 3X-UI начиная с версии 3.7, вышедшей 24 августа 2026 года, ведёт AmneziaWG собственными силами — реализация встроена в саму панель и работает обычной программой. Ни модуль ядра, ни Docker, ни вторая панель не нужны, и внутри контейнера это работает так же, как на обычном сервере.
Механизм появился именно в 3.7, поэтому начните с обновления панели. Номер версии панель показывает у себя на главной странице — сверьтесь с ним после перезапуска:
x-ui updateДальше всё делается в панели. Установка самой панели и настройка VLESS с Reality описаны в инструкции по Xray — здесь только шаги, относящиеся к AmneziaWG.
- Добавьте точку входа. Раздел «Входящие» → «Создать подключение», протокол
amneziawg. Порт — любой свободный, например51820; протокол работает поверх UDP. - Подсеть оставьте как есть. Поле «Подсеть» по умолчанию
10.8.1.0с маской24: это адреса внутри туннеля, менять их нужно только при конфликте с домашней сетью. - Поставьте MTU 1380. Поле так и называется —
MTU. Почему не стандартные 1420 — в пятом разделе; если оставить пустым, панель возьмёт 1420. - Параметры обфускации не трогайте. Панель уже заполнила блок случайным набором и проверила его на противоречия. Кнопка «Сгенерировать заново» выдаёт новый набор — это единственное, что здесь стоит нажимать.
- Добавьте клиента. Раздел «Клиенты» → «Добавить клиента», в поле «Привязанные входящие» выбрать подключение с первого шага. Ключи и адрес внутри туннеля панель выдаст сама. Дальше в карточке клиента берётся «Конфиг AmneziaWG» — файлом, ссылкой вида
vpn://или QR-кодом для телефона.
Почему параметры не подбирают руками. У набора есть неочевидные ограничения: H1–H4 должны быть больше четырёх и не пересекаться, S1 + 56 не должно равняться S2 — иначе два пакета рукопожатия снова станут одинаковой длины, — а защита заголовков требует, чтобы все четыре S-параметра были не меньше 12. Нарушение любого из них означает, что точка входа просто не поднимется. Панель эти правила знает. И вторая причина: одинаковый набор, скопированный из чужой инструкции, со временем сам становится сигнатурой, по которой ищут.
Порт нужно открыть в межсетевом экране вручную — панель этого не делает. Обратите внимание на /udp: правило для TCP здесь не сработает.
ufw allow 51820/udp
ufw statusВ выводе ufw status должна появиться строка, где рядом стоят 51820/udp и ALLOW. Если межсетевой экран у провайдера есть ещё и в панели управления сервером, порт нужно открыть и там.
Скачанная конфигурация выглядит так — параметры маскировки лежат прямо в ней, поэтому её нельзя править вручную и нельзя брать чужую:
[Interface]
PrivateKey = <ключ клиента>
Address = 10.8.1.2/32
DNS = 8.8.8.8, 8.8.4.4
MTU = 1380
Jc = 4
Jmin = 65
Jmax = 220
S1 = 87
S2 = 44
S3 = 21
S4 = 19
H1 = 463065432
H2 = 912345678
H3 = 1345678901
H4 = 1987654321
I1 = <r 148>
HeaderProtectionKey = 8Iu83eHDA3fMKKSGaEsVW9Ycd2lYYzc0MYlk1jJTvE4=
ContentPaddingAddition = 17-49
RandomTrailers = on
DisableCookies = on
[Peer]
PublicKey = <ключ сервера>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <адрес сервера>:51820
PersistentKeepalive = 25Чем открывать эту конфигурацию
Нужно официальное приложение AmneziaWG — и обязательно версии, понимающей протокол 3.1. Поддержка появилась в августе 2026 года: сборка для Android вышла 14 августа, для Windows — 21-го. Проверено 6 сентября 2026 года: в российской витрине App Store приложение AmneziaWG есть, оно бесплатно, издатель Privacy Technologies OU, версия 3.1.4; в Google Play приложение тоже есть. Если оно ставилось раньше — обновите: сборка прошлых лет конфигурацию с полями версии 3.1 не примет, и выглядеть это будет как ошибка при импорте файла, а не как проблема сети.
Роутеры пока в стороне. Версию 3.1 не понимает ни KeeneticOS, ни OpenWrt: обе работают с версиями 1.5 и 2.0, причём OpenWrt — начиная с прошивки 24.10.3. Документация Amnezia отдельно предупреждает, что переделать конфигурацию 3.1 в 2.0 нельзя — подключение работать не будет. Если туннель нужен именно на роутере, ставьте приложение на устройства либо оставьте в панели только набор версии 2.0: это Jc, Jmin, Jmax, S1–S4, H1–H4 и I1, а остальные поля очистите.
4. Фрагментация: разрезать первый пакет
Второй приём относится не к WireGuard, а к соединениям по TLS — то есть к обычному HTTPS и ко всему, что на нём построено. Идея простая. Когда браузер открывает сайт, первый же пакет с данными содержит имя этого сайта открытым текстом: шифрование ещё не началось, а имя нужно, чтобы сервер понял, чей сертификат предъявлять. Оборудование фильтрации читает имя именно оттуда.
Фрагментация — это отправка того же первого пакета несколькими кусками с паузами между ними. Ни в одном куске целого имени нет, и правило, написанное на поиск имени в одном пакете, не срабатывает.
Разрезает пакет тот, кто начинает соединение, то есть ваше устройство. На сервере в этом приёме менять нечего.
Так это выглядит на замере. Мы подняли Xray-core 26.7.28 с фрагментацией на локальном стенде и записали, что видит принимающая сторона: вместо одного блока в 532 байта пришло четыре куска с паузами примерно в 15 миллисекунд.
чтение 1: 107 байт, +11 мс
чтение 2: 131 байт, +27 мс
чтение 3: 173 байт, +45 мс
чтение 4: 121 байт, +62 мсНастраивается это в клиенте на Xray-core. Правок в конфигурации две: добавить второй исходящий канал с описанием того, как резать, и направить в него свой основной канал полем dialerProxy. Свои настройки подключения в блоке settings при этом не трогаются:
{
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": { /* ваши настройки подключения остаются как были */ },
"streamSettings": {
"network": "tcp",
"security": "tls",
// единственная строка, которую добавляем в свой канал
"sockopt": { "dialerProxy": "fragment" }
}
},
{
// второй канал добавляется целиком: он и режет пакет
"tag": "fragment",
"protocol": "freedom",
"settings": {
"fragment": {
"packets": "tlshello",
"length": "100-200",
"interval": "10-20"
}
}
}
]
}Здесь tlshello означает «резать именно первый пакет TLS», length — размер кусков в байтах, interval — паузу между ними в миллисекундах. Значения выше — рабочая отправная точка; увеличивать паузу без нужды не стоит, каждое соединение будет открываться на эту величину дольше. Проверить конфигурацию до запуска можно командой xray run -test -c config.json: она разбирает файл и печатает Configuration OK.
Где фрагментация не поможет
Это главное, ради чего стоит читать раздел. Приём узкий, а советуют его как универсальный.
- Когда блокируется адрес, а не имя. Решение принимается до того, как кто-то заглянул внутрь пакета. Резать содержимое бессмысленно — пакеты просто не доходят.
- Когда протокол работает поверх UDP. Приём режет поток TCP, а у WireGuard, AmneziaWG и Hysteria2 наружу идёт UDP — резать нечем. Их задачу, размыть начало соединения, решают мусорные пакеты AmneziaWG из второго раздела.
- Когда используется Reality. Он уже показывает фильтрации имя настоящего разрешённого сайта, и прятать в первом пакете нечего. Если Reality не работает, причину ищут в другом месте: чаще всего это отказ на стороне приложения или ограничение адреса — оба случая разобраны в соседних статьях.
- Когда фильтрация собирает поток целиком. Приём рассчитан на то, что решение принимается по одному пакету. Оборудование, которое складывает куски обратно перед проверкой, увидит то же самое имя.
Остаётся один сценарий, где фрагментация действительно работает: соединение с собственным доменом, попавшим под фильтрацию по имени, — например VLESS или Trojan с вашим сертификатом. Ровно там её и стоит пробовать.
5. MTU: тихая причина «подключается, но виснет»
Третий приём вообще не про фильтрацию, но именно он объясняет значительную часть жалоб. Картина всегда одна и очень узнаваемая:
- туннель поднимается, рукопожатие проходит, ошибок в журнале нет;
- лёгкие страницы и поисковая выдача открываются нормально;
- тяжёлая страница висит до бесконечности, файл начинает качаться и замирает;
- сессия SSH открывается, а на первой длинной команде замолкает.
MTU — это наибольший размер пакета, который согласна нести сеть. Устройство внутри туннеля считает, что может отправить пакет размером в MTU туннеля. Наружу этот пакет уходит уже завёрнутым в оболочку и становится больше. Если получившийся размер оказался больше того, что готов пропустить кто-то на пути, пакет пропадает — а сообщение об этом, которое должно вернуться отправителю, в интернете сплошь и рядом теряется по дороге. Короткие пакеты при этом проходят, потому что до предела не дотягивают. Отсюда и избирательность.
Сколько добавляет оболочка
У WireGuard добавка ровно 60 байт: 20 на заголовок IP, 8 на UDP и 32 на служебную часть с проверочным кодом. Стандартный MTU туннеля — 1420 байт, и число это не случайное: оно взято с запасом на случай, когда наружная оболочка идёт по IPv6, где заголовок на 20 байт длиннее. Тогда 1420 + 80 даёт ровно 1500 — обычный предел сети. По IPv4 полный пакет выходит на 1480 байт, и остаётся 20 байт свободного места.
У AmneziaWG к каждому пакету данных добавляется ещё и префикс S4. В наборе, который генерирует 3X-UI, он от 12 до 27 байт — то есть полный пакет на проводе выходит на 1492–1507 байт при пределе в 1500. Часть наборов за предел выходит, и какой именно достался вам, заранее неизвестно. Остальные механизмы маскировки размер не увеличивают: и добавочная набивка, и случайный хвост подгоняют мелкие пакеты под размер уже отправленных, а не выходят за него. Значит, лишние байты добавляет ровно один параметр — и запаса под него у стандартных 1420 нет. Отсюда 1380 из третьего раздела.
Как подобрать значение под свою сеть
1380 подходит почти везде, но у мобильных операторов и на подключениях через PPPoE предел бывает ниже 1500. Проверяется он одной командой с компьютера, туннель для этого выключен. Флаг -M do запрещает дробить пакет, число после -s — размер данных без 28 байт заголовков:
ping -M do -s 1472 -c 2 203.0.113.10Если ответы пришли, предел на пути — 1500 (1472 + 28), и это обычный случай. Если вместо ответов вы увидели сообщение о слишком длинном пакете, уменьшайте размер и повторяйте: 1464, 1452, 1400. Первое значение, на котором ответы появились, плюс 28 — и есть предел вашей сети. На Windows та же проверка выглядит как ping -f -l 1472 203.0.113.10.
Дальше арифметика:
MTU туннеля = предел сети − 60 − 32
Пример: предел 1500 → 1500 − 92 = 1408, ставим 1380 с запасом
Пример: предел 1428 → 1428 − 92 = 1336, ставим 1320Шестьдесят байт — оболочка, тридцать два — верхняя граница префикса S4, который AmneziaWG добавляет к каждому пакету данных. Для обычного WireGuard вычитается только 60. Если возиться не хочется, поставьте 1280: это значение проходит практически в любой сети, ценой небольшой потери скорости на крупных передачах.
Менять значение нужно в одном месте — в поле MTU точки входа в панели. Оно попадает в конфигурации клиентов, которые панель отдаёт после правки, поэтому уже скачанные файлы придётся скачать и импортировать заново: в приложении на телефоне старое значение само не обновится. У обычного WireGuard, поднятого без панели, то же самое правится строкой MTU в разделе [Interface] конфигурации — но там вычитаются только 60 байт, и уменьшать значение обычно не нужно.
6. Где ничего из этого не поможет
Все три приёма работают с тем, как выглядит трафик. Они бесполезны, когда решение принимается раньше — по адресу назначения. Если адрес вашего сервера или его диапазон попал под ограничение, пакеты не доходят независимо от того, на что они похожи. Маскировать нечего: до чтения содержимого дело не доходит.
Признаки именно этой картины простые и надёжные:
- не работает ни один протокол на сервере — ни VLESS, ни AmneziaWG;
- не работает ни в одной сети — ни с мобильного интернета, ни с домашнего подключения;
- сервер при этом жив: панель хостинга показывает его работающим, а из другой страны он отвечает.
Отличить это от поломки на устройстве помогает проверка адреса сервера: она занимает пару минут и даёт однозначный ответ. Если ответ подтвердился, дальше вопрос уже не в настройках, а в том, куда переезжать — что решает выбор страны и площадки, разобрано в статье про локации.
Отсюда простое разделение, которое стоит держать в голове заранее. Два протокола на одном сервере — страховка от фильтрации по виду трафика: если один перестал проходить у вашего оператора, второй обычно ещё работает, и стоит это ничего, потому что обе точки входа почти не расходуют ресурсы. От фильтрации адреса это не спасает вовсе: там помогает только другой адрес, а надёжнее — площадка в другой сети и у другого провайдера.
7. Частые проблемы
Приложение говорит, что конфигурация неверная
Почти всегда это старая версия приложения. Поля версии 3.1 — HeaderProtectionKey, ContentPaddingAddition, RandomTrailers, DisableCookies — сборки прошлых лет не понимают и отказываются принимать файл целиком. Обновите приложение AmneziaWG до сборки не старше августа 2026 года. Второй по частоте случай — конфигурацию открывают приложением WireGuard, а не AmneziaWG: это разные приложения с похожими значками.
Подключается, но через минуту-другую трафик встаёт
Проверьте, что в конфигурации клиента есть строка PersistentKeepalive = 25. Без неё сетевое оборудование на пути забывает соответствие адресов уже через полминуты тишины, и обратные пакеты перестают доходить. Панель эту строку в конфигурации ставит, но при ручной правке её легко потерять. Если строка на месте, а зависает именно на тяжёлых страницах — это MTU, пятый раздел.
Поменял параметры на сервере — перестали подключаться все
Так и должно быть. Параметры маскировки описывают формат пакетов и обязаны совпадать на обоих концах, а нажатие «Сгенерировать заново» меняет их целиком. После любой правки блока обфускации — включая смену MTU — конфигурации нужно раздать заново всем устройствам. По этой же причине не стоит менять набор «на всякий случай».