Хто обирає MTU WireGuard: wg-quick, ядро чи ви
WireGuard не веде переговорів про MTU. Вирішує інструмент налаштування, мережевий менеджер або ваш рядок конфігурації, а типове значення — це здогад про шлях, а не вимірювання.
У WireGuard немає переговорів про MTU. Він шифрує все, що йому передає інтерфейс, і надсилає результат, а якщо інкапсульований пакет перевищує шлях, він десь відкидається або фрагментується, де ви цього не бачите. Хтось має вибрати MTU інтерфейсу, і цей хтось — інструмент, який підняв інтерфейс.
Є три кандидати, і їх легко переплутати.
Три місця, звідки може взятися значення
Значення можна задати явно в конфігурації інтерфейсу, його може обчислити інструмент налаштування за інформацією про маршрут, або його задасть будь-який мережевий менеджер, якому належить інтерфейс. Звичайний виклик wg не робить нічого з цього, бо wg керує лише ключами та пірами. MTU живе на мережевому інтерфейсі, тому ip link show wg0 — це місце, де ви його читаєте.
Якщо ви не впевнені, який випадок застосовується, спершу прочитайте MTU, а потім з’ясуйте, хто запустив інтерфейс.
Вирішуйте за тим, хто керує інтерфейсом
Якщо його запускає wg-quick, перемагає явний рядок MTU, інакше він обчислює значення. Якщо його запускає мережевий менеджер, вирішує профіль цього менеджера. Якщо його запускає середовище виконання контейнерів або клієнт провайдера, читайте їхню документацію, а не припускайте поведінку wg-quick.
Рішення не в тому, яке число найкраще в абстракції. А в тому, який компонент ви справді можете налаштувати.
Що робить типове обчислення
wg-quick шукає маршрут до кінцевої точки піра, бере MTU цього вихідного інтерфейсу й віднімає накладні витрати інкапсуляції. Із зовнішнім заголовком IPv4 це близько 60 байтів, з IPv6 — близько 80. Результат обмежується, щоб шлях у 1500 байтів давав 1420, а не значення, що працює лише в одній родині адрес. Це розумне типове значення, а не вимірювання вашого шляху.
Він не може знати про пізніший тунель, мобільний канал або відфільтрований шлях ICMP.
Обмеження приховує справжнє питання. Якщо ваш шлях справді 9000 байтів від краю до краю, 1420 залишає продуктивність на столі, а якщо шлях 1400, то 1420 уже завеликий. Типове значення — компроміс, і так до нього й треба ставитися.
Коли шлях змінюється під вами
Ноутбук, який переходить з Ethernet на Wi-Fi, а потім на точку доступу телефона, зберігає MTU інтерфейсу, з яким стартував. Зовнішній шлях тепер може бути меншим, і нічого заново не узгоджується. Вкладені тунелі погіршують справу, бо кожен шар віднімає свої накладні витрати з того самого бюджету. Значення, що працювало в офісі, — не те значення, яке працює в аеропорту.
Нещодавнє рукостискання доводить, що ключі працюють. Воно нічого не доводить про те, чи вміщаються великі пакети.
Перевіряйте по одному числу за раз
Зберігайте той самий застосунок і призначення, змініть одне значення й виміряйте. ping -M do -s 1372 перевіряє пакет у 1400 байтів з установленим бітом DF, і це саме та форма перевірки, яка вам потрібна. Якщо малі запити проходять, а великі застрягають, у вас проблема розміру, а не маршрутизації.
Змінюйте лише MTU. Налаштування кількох параметрів пакета одразу нічого не каже про те, який із них був важливим.
І не чекайте, що зміна MTU виправить відсутній зворотний маршрут, правило пересилання або збій DNS. Вони теж дають симптоми відсутності трафіку, і для них є свої перевірки. Керівництво wg-quick описує автоматичний вибір.