VDS · Сеть, адрес и домены

MTU 1420: почему часть сайтов может зависать и как это лечится

Что такое MTU, откуда берётся 1420, как выглядит проблема «страница висит на половине» и как её проверить и починить.

Обновлено 23 августа 2026 г.

MTU — максимальный размер пакета, который можно отправить в сеть без разбиения. Обычное значение в Ethernet — 1500 байт. Когда трафик идёт через туннель, часть места занимают его собственные заголовки, и полезного остаётся меньше: типичное значение — 1420.

Само по себе это не проблема. Проблемы начинаются, когда одна сторона считает, что можно слать 1500, а по дороге стоит участок с 1420 и сообщение об этом теряется.

Как выглядит симптом

  • SSH подключается, приветствие приходит, а ls в большом каталоге вешает сессию.
  • Страница начинает загружаться и замирает на середине.
  • curl -I (только заголовки) работает, curl целиком — виснет.
  • apt update проходит, apt upgrade встаёт на скачивании.
  • Мелкие запросы летают, большие ответы не доходят.

Общий признак один: маленькие пакеты проходят, большие исчезают без ошибки. Соединение не рвётся, оно просто молчит.

Причина в том, что механизм согласования размера пакета опирается на служебные сообщения ICMP. Если по пути их кто-то фильтрует, отправитель не узнаёт, что пакет слишком велик, и продолжает слать его снова и снова.

Проверка

Отправьте пакет запрещённого к разбиению размера и уменьшайте, пока не пройдёт:

ping -M do -s 1472 -c 2 1.1.1.1
ping -M do -s 1392 -c 2 1.1.1.1

К размеру -s прибавляется 28 байт заголовков: 1472 соответствует MTU 1500, 1392 — MTU 1420. Если первый вариант не проходит, а второй проходит, вы нашли ограничение.

Текущее значение интерфейса:

ip link show
ip route get 1.1.1.1

Как починить

Разовая проверка:

ip link set dev eth0 mtu 1420

Постоянно, через systemd-networkd — файл /etc/systemd/network/10-eth0.network:

[Match]
Name=eth0

[Link]
MTUBytes=1420
systemctl restart systemd-networkd

Если сетью управляет NetworkManager:

nmcli connection modify "System eth0" 802-3-ethernet.mtu 1420
nmcli connection up "System eth0"

Второй приём, полезный когда трогать MTU нельзя, — подгонять размер сегмента TCP на границе. В nftables:

tcp flags syn tcp option maxseg size set rt mtu

Когда это касается вас

На самой машине Millida VDS сеть настроена штатно, и вручную MTU трогать обычно не нужно. Разбираться приходится, когда вы сами поднимаете туннель: WireGuard, OpenVPN, GRE, VPN до офиса или связь между машинами. Внутри туннеля MTU всегда меньше, и его нужно задать явно.

Для WireGuard в секции [Interface]:

MTU = 1420

Частые ошибки

ОшибкаПоследствие
Полностью запретили ICMP в брандмауэреСломали согласование размера пакета себе же
Задали MTU только на одной стороне туннеляВиснет трафик в одну сторону
Меняют MTU наугадСкрывают настоящую причину: потери или ошибку в службе

Не трогайте MTU, пока не воспроизвели симптом командой ping -M do. Без этой проверки вы меняете рабочую настройку по догадке — и получаете новую неисправность вместо старой. Не блокируйте ICMP целиком, см. nftables.