Тунель, які праходзіць аўтэнтыфікацыю, пераносіць 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 было неабходным, але не дастатковым.

Падобныя артыкулы