VPSРейтинг
VPN и сеть6 сентября 2026 · 9 мин

AmneziaWG, фрагментация и MTU: что ещё помогает против DPI

Когда туннель перестаёт работать, советы обычно сводятся к трём словам: AmneziaWG, фрагментация, MTU. Все три приёма настоящие, но каждый решает свою узкую задачу, и перепутать их легко. Ниже — что именно делает каждый, как его включить и, главное, в каких случаях он не поможет вовсе.

Кратко, если нет времени читать

  • AmneziaWG меняет внешний вид пакетов WireGuard. Панель 3X-UI 3.7 поднимает его сама, без модуля ядра, отдельной точкой входа рядом с VLESS. Параметры маскировки панель генерирует сама, руками их подбирать не нужно.
  • Фрагментация — приём клиента, а не сервера, и только против фильтрации по имени домена. Против блокировки адреса и против протоколов поверх UDP она не работает.
  • MTU — самая частая причина отказа вида «подключается, но тяжёлые страницы висят». У AmneziaWG к каждому пакету добавляется префикс, поэтому привычные 1420 бывают великоваты.
  • Если фильтруется сам адрес сервера, ни один из трёх приёмов не поможет: маскировать нечего, когда решение принимается до чтения пакета.

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 идут открыто, дополнительно шифруются. Постоянных полей, за которые можно зацепиться, не остаётся.
ContentPaddingAdditionWireGuard добивает данные до длины, кратной 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, поэтому начните с обновления панели. Номер версии панель показывает у себя на главной странице — сверьтесь с ним после перезапуска:

На сервере, от root
x-ui update

Дальше всё делается в панели. Установка самой панели и настройка VLESS с Reality описаны в инструкции по Xray — здесь только шаги, относящиеся к AmneziaWG.

  1. Добавьте точку входа. Раздел «Входящие» → «Создать подключение», протокол amneziawg. Порт — любой свободный, например 51820; протокол работает поверх UDP.
  2. Подсеть оставьте как есть. Поле «Подсеть» по умолчанию 10.8.1.0 с маской 24: это адреса внутри туннеля, менять их нужно только при конфликте с домашней сетью.
  3. Поставьте MTU 1380. Поле так и называется — MTU. Почему не стандартные 1420 — в пятом разделе; если оставить пустым, панель возьмёт 1420.
  4. Параметры обфускации не трогайте. Панель уже заполнила блок случайным набором и проверила его на противоречия. Кнопка «Сгенерировать заново» выдаёт новый набор — это единственное, что здесь стоит нажимать.
  5. Добавьте клиента. Раздел «Клиенты» → «Добавить клиента», в поле «Привязанные входящие» выбрать подключение с первого шага. Ключи и адрес внутри туннеля панель выдаст сама. Дальше в карточке клиента берётся «Конфиг AmneziaWG» — файлом, ссылкой вида vpn:// или QR-кодом для телефона.

Почему параметры не подбирают руками. У набора есть неочевидные ограничения: H1–H4 должны быть больше четырёх и не пересекаться, S1 + 56 не должно равняться S2 — иначе два пакета рукопожатия снова станут одинаковой длины, — а защита заголовков требует, чтобы все четыре S-параметра были не меньше 12. Нарушение любого из них означает, что точка входа просто не поднимется. Панель эти правила знает. И вторая причина: одинаковый набор, скопированный из чужой инструкции, со временем сам становится сигнатурой, по которой ищут.

Порт нужно открыть в межсетевом экране вручную — панель этого не делает. Обратите внимание на /udp: правило для TCP здесь не сработает.

На сервере, от root
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 миллисекунд.

Что увидела принимающая сторона, замер 6 сентября 2026
чтение 1: 107 байт, +11 мс
чтение 2: 131 байт, +27 мс
чтение 3: 173 байт, +45 мс
чтение 4: 121 байт, +62 мс

Настраивается это в клиенте на Xray-core. Правок в конфигурации две: добавить второй исходящий канал с описанием того, как резать, и направить в него свой основной канал полем dialerProxy. Свои настройки подключения в блоке settings при этом не трогаются:

Раздел outbounds в конфигурации клиента
{
  "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 байт заголовков:

Linux и macOS. Вместо адреса подставьте IP своего сервера
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
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 — конфигурации нужно раздать заново всем устройствам. По этой же причине не стоит менять набор «на всякий случай».

8. Частые вопросы

Если фильтруется сам адрес, настройками это не лечится: нужна другая площадка, а чаще и другая страна.

Провайдеры под VPN →