На главную
DevOps и серверы
MTU и MSS в туннеле
Считает, сколько байт съедает каждая инкапсуляция, и выдаёт MTU интерфейса и значение для clamp MSS.
По какому протоколу идёт сам туннель.
Что накручено поверх
Накладные расходы
60 байт
MTU внутри туннеля
1440
TCP MSS
1400
Внутренний протокол
Разбор по слоям
| Слой | Байт | Из чего складывается |
|---|---|---|
| WireGuard | +60 | 20/40 IP + 8 UDP + 16 заголовок + 16 тег Poly1305 |
| Итого | 60 | 1500 − 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 сам не просил больше, чем пролезает.