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.