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.