MTU: расчёт, подбор и настройка для VPN и Ethernet | Глоссарий FREEHOSTING

MTU

Maximum Transmission Unit
MTU — Максимальный размер блока данных канального уровня, который пропускает интерфейс без фрагментации. Для Ethernet — 1500 байт, для PPPoE — 1492, для Jumbo Frames — до 9000.

Определение простыми словами

MTU — это потолок объёма IP-пакета на конкретном канале. Если приложение отправит больше, маршрутизатор либо разрежет пакет на куски (фрагментация), либо вернёт ICMP-сообщение «Fragmentation Needed» с просьбой уменьшить размер. От правильного MTU напрямую зависят скорость, потери и стабильность соединения.

Стандартный MTU для Ethernet — 1500 байт. Туннели VPN, GRE, PPPoE и MPLS отъедают от него по 8–80 байт служебных заголовков, поэтому в этих сценариях окно сужается. Несовпадение MTU на участках пути даёт классическую беду: TCP-соединение устанавливается, маленькие пакеты ходят, большие висят — это «PMTU black hole».

Сравнение типичных MTU

Канал MTU, байт Особенности
Ethernet 1500 Стандарт по умолчанию
PPPoE (домашний интернет) 1492 −8 байт на PPPoE-заголовок
OpenVPN UDP 1450–1472 Зависит от шифра и сжатия
WireGuard 1420 −80 байт на туннель
Jumbo Frames (DC) 9000 Только в локальной сети с поддержкой по всему пути

Кейсы использования

  • Подбор MTU для VPN: ping -M do -s 1472 8.8.8.8 — найти максимум без фрагментации, прибавить 28 байт IP+ICMP-заголовков.
  • Jumbo Frames между серверами хранения и СУБД в DC — рост пропускной способности iSCSI на 10–20 %.
  • Настройка MTU 1380 для туннеля через мобильный 4G, где провайдер режет крупные пакеты.
  • Negative: включить Jumbo на одном свитче из десяти — получить блек-холы на длинных соединениях, исходящие SSH тормозят, входящие отваливаются.
  • Negative: DROP ICMP «Fragmentation Needed» на фаерволе ломает PMTU Discovery и порождает те же чёрные дыры.

Технические детали

# Узнать текущий MTU интерфейса
ip link show eth0 | awk '{print $5}'

# Найти максимальный MTU без фрагментации до удалённого хоста
ping -M do -s 1472 -c 4 example.com
# Если потери — уменьшать -s по 8 байт, пока не пройдёт

# Установить MTU 1420 для WireGuard
ip link set dev wg0 mtu 1420

# Постоянная настройка через netplan (Ubuntu 22.04+)
cat > /etc/netplan/01-mtu.yaml <<EOF
network:
  version: 2
  ethernets:
    eth0:
      mtu: 9000
EOF
netplan apply

# Проверка PMTU до хоста
tracepath example.com

В Linux PMTU кэшируется на 10 минут. Для отладки сбрасывается командой ip route flush cache. Контроль за MSS на TCP делает iptables через --clamp-mss-to-pmtu.

Частые вопросы

Как понять, что MTU неправильный?

TCP-соединение устанавливается, мелкие запросы проходят, но загрузка крупных страниц или файлов зависает. Pingом большим пакетом проверяется наличие потерь.

Стоит ли везде включать Jumbo Frames?

Только в изолированной сети, где все коммутаторы и сетевые карты поддерживают 9000. На границе с интернетом использовать стандартные 1500.

Что такое MSS clamping?

Принудительное снижение Maximum Segment Size в SYN-пакетах TCP до значения, гарантированно проходящего через канал с меньшим MTU. Часто включают на NAT-роутерах с PPPoE.