Pingy odpovedajú, DNS sa prekladá a každá stránka, ktorá potrebuje plný segment, sa zasekne. Na linke, ktorá pridáva vlastnú zapuzdrenie, cesta potichu stráca niekoľko desiatok bajtov rozpočtu, a profil napísaný pre čistý Ethernet naďalej žiada pakety, ktoré linka neunesie. Spojenie nie je pomalé; zahadzuje presne tie pakety, na ktorých záleží.

Toto môžu vyriešiť tri možnosti a pôsobia v rôznych vrstvách. Výber nesprávnej buď nič neurobí, alebo urobí tunel krehkým novým spôsobom, takže výber začína tým, čo cesta skutočne podporuje.

Tri gombíky, tri rôzne vrstvy

link-mtu je vonkajší rozpočet: zašifrovaná užitočná záťaž plus hlavička OpenVPN, hlavička UDP a vonkajšia hlavička IP. Opisuje, čo opúšťa stroj, a preto je to číslo, ktoré obmedzuje fyzická cesta.

tun-mtu je vnútorný rozpočet: rozhranie, ktoré vidí vaša prevádzka. Je presne o réžiu tunela väčšie ako to, čo cesta dokáže uniesť, a OpenVPN ho zvyčajne odvodí, namiesto toho, aby vás nútilo ho nastaviť.

mssfix je úplne iný mechanizmus. Prepisuje maximálnu veľkosť segmentu oznamovanú počas podaní rúk TCP, aby si partnerské uzly TCP vybrali segmenty, ktoré sa po zapuzdrení zmestia. Nemení MTU rozhrania a nemá žiadny vplyv na UDP.

Ak nastavíte link-mtu explicitne, OpenVPN odpočíta vlastnú réžiu, aby odvodil vnútorné MTU. Táto réžia nie je pevná konštanta; závisí od šifry a autentifikácie, preto hodnota skopírovaná z fóra môže byť na inom profile nesprávna. Nastavenie link-mtu aj tun-mtu dáva klientovi dve protichodné inštrukcie.

Zmerajte cestu, skôr ako vyberiete akékoľvek číslo

Merajte z fyzického rozhrania, nie zvnútra tunela, a pamätajte, že ping hlási užitočnú záťaž, nie veľkosť paketu. Pred porovnaním záťaže s rámcom 1500 bajtov pridajte 28 bajtov na hlavičky IPv4 a ICMP a majte túto korekciu na pamäti, keď partner hlási iné číslo.

V klientovi Linux ping -M do -s 1472 zakazuje fragmentáciu a zlyhá, ak je paket príliš veľký. Znižujte záťaž, kým neprejde, potom pridajte 28, aby ste dostali MTU cesty. PPPoE stojí 8 bajtov, takže 1492 je na DSL normálne. DS-Lite a niektoré mobilné cesty stoja 40 alebo viac a odpoveď je zvyčajne nižšia, než naznačuje nominálna rýchlosť linky.

Ak každá veľkosť pingu uspeje, ale veľké prenosy sa stále zasekávajú, podozrievajte čiernu dieru namiesto jednoduchého limitu veľkosti. Správa ICMP o potrebnej fragmentácii sa niekde na ceste filtruje, takže odosielateľ sa nikdy nenaučí zmenšovať a všimnú si to iba toky, ktoré potrebujú veľký segment.

Najprv obmedzte TCP, potom zmenšite tunel

Podania rúk TCP sú jediné, čoho sa mssfix dotýka, čo z neho zvyčajne robí najmenej invazívnu kontrolu na prvé vyskúšanie. Nastavte ho tesne pod skutočný rozpočet cesty, pošlite rovnakú hodnotu zo servera, aby sa oba konce zhodli, a znova otestujte veľké sťahovanie. Ak zaseknutie zmizne, problémom bola veľkosť segmentu TCP a nič iné netreba meniť.

Znížte vnútorné MTU, keď dotknutá prevádzka nie je TCP. Služba UDP, tunel v tuneli alebo aplikácia odosielajúca datagramy plnej veľkosti budú po obmedzení MSS naďalej zlyhávať, pretože nič neprepisuje veľkosť ich paketov. V takom prípade znížte tun-mtu alebo nastavte link-mtu a nechajte klienta odvodiť vnútornú hodnotu, ale nikdy oboje.

Nesiahajte po starej možnosti fragmentácie. Rozdeľovala pakety vnútri tunela, pridávala réžiu a bola zrušená z dobrých dôvodov; moderný OpenVPN očakáva presný opis cesty.

Prečo malé sondy stále fungujú

DNS dopyty, ozveny ICMP a podania rúk TCP sú všetky hlboko pod veľkosťou, ktorá zlyháva. Tunel preto v každom rýchlom teste vyzerá zdravo, zatiaľ čo podania rúk TLS a odpovede HTTP potichu zlyhávajú. Práve táto kombinácia, funkčný traceroute a prehliadač, ktorý sa zasekne na prvej veľkej odpovedi, je signál, ktorý treba hľadať. Skôr než siahnete po novom profile, siahnite po sonde plnej veľkosti.

Overte to prevádzkou, ktorá zlyhala. Načítajte veľkú stránku, pošlite datagram UDP plnej veľkosti, ak je to dotknutá služba, a zopakujte z druhého klienta na inej linke. Zapíšte namerané MTU cesty a zvolenú hodnotu, pretože inak bude ďalší človek, ktorý sa dotkne profilu, považovať to číslo za svojvoľné.

Nikdy neznížte vnútorné MTU pod 1280, keď IPv6 ide cez tunel, pretože to je minimum, ktoré musí uniesť každé spojenie IPv6. Menšie MTU je fakt o ceste, nie nastavenie výkonu, ktoré sa ladí podľa pocitu.

Súvisiace články