Усунення несправностей · 1 хв читання

MTU, фрагментація і чому ваш WireGuard гальмує

Якщо тунель WireGuard підключається, але ледве повзе, зупиняється на великих передачах або зависає на певних сайтах — винен зазвичай MTU. Пояснюємо, що таке MTU і фрагментація, чому тунелі ламають розмір пакетів і яке саме значення треба змінити.

Що таке MTU і чому тунелі його ламають

MTU (Maximum Transmission Unit) — це найбільший пакет у байтах, який канал зв'язку пронесе одним шматком. Стандартний MTU для Ethernet — 1500. Якщо пакет завеликий для каналу, його або фрагментують на менші частини, або відкидають.

Тунель WireGuard загортає кожен ваш пакет у шифрований UDP-пакет, і ця обгортка додає накладних байтів — приблизно 60 для IPv4 і 80 для IPv6. Тож повнорозмірний пакет на 1500 байтів від вашого застосунку після інкапсуляції в WireGuard стає більшим за 1500, і нижній канал уже не пронесе його цілим. Саме тому WireGuard за замовчуванням ставить MTU інтерфейсу 1420: цей запас іде під накладні витрати шифрування, щоб інкапсульований пакет усе одно вміщався в шлях на 1500 байтів.

Чому неправильний MTU гальмує зв'язок

За нормального перебігу, коли пакет завеликий, щоб переслати його без фрагментації, маршрутизатор надсилає назад повідомлення ICMP «Fragmentation Needed», і відправник зменшує розмір пакета — це і є Path MTU Discovery (PMTUD). Біда в тому, що багато мереж і фаєрволів мовчки відкидають ці ICMP-повідомлення. Тоді ви отримуєте чорну діру PMTU: малі пакети (як початок сторінки) проходять, а великі зникають без жодної помилки. Симптом ні з чим не сплутати: з'єднання встановлюється, а тоді зависає; SSH пускає, але завмирає на виводі; одні сайти відкриваються, інші стоять; великі завантаження застрягають на 0%.

Якщо на вашому шляху MTU нижчий за очікуваний — типово для DSL/PPPoE (він додає 8 байтів), деяких мобільних мереж і подвійно інкапсульованих каналів, — то навіть 1420 від WireGuard може бути забагато, і ви влітаєте в ту саму чорну діру. Лікується це зниженням MTU тунелю, щоб інкапсульовані пакети вміщалися в реальний шлях.

Знайдіть і виставте правильний MTU

Промацайте найбільший пакет, що проходить вашим шляхом без фрагментації, і виставте MTU інтерфейсу WireGuard нижче за нього. Значення тут приблизні — міряйте свої.

bash
# 1) Probe path MTU with don't-fragment pings (Linux/macOS).
#    Lower the size until it succeeds; that size + 28 = path MTU.
ping -M do -s 1472 8.8.8.8    # 1472 + 28 (ICMP/IP headers) = 1500
ping -M do -s 1392 8.8.8.8    # if 1472 fails, try smaller (=> 1420)
ping -M do -s 1252 8.8.8.8    # a safe fallback (=> 1280)

# 2) Set the tunnel MTU in your WireGuard config, under [Interface]:
#    [Interface]
#    MTU = 1280        # widely-compatible fallback; try 1412/1420 first

# 3) Apply and test a large transfer:
wg-quick down wg0 && wg-quick up wg0
curl -o /dev/null https://speed.example/largefile

# Rule of thumb: if small requests work but big ones hang, LOWER the MTU.
# 1420 -> 1412 -> 1280 are common steps. 1280 is the IPv6 minimum and
# almost always passes, at a small efficiency cost.
Поділитися сторінкою
FAQ

Відповіді на питання

Який MTU ставити для WireGuard?

Почніть із дефолтних 1420. Якщо великі передачі зависають, а дрібні запити ходять, знижуйте: типові кроки — 1412, далі 1280. 1280 — це мінімальний MTU для IPv6, він працює майже завжди, хоч і трохи втрачає в ефективності. Промацайте шлях пінгами з прапорцем don't fragment, щоб знайти найбільше значення, яке проходить.

Чому WireGuard підключається, а тоді застрягає на великих файлах?

Майже завжди це чорна діра PMTU. Ваші пакети завеликі для шляху, а ICMP-повідомлення, які мали б про це сказати, десь відкидають, тож великі пакети зникають мовчки, а малі проходять. Знизьте MTU тунелю — пакети почнуть уміщатися, і зависання зникне.

Чому в WireGuard MTU за замовчуванням 1420, а не 1500?

Бо WireGuard інкапсулює кожен пакет у шифрований UDP і додає близько 60 байтів накладних витрат (для IPv4). MTU інтерфейсу 1420 лишає під них місце, щоб інкапсульований пакет усе одно вміщався у стандартний шлях на 1500 байтів без фрагментації.

Тунель, налаштований так, щоб просто працювати

s4m тримає WireGuard і OpenVPN зі здоровими налаштуваннями за замовчуванням і архітектурою без логів, переважно в пам'яті. Якщо мережі потрібен нижчий MTU, ви правите один рядок — і все. Анонімні акаунти, приймаємо крипту.

Цю сторінку знаходять за запитами

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.