На главную

DevOps и серверы

MTU и MSS в туннеле

Считает, сколько байт съедает каждая инкапсуляция, и выдаёт MTU интерфейса и значение для clamp MSS.

По какому протоколу идёт сам туннель.

Что накручено поверх

Накладные расходы

60 байт

MTU внутри туннеля

1440

TCP MSS

1400

Внутренний протокол

Разбор по слоям

СлойБайтИз чего складывается
WireGuard+6020/40 IP + 8 UDP + 16 заголовок + 16 тег Poly1305
Итого601500 − 60 = 1440

Куда вписать полученные числа

WireGuard: MTU = 1440
nginx / haproxy за туннелем: clamp MSS до 1400
iptables: -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400

Почему это вообще болит

Пакет, который не влезает в MTU канала, должен быть либо фрагментирован, либо отброшен с сообщением ICMP «нужна фрагментация». Многие сети режут ICMP целиком, и тогда получается фирменная картина: пинг идёт, страницы открываются, а большие ответы — картинки, загрузки, SSH с длинным выводом — виснут насмерть. Лечится не увеличением MTU, а его уменьшением: ставят MTU туннеля и заодно clamp MSS, чтобы TCP сам не просил больше, чем пролезает.