Настройка MTU для AmneziaWG (WireGuard): Избегаем фрагментации
Физика MTU в туннелях и симптомы сбоя (Black Hole Routing)
MTU (Maximum Transmission Unit) — это максимальный размер полезного блока данных, который может быть передан одним пакетом без фрагментации. WireGuard и его форк AmneziaWG (добавляющий обфускацию) инкапсулируют IP-пакеты внутрь UDP. Классический WireGuard добавляет 60 байт заголовков (20 IPv4 + 8 UDP + 32 WG). AmneziaWG из-за мусорных пакетов (junk packets) и измененных заголовков обфускации может требовать еще большего оверхеда. Симптомы неверного MTU: туннель работает, пинги ходят отлично (так как размер ICMP пакета мал), но при попытке открыть сайт или скачать файл TCP-сессия зависает на этапе Client Hello (TLS) или загрузки данных. Бизнес-риски: деградация скорости VPN, невозможность работы с веб-ресурсами и RDP.
Влияние фрагментации на VPN
| Сценарий | Что происходит с пакетом | Симптом для пользователя |
|---|---|---|
| MTU клиента > MTU провайдера | Провайдер дропает пакет, отправляет ICMP 'Fragmentation Needed'. | Сайты не грузятся, "Black Hole" эффект, если ICMP заблокирован. |
| Path MTU Discovery (PMTUD) отключен | TCP не может автоматически согласовать MSS (Maximum Segment Size). | Зависание SSH-сессий, бесконечная загрузка тяжелых веб-страниц. |
Алгоритм расчета и настройки MTU (MSS Clamping)
Сценарий 1: Расчет оптимального MTU для WireGuard/AmneziaWG
Если стандартный MTU провайдера (Ethernet) равен 1500, то безопасный MTU для WG = 1420. При использовании PPPoE у провайдера базовый MTU = 1492, тогда MTU для WG = 1412.
Настройка MTU в конфигурации клиента (.conf)
[Interface]
PrivateKey = <Ваш_Ключ>
Address = 10.8.0.2/24
MTU = 1420 # Или 1380 для гарантированного прохождения через проблемные сети
DNS = 1.1.1.1Сценарий 2: Включение MSS Clamping на сервере (iptables/nftables)
Даже если на клиенте MTU настроен неверно, сервер может принудительно переписывать размер TCP-сегмента (MSS) в проходящих транзитных пакетах, спасая ситуацию.
Для Iptables (добавить в PostUp конфигурации сервера)
iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Для Nftables
nft add rule ip filter FORWARD tcp flags syn tcp option maxseg size set rt mtuТиповые ошибки администраторов
- Слепая установка MTU=1500: Установка MTU виртуального интерфейса WG равным физическому интерфейсу гарантирует фрагментацию. UDP-пакет WG просто не влезет во фрейм Ethernet.
- Игнорирование обфускации AWG: AmneziaWG изменяет размеры заголовков (параметры Jc, Jmin, Jmax, S1, S2). В сильно зафильтрованных сетях (например, мобильный интернет) снижение MTU до 1360-1380 часто является единственным способом стабилизировать канал.
Проблема несовпадения MTU/MSS часто возникает при сложной топологии (SD-WAN, IPSec поверх GRE). Сетевые архитекторы ITSTM проведут глубокий анализ PCAP-дампов, найдут бутылочные горлышки фрагментации и настроят идеальный Path MTU Discovery.
Частые вопросы (FAQ)
Как точно узнать максимальный MTU моего провайдера?
Используйте утилиту ping с запретом фрагментации. В Windows: 'ping 8.8.8.8 -f -l 1472'. Если пишет 'Требуется фрагментация', уменьшайте число (1472), пока пинги не пойдут. Ваш MTU = это число + 28 байт (IP/ICMP заголовки).
Почему пинги проходят, а сайты не открываются?
Пинг (ICMP Echo Request) по умолчанию отправляет всего 32 байта данных. Открытие сайта по HTTPS (TLS Handshake) генерирует пакеты максимального размера (1500 байт), которые не пролезают в туннель и отбрасываются.
Влияет ли MTU на скорость скачивания?
Да. Если MTU слишком мал, увеличивается накладной расход на заголовки (Overhead). Если слишком велик — происходит аппаратная фрагментация на маршрутизаторах, что сильно нагружает их CPU и снижает пропускную способность.
Где нужно менять MTU: на клиенте или на сервере?
Идеально — на обеих сторонах туннеля (в блоке [Interface] файлов конфигурации сервера и клиента) значения должны совпадать для симметричной передачи данных.