Диагностика
11 минут чтения

MTU и MSS в туннеле: как подобрать значения и убрать зависания сайтов

Одна из самых частых жалоб после настройки AmneziaWG звучит так: соединение установлено, пинг проходит, но некоторые сайты не открываются, а видео зависает на середине загрузки. В девяти случаях из десяти причина — неправильно подобранный MTU в туннеле и отсутствие корректного mss clamping на роутере. Проблема связана с тем, что каждый уровень инкапсуляции — VPN-заголовки, шифрование, обфускация AmneziaWG — добавляет к пакету служебные байты, и итоговый пакет может превысить максимальный размер, пропускаемый сетью провайдера. В этой статье разберём теорию MTU и MSS простыми словами, пошагово подберём рабочие значения на разных операционных системах и настроим автоматическое исправление размера пакетов на популярных платформах роутеров.

Получить готовую конфигурацию

Выполняйте шаги последовательно и сохраняйте резервную копию. Названия пунктов могут незначительно отличаться в разных версиях прошивки.

ШАГ 01

Что такое MTU, MSS и PMTUD простыми словами

MTU (Maximum Transmission Unit) — это максимальный размер пакета данных, который может пройти через сетевой интерфейс без фрагментации. Для обычного Ethernet-соединения стандартное значение MTU составляет 1500 байт, и именно от него отталкиваются при расчётах, потому что почти все провайдеры и промежуточные сети рассчитаны именно на такой размер кадра.

MSS (Maximum Segment Size) — это максимальный размер полезных данных TCP-сегмента, то есть MTU минус размер заголовков IP и TCP (обычно 40 байт для IPv4). Если MSS выставлен слишком большим для канала, часть TCP-сегментов будет требовать фрагментации или отбрасываться, что и вызывает зависания при загрузке страниц: маленькие текстовые запросы проходят нормально, а крупные объекты — картинки, видео, JS-бандлы — застревают.

PMTUD (Path MTU Discovery) — это механизм, с помощью которого система пытается автоматически определить максимальный MTU по всему пути до сервера, отправляя пакеты с флагом Don't Fragment и уменьшая размер при получении ICMP-ошибки Fragmentation Needed. Проблема в том, что многие провайдеры и часть VPN-серверов блокируют ICMP-пакеты этого типа, и PMTUD просто перестаёт работать — тогда единственный выход — подобрать MTU вручную.

В туннеле AmneziaWG к обычным накладным расходам VPN добавляются ещё и данные обфускации, поэтому рабочий MTU внутри туннеля почти всегда меньше, чем при обычном WireGuard-подключении, и часто требует отдельного подбора даже если раньше вы уже настраивали MTU для WireGuard на этом же канале.

ШАГ 02

Как понять, что дело именно в MTU

Характерные симптомы: небольшие сайты и текстовые страницы открываются мгновенно, а сайты с большим количеством картинок или видео зависают на середине загрузки либо не открываются вовсе. Мессенджеры и голосовые звонки могут работать нормально, потому что используют UDP с небольшими пакетами, а вот скачивание файлов или просмотр Full HD видео обрывается.

Ещё один признак — сайт открывается через HTTP, но не открывается через HTTPS, потому что TLS handshake использует более крупные пакеты, чем обычный HTTP-запрос. Также стоит обратить внимание на разницу в поведении: если сайт открывается без VPN, но зависает при включённом туннеле, это почти наверняка указывает на MTU, а не на проблему с самим сайтом или блокировкой.

Нужны параметры без ручного подбора?

Получите готовый профиль для своего роутера — ключи, endpoint и параметры обфускации уже заполнены.

Получить готовую конфигурацию
ШАГ 03

Пошаговый подбор MTU в Windows

В Windows подбор ведётся через команду ping с флагами -f (запретить фрагментацию) и -l (размер пакета). Идея в том, чтобы найти максимальный размер пакета, который проходит без фрагментации до внешнего сервера, а затем прибавить к нему 28 байт заголовков ICMP и IP, чтобы получить итоговый MTU.

Начинать стоит с размера payload 1472 байта, что соответствует MTU 1500 без VPN. Если пакет не проходит, размер уменьшается шагами по 10–20 байт, пока не будет получен ответ без ошибки фрагментации. Тестировать нужно именно через активный VPN-туннель, направляя пинг на внешний адрес, например 8.8.8.8, а не на локальный шлюз.

  1. 1Открыть командную строку и подключиться к AmneziaWG
  2. 2Выполнить: ping -f -l 1472 8.8.8.8
  3. 3Если пришла ошибка «Packet needs to be fragmented», уменьшить значение до 1400 и повторить
  4. 4Продолжать уменьшать шагами по 10-20 байт, пока пинг не пройдёт успешно
  5. 5К найденному рабочему значению payload прибавить 28 — это и есть итоговый MTU для интерфейса
  6. 6Прописать полученное значение MTU в настройках интерфейса AmneziaWG на клиенте
CONFIG / TERMINAL
ping -f -l 1400 8.8.8.8
ping -f -l 1380 8.8.8.8
ping -f -l 1360 8.8.8.8
ШАГ 04

Подбор MTU в Linux и macOS

В Linux и macOS логика та же самая, но синтаксис команды ping отличается: вместо флага -f используется -M do, а размер задаётся флагом -s. При этом в payload уже не нужно вручную прибавлять заголовок ICMP — единственное отличие в том, что macOS требует явного указания флага -D для запрета фрагментации вместо -M do.

