Тунэль завяршае рукапацісканне, дробныя запыты вяртаюцца, а першая вялікая перадача спыняецца. Такая карціна паказвае на MTU шляху значна раней, чым на прапускную здольнасць. Кожнае звяно на маршруце абмяжоўвае памер пакета, а інкапсуляцыя траціць частку гэтага запасу на знешнія загалоўкі, таму ўнутраны пакет павінен быць меншым, чым меркаваў бы голы шлях. Збой адбываецца маўкліва, і менавіта таму яго дорага дыягнаставаць.

Што насамрэч вымярае MTU шляху

MTU шляху — гэта найменшы MTU звяна на маршруце паміж двума хастамі, а не MTU, надрукаваны на вашым лакальным інтэрфейсе. Лакальнае значэнне — гэта пункт, з якога пачынаецца ацэнка, а шлях вырашае, дзе яна павінна скончыцца. Менавіта таму аднолькавы тунэль можа працаваць у адной сетцы доступу і спыняцца ў іншай: змяніўся маршрут, а не канфігурацыя. Вымераць адзін раз і меркаваць паўсюль — гэта памылка, якая падтрымлівае гэтую праблему.

Для тунэля важны лік — гэта ўнутраны MTU, гэта значыць запас знешняга шляху мінус усё, што спажывае інкапсуляцыя. WireGuard дадае знешні загаловак IP і загаловак UDP; іншыя транспарты дадаюць свае. Задайце ўнутраны памер занадта вялікім — і кожнаму пакету поўнага памеру спатрэбіцца фрагментацыя, якой можа так і не быць.

Чаму тунэль паменшвае прыдатны пакет

Калі інтэрфейс тунэля захоўвае MTU фізічнага звяна, кожны вялікі пакет залежыць ад таго, ці згодзіцца нехта ніжэй па шляху яго фрагментаваць. IPv4 у прынцыпе гэта дазваляе, але маршрутызатар, якому забаранілі фрагментаваць, вяртае памылку. Маршрутызатары IPv6 увогуле ніколі не фрагментуюць пры транзіце, таму аднолькавы налад паводзіць сябе па-рознаму ў залежнасці ад сямейства адрасоў. У абодвух выпадках адпраўнік нічога не даведаецца, пакуль нехта не паведаміць.

Практычны вынік — памер, які падыходзіць для рукапаціскання, але не для карыснай нагрузкі. TLS ClientHello або запыт DNS дастаткова малыя, каб перасекчы паменшаны шлях некранутымі, а масавая перадача — не. Таму сімптомы групаваць вакол канкрэтных аперацый, а не канкрэтных хастаў.

Выяўленне працуе, толькі калі прыходзіць зваротная сувязь

Выяўленне IPv4 абапіраецца на біт «не фрагментаваць»: маршрутызатар, які не можа перадаць пакет, вяртае ICMP fragmentation-needed з MTU наступнага кроку, і адпраўнік зніжае сваю ацэнку. IPv6 замест гэтага выкарыстоўвае паведамленні Packet Too Big, бо маршрутызатары не фрагментуюць пры транзіце. Абодва механізмы мяркуюць, што паведамленне знойдзе шлях назад да адпраўніка — праз тунэль і міма любога міжсеткавага экрана на зваротным шляху. Калі гэта дапушчэнне не спраўджваецца, адпраўнік працягвае паўтараць памер, які шлях не можа пранесці.

Міжсеткавы экран, які дазваляе запыт і адказ рэха, не абавязкова дазволіў гэтыя тыпы памылак. ICMP — гэта сямейства, і важныя тут члены — гэта памылкі, а не пара рэха. Праверце палітыку кіравальнага трафіку на абодвух канцах тунэля і на шляху паміж імі, і прытрымлівайцеся падтрыманых рэкамендацый платформы, а не дазваляйце ўсе тыпы ICMP паўсюль.

Тая ж фільтрацыя можа знаходзіцца ўнутры тунэля. Калі ўнутраны шлях адкідае памылку, а знешні яе нясе, адпраўнік можа адаптавацца да мяжы, якую інкапсуляваны трафік насамрэч ніколі не бачыць.

Праверце шлях замест здагадкі ліку

Трымайце пункт прызначэння, сетку доступу і тунэль нязменнымі, змяняйце толькі памер пакета. Зонд «не фрагментаваць», які правальваецца з падсказкай MTU, дае вам мяжу наступнага кроку; паўтарайце, пакуль памер не пройдзе, і запішыце і памер, і сямейства адрасоў.

ping -M do -s 1400 10.60.20.10
ping -M do -s 1300 10.60.20.10
ping -6 -M do -s 1300 2001:db8::10

Пінг, які праходзіць, не даказвае, што сегменты поўнага памеру рэальнага праграмнага забеспячэння пройдуць, таму паўтарыце тэст з той перадачай, якая насамрэч зламалася. Параўнайце найбольшы працоўны зонд з настроеным MTU тунэля і трымайце гэтыя два лікі асобна ў нататках. Калі яны адрозніваюцца прыкладна на велічыню загалоўка, вы знайшлі накладныя выдаткі інкапсуляцыі, а не няспраўнасць.

PLPMTUD, апісаны ў RFC 4821, зондуе ўверх і выкарыстоўвае транспартныя пацверджанні замест даверу да дастаўленых памылак. Ён дапамагае на шляхах, якія фільтруюць ICMP, але падтрымка залежыць ад стэка і праграмы. Паток TCP можа аднавіцца сам, а праграма UDP з фіксаваным памерам дейтаграмы працягвае збойваць.

Выберыце значэнне і запішыце абгрунтаванне

Зніжэнне MTU тунэля — гэта адначасова дыягностыка і законнае выпраўленне, калі шлях вядомы. Яно не замяняе ведання таго, які шлях і які механізм зваротнай сувязі былі задзейнічаны, бо значэнне, падабранае для мабільнага звяна, будзе непатрэбна малым на валаконным злучэнні. Запішыце абраны памер, зонд, які яго апраўдаў, і крок адкату.

Механізм IPv4 апісаны ў RFC 1191, а рэкамендацыі па пакетаванні IPv6 — у RFC 8201; згадка абодвух не дае наступнаму інжынеру зноў выводзіць гэта дапушчэнне. Калі перадача ўсё яшчэ спыняецца на абраным памеры, перастаньце зніжаць лік і паглядзіце на наступны ўзровень. Шлях, які збойвае пры любым памеры, — гэта не праблема MTU.

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