Траблшутинг падения скорости в VPN: расчет TCP MSS Clamping и WireGuard MTU
При некорректных настройках MTU/MSS внутри VPN-соединений возникают симптомы:
- Тест скорости Speedtest показывает высокую скорость, но открытие тяжелых сайтов, передача файлов по SSH/SCP или загрузка страниц зависает на этапе TLS Handshake.
- Высокий процент фрагментации пакетов и падение производительности туннеля на 70-90%.
- Потеря пакетов с флагом DF (Don't Fragment) с возвратом ICMP ошибки
Destination Unreachable, Fragmentation Needed (Type 3, Code 4). - Зависание сессий RDP и баз данных внутри туннеля.
1. Калькуляция оверхеда инкапсуляции туннелей
| Тип протокола / Туннеля | Заголовки и оверхед (байт) | Рекомендуемый MTU (при WAN MTU 1500) | Рекомендуемый TCP MSS |
|---|---|---|---|
| Базовый IPv4 (без VPN) | 20 (IP) + 20 (TCP) = 40 байт | 1500 | 1460 |
| WireGuard (IPv4) | 20 (IP) + 8 (UDP) + 32 (WG) = 60 байт | 1420 (или 1440) | 1380 |
| WireGuard (IPv6) | 40 (IP) + 8 (UDP) + 32 (WG) = 80 байт | 1420 (или 1360) | 1360 |
| IPsec IKEv2 (AES-GCM + NAT-T) | 20 (IP) + 8 (UDP) + 8 (ESP) + 16 (IV) + 16 (ICV) + pad ≈ 72 байта | 1428 | 1388 |
| GRE over IPsec | 20 (IP) + 56 (ESP) + 24 (GRE) = 100 байт | 1400 | 1360 |
2. Нахождение оптимального MTU с помощью Ping с флагом DF
# Windows:
ping 198.51.100.1 -f -l 1392
# Linux:
ping -M do -s 1392 198.51.100.1
# Формула: Реальный MTU = Размер буфера ping + 28 байт (20 байт IP + 8 байт ICMP)3. Настройка TCP MSS Clamping в Linux (Iptables / Nftables)
# Автоматическая подгонка под PMTU:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Принудительная фиксация безопасного размера MSS (например, 1360):
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 13604. Настройка на Cisco IOS и MikroTik RouterOS
# Cisco IOS на интерфейсе туннеля:
interface Tunnel0
ip mtu 1420
ip tcp adjust-mss 1380
# MikroTik RouterOS:
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn action=change-mss new-mss=clamp-to-pmtu passthrough=yes Частые вопросы (FAQ)
Что такое TCP MSS?
TCP Maximum Segment Size (MSS) — это максимальный размер полезной нагрузки (payload) данных TCP в одном пакете без учета IP и TCP заголовков. По умолчанию для сетей Ethernet он равен 1500 - 40 = 1460 байт.
Почему зависает именно TLS Handshake при проблемах с MTU?
Сертификаты безопасности X.509 и ключи шифрования при установке TLS соединения имеют большой размер (2-4 КБ) и генерируют полноразмерные TCP-сегменты (1500 байт). Если пакет больше допустимого MTU туннеля и имеет флаг DF, он молча сбрасывается промежуточным узлом.
Что такое PMTUD (Path MTU Discovery) и почему она ломается?
PMTUD — это механизм определения наименьшего MTU на всем пути следования пакета с помощью сообщений ICMP Type 3 Code 4. Механизм ломается, если пограничные брандмауэры параноидально блокируют весь входящий ICMP-трафик (Black Hole MTU).
Влияет ли TCP MSS Clamping на трафик UDP (DNS, VoIP, игры)?
Нет. TCP MSS модифицирует исключительно заголовки TCP SYN пакетов. Для UDP-трафика единственным решением является корректная установка MTU на сетевом интерфейсе операционной системы или в приложении.