После нахождения рабочего значения на Linux его удобно сразу проверить командой ip link show, которая покажет текущий MTU интерфейса, и при необходимости изменить его на лету командой ip link set без перезапуска сетевой службы — это удобно для быстрой итерации при подборе.

  1. 1Linux: выполнить ping -M do -s 1472 8.8.8.8 и уменьшать шагами по 10-20 байт при ошибке
  2. 2macOS: выполнить ping -D -s 1472 8.8.8.8 с той же логикой уменьшения
  3. 3Найти максимальный проходящий размер и прибавить 28 байт заголовков
  4. 4Применить значение временно: sudo ip link set dev awg0 mtu 1380
  5. 5Закрепить значение в конфигурационном файле интерфейса awg0.conf
CONFIG / TERMINAL
# Linux
ping -M do -s 1400 8.8.8.8

# macOS
ping -D -s 1400 8.8.8.8

# применить найденное значение на Linux
sudo ip link set dev awg0 mtu 1380
ШАГ 05

Типовые значения MTU для разных сценариев

Для обычного WireGuard поверх PPPoE-подключения (характерно для многих провайдеров в России) рабочий MTU туннеля чаще всего находится в диапазоне 1400–1420 байт, потому что сам PPPoE уже съедает 8 байт от базовых 1500. Для AmneziaWG из-за дополнительных байт обфускации и junk-пакетов стоит начинать подбор с более консервативного значения — 1360–1380 байт.

Если подключение идёт через мобильного оператора или спутниковый интернет, где базовый MTU канала уже меньше 1500 (нередко 1430–1450), значения для туннеля придётся уменьшать ещё сильнее — иногда до 1280–1300 байт. Это не универсальные цифры, а ориентиры для начала подбора: точное значение всегда индивидуально для конкретного провайдера и маршрута до сервера.

Не стоит выставлять MTU заведомо маленьким «про запас» — например, 1200 байт без проверки: это снизит эффективную скорость передачи данных из-за увеличения числа пакетов на тот же объём трафика, поэтому подбор всегда нужно доводить до максимального рабочего значения, а не до первого, которое просто заработало.

Получить готовый конфиг

Если не хотите собирать профиль вручную, возьмите готовую конфигурацию и продолжайте инструкцию с шага импорта.

Получить готовую конфигурацию
ШАГ 06

MSS clamping на OpenWrt

MSS clamping — это принудительное ограничение размера TCP-сегментов на уровне firewall, которое решает проблему даже для тех подключений, где PMTUD не работает из-за блокировки ICMP. На OpenWrt это делается через правило firewall с параметром MSS Clamping, привязанное к зоне с VPN-интерфейсом.

В LuCI соответствующая настройка находится в разделе Network → Firewall → General Settings, где есть чекбокс MSS clamping для форвардинга через MTU-ограниченные интерфейсы. Для более точного контроля можно добавить отдельное правило через consolидированную настройку iptables или nftables вручную, если стандартного чекбокса недостаточно.

CONFIG / TERMINAL
config zone
	option name 'vpn'
	option network 'awg0'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	option mtu_fix '1'
ШАГ 07

MSS clamping на MikroTik и Keenetic

На MikroTik RouterOS mss clamping настраивается через правило в разделе IP → Firewall → Mangle с действием change-mss и типом clamp-tcp-mss, которое автоматически подстраивает MSS под текущий MTU интерфейса независимо от того, какой у клиента реальный MTU.

На роутерах Keenetic отдельного пункта mss clamping в веб-интерфейсе обычно нет, поэтому там основной способ добиться стабильной работы — подобрать и вручную выставить MTU для интерфейса VPN-подключения через веб-интерфейс или через интерфейс командной строки CLI, задав команду интерфейсу wireguard0 или соответствующему туннельному интерфейсу.

  1. 1MikroTik: открыть IP → Firewall → Mangle → Add new
  2. 2Указать Chain: forward, Protocol: tcp, TCP Flags: syn
  3. 3В Action выбрать change-mss, New MSS Size: clamp-tcp-mss
  4. 4Keenetic: зайти в веб-интерфейс, найти интерфейс туннеля AmneziaWG/WireGuard
  5. 5Вручную указать значение MTU, подобранное на этапе тестирования ping
CONFIG / TERMINAL
/ip firewall mangle add chain=forward tcp-flags=syn protocol=tcp \
  out-interface=awg0 action=change-mss new-mss=clamp-tcp-mss
ШАГ 08

Проверка результата

После применения найденного MTU и включения mss clamping нужно проверить работу на реальных сценариях, которые раньше вызывали проблему: открыть несколько тяжёлых сайтов с большим количеством медиа, попробовать скачать файл размером в несколько десятков мегабайт и посмотреть видео в высоком качестве без пауз на буферизацию.

Дополнительно можно повторить тест ping -f -l с найденным значением ещё раз через день в другое время суток, поскольку маршрут провайдера может динамически меняться, а вместе с ним — и оптимальное значение MTU. Если проблемы вернулись через какое-то время, стоит повторить подбор заново, а не сразу винить VPN-сервер.

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

Готовы подключить роутер?

Возьмите готовую конфигурацию и используйте эту инструкцию для установки и проверки.

Получить готовую конфигурацию

Продолжите настройку

Все руководства — настройка роутеров, MTU, DNS и устройств.