Тунель, який проходить автентифікацію, переносить ping і потім зависає на першій великій передачі, — класична ознака відсутнього повідомлення ICMP, а не зламаного VPN. Відправник так і не дізнається, що пакет був завеликий, повторює той самий розмір, а застосунок чекає. Виправлення — це рішення політики міжмережевого екрана, а не перевстановлення клієнта. Порядок важливий: виміряйте, де межа розміру, потім звузьте правило, яке проковтнуло звіт.

Що ICMP насправді переносить на цьому шляху

Виявлення MTU шляху IPv4 спирається на те, що маршрутизатор повідомляє: пакет зі встановленим бітом don't-fragment не вдалося переслати. Це повідомлення ICMP Fragmentation Needed, і без нього відправник не має причини зменшувати розмір сегмента. IPv6 суворіший: маршрутизатори не фрагментують у транзиті, тому повідомлення ICMPv6 Packet Too Big — єдиний сигнал, який змушує відправника зменшуватися.

Обидва повідомлення — зворотний зв'язок площини керування, і жодне не є діагностичним відлунням. Політика, що блокує ping, і політика, що блокує весь ICMP, виглядають схоже у списку правил, але в мережі поводяться зовсім по-різному. Друга може перетворити правильно розрахований тунель на односторонній шлях для всього, що більше за найменшу ланку в ланцюгу.

Деякі транспорти реалізують власне виявлення зондуючими пакетами, як описує RFC 4821, і вони менше залежать від цього зворотного зв'язку. Це аргумент перевірити, який транспорт ви використовуєте, а не припускати, що кожен тунель несприйнятливий.

ПовідомленняПризначення на шляхуЯкщо заблоковано
ICMPv4 тип 3 код 4Пакет був завеликий для наступної ланкиВідправник повторює спроби і зависає
ICMPv6 тип 2Packet Too Big, еквівалент для IPv6Те саме зависання, без резервної фрагментації
ICMP тип 11Час вичерпано, використовує tracerouteДіагностика втрачає переходи, трафік продовжує йти
Запит і відповідь відлуння ICMPПеревірка доступностіPing не проходить, шлях може бути гаразд

Збій залежить від розміру

Запитайте, чи пов'язаний збій із розміром пакета. Сторінка входу, запит DNS і короткий виклик API проходять, а завантаження файлу, велика відповідь або завантаження зображення зависають. Ця картина вказує на обмеження розміру десь між двома кінцями, а не на автентифікацію чи маршрутизацію. Успішний малий ping майже нічого не каже про те, де ця межа.

Усередині тунелю треба враховувати два рівні: пакет корисного навантаження і зовнішній інкапсульований пакет. Внутрішній відправник може поводитися правильно, поки зовнішній шлях менший, ніж припускає тунель, тому важливі і власне налаштування MTU тунелю, і фізична ланка під ним.

Виміряйте перед редагуванням правил

Зондуйте з бітом don't-fragment і обраним вами розміром корисного навантаження, від несправного клієнта до захищеної адреси:

ping -M do -s 1472 10.20.5.7
ping -M do -s 1300 10.20.5.7

Корисне навантаження 1472 байти плюс 28 байтів заголовків — це пакет 1500 байтів. Якщо великий зонд не проходить з помилкою фрагментації, а менший проходить, ви знайшли межу; врахуйте накладні витрати тунелю і повторюйте, доки робочий розмір не стане стабільним.

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

Звузьте правило, потім перевірте завдання ще раз

Виправлення має дозволяти конкретні керівні повідомлення, а не весь протокол. На хості з iptables форма — це дозвіл для конкретного типу; адаптуйте синтаксис до того, що керує міжмережевим екраном на вашій платформі:

iptables -I INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
ip6tables -I INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT

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

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

Схожі статті