Stránka se načte, ping projde, ale kopírování souboru se pokaždé zasekne ve stejném místě. Tento vzorec ukazuje na velikost paketu, nikoli na šířku pásma nebo přihlašovací údaje. Zapouzdření přidává ke každému paketu bajty, takže užitečné zatížení, které se na původní cestě vešlo, může po průchodu tunelem překročit limit. V těchto rozhovorech se MTU říká třem různým číslům a jejich záměna vede k nastavení, které jednu aplikaci opraví a druhou rozbije.

Tři čísla, kterým lidé říkají MTU

MTU rozhraní je nakonfigurovaný limit pro paket na tomto spoji. MTU cesty je nejmenší limit podél trasy a zjišťuje se, nekonfiguruje. TCP MSS je velikost užitečného zatížení, kterou protějšek oznamuje, že dokáže přijmout, a odvozuje se od zbývajících dvou, není to samostatný fyzický limit.

Tunel má pohled zevnitř a zvenku. Vnější paket nese zapouzdřený paket plus hlavičky, které protokol potřebuje, takže použitelná vnitřní velikost je menší než to, co vnější cesta dovoluje. Cesta k serveru VPN se také liší od cesty serveru k cíli.

Zjišťování MTU cesty umožňuje odesílateli poznat funkční velikost, ale závisí na tom, zda dorazí zpětná vazba. Když mezilehlé zařízení filtruje příslušné zprávy ICMP, odesílatel dál vysílá pakety, které nikdy nedokončí, a to je klasická černá díra. Příznak je nápadný, jakmile ho znáte: handshake uspěje, první plné zatížení zmizí a spojení se nakonec resetuje nebo zasekne. Nic v logu aplikace nevypadá jako síťový problém.

Otestujte cestu zatížením, které ovládáte

Sonda je důkaz o jedné trase a jedné velikosti, ne doporučené nastavení. Použijte hostitele, který odpovídá, a měňte jen velikost zatížení.

ping -M do -s 1372 -c 2 203.0.113.20
ping -4 -f -l 1372 vpn.example

První příkaz odešle linuxovou sondu s vypnutou fragmentací a zatížením 1372 bajtů, druhý dělá totéž ve Windows, kde se zatížení nastavuje pomocí -l. Odpověď znamená, že tato velikost cestu přežila. Zpráva o potřebě fragmentace je informativní, zatímco timeout je nejednoznačný, protože hostitel nebo mezilehlé zařízení může ICMP prostě zahodit.

Snižujte velikost v několika krocích, místo abyste binárně hledali po bajtech. Snažíte se zjistit, zda existuje strop velikosti, ne publikovat číslo pro každou síť. Číslo, které najdete, platí pro tuto cestu, tento protokol a tuto rodinu adres.

IPv4 a IPv6 fragmentují odlišně, takže výsledek sondy z jedné rodiny nic neříká o druhé. Testujte rodinu, kterou aplikace skutečně používá.

Ořez MSS pomáhá jen TCP

U TCP se efektivní zatížení sjednává během handshake a router na cestě může tuto hodnotu přepsat směrem dolů, aby oba konce posílaly menší segmenty. To dělá ořez MSS a funguje, aniž by se klienta vůbec dotkl.

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
ip link show tun0

První pravidlo ořezává oznámené MSS na MTU cesty pro předávané TCP handshaky a druhé ukazuje vlastní MTU tunelového rozhraní, abyste je porovnali s tím, co cesta dovoluje. Ořez je nejméně invazivní oprava pro TCP aplikaci, která se po handshake zasekne.

Pro UDP nedělá nic. Hlasový nebo herní klient, který posílá velké datagramy, bude nastavení MSS úplně ignorovat, protože tu není handshake k přepsání. Pokud selhávající aplikace běží přes UDP, podívejte se místo toho na vlastní možnosti velikosti paketů v klientovi. Oba protokoly selhávají jinak a opravují se jinými nástroji, proto protokol patří do první věty tiketu.

OpenVPN nabízí volby jako tun-mtu, mssfix a nastavení související s fragmentací a jejich chování závisí na verzi a na tom, zda je datový kanál AEAD. Přečtěte si manuál k používané verzi a měňte jednu volbu po druhé.

Změňte jedno podporované nastavení a zopakujte oba běhy

Zachovejte původní profil, změňte jednu podporovanou hodnotu a zopakujte malý požadavek, který fungoval, i velký přenos, který selhal. Pokud se změní jen ten velký, šli jste po velikosti. Pokud se změní oba, pohnulo se s ním něco jiného.

Nižší hodnota může zmírnit příznak za cenu režie, takže nejmenší možné číslo není cíl. Cílem je velikost, kterou cesta spolehlivě unese s nejmenším plýtváním. Zapište hodnotu, cestu a verzi klienta do tiketu, protože stejné číslo použité jinde je odhad.

Pokud stejný profil funguje z jiné důvěryhodné sítě, ponechte tento rozdíl v diagnóze, místo abyste klienta prohlásili za opraveného. Proměnná, která se změnila, je cesta, a cestu sonda změřila.

Související články