Как пользоваться
- Введите MTU канала под туннелем — для Ethernet обычно 1500.
- Выберите инкапсуляцию, а для IP-туннелей — идёт ли сам туннель поверх IPv4 или IPv6.
- Выберите версию IP трафика внутри и добавьте байты на метки VLAN (по 4) или MPLS (по 4), если они есть на пути.
Формулы
- MTU внутри = MTU канала − заголовки
- Заголовки: PPPoE — 8; GRE — внешний IP + 4; IP-in-IP — внешний IP; WireGuard — внешний IP + 8 UDP + 32; VXLAN — внешний IP + 8 UDP + 8 VXLAN + 14 внутреннего Ethernet. Внешний IP — 20 байт для IPv4 и 40 для IPv6.
- TCP MSS = MTU внутри − заголовок IP − 20
- Размер ping = MTU внутри − заголовок IP − 8
Пример
WireGuard поверх IPv4 на канале 1500 байт, внутри IPv4:
- заголовки: 20 + 8 + 32 = 60 B;
- MTU внутри: 1500 − 60 = 1 440 B;
- TCP MSS: 1440 − 20 − 20 = 1 400 B;
- наибольший размер ping: 1440 − 20 − 8 = 1 412 B.
Советы
- Ограничьте MSS на маршрутизаторе, если нельзя настроить каждый узел: TCPMSS в iptables или правило в nftables переписывают MSS в пакетах SYN на значение выше.
- Заголовки считаются без опций. Опции IPv4, дополнительные заголовки IPv6 и опции TCP вроде меток времени занимают ещё несколько байт, поэтому реальные сегменты часто чуть меньше.
- Вложенные туннели складываются. Для WireGuard поверх PPPoE введите 1492 как MTU канала.