Prečo sa VPN zasekne pri veľkých prenosoch a nie pri malých
Malé požiadavky dostanú odpoveď, kým veľké prenosy zamrznú. Porovnajte limit rozhrania, limit cesty a oznámenú veľkosť TCP pred tým, než skopírujete pevné MTU.
Stránka sa načíta, ping prejde, ale kopírovanie súboru sa zakaždým zasekne na tom istom mieste. Tento vzor ukazuje na veľkosť paketu, nie na šírku pásma alebo prihlasovacie údaje. Zapuzdrenie pridáva ku každému paketu bajty, takže užitočné zaťaženie, ktoré sa zmestilo na pôvodnú cestu, môže po prechode tunelom prekročiť limit. V týchto rozhovoroch sa MTU nazývajú tri rôzne čísla a ich zámena vedie k nastaveniu, ktoré jednu aplikáciu opraví a druhú pokazí.
Tri čísla, ktoré ľudia nazývajú MTU
MTU rozhrania je nastavený limit pre paket na tomto spoji. MTU cesty je najmenší limit pozdĺž trasy a zisťuje sa, nekonfiguruje. TCP MSS je veľkosť užitočného zaťaženia, ktorú protistrana oznamuje ako prijímateľnú, a odvodzuje sa z ostatných dvoch, nie je samostatným fyzickým limitom.
Tunel má vnútorný a vonkajší pohľad. Vonkajší paket nesie zapuzdrený paket plus hlavičky, ktoré protokol potrebuje, takže použiteľná vnútorná veľkosť je menšia, než dovoľuje vonkajšia cesta. Cesta k serveru VPN sa tiež líši od cesty servera k cieľu.
Zisťovanie MTU cesty umožňuje odosielateľovi spoznať fungujúcu veľkosť, no závisí od toho, či dorazí spätná väzba. Keď medziležiace zariadenie filtruje príslušné správy ICMP, odosielateľ ďalej posiela pakety, ktoré sa nikdy nedokončia, a to je klasická čierna diera. Príznak je nápadný, keď ho poznáte: handshake prebehne, prvé zaťaženie plnej veľkosti zmizne a spojenie sa napokon resetuje alebo zasekne. Nič v logu aplikácie nevyzerá ako sieťový problém.
Otestujte cestu záťažou, ktorú ovládate
Test je dôkaz o jednej trase a jednej veľkosti, nie odporúčané nastavenie. Použite hostiteľa, ktorý odpovedá, a meňte len veľkosť zaťaženia.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Prvý príkaz odošle linuxovú sondu s vypnutou fragmentáciou a zaťažením 1372 bajtov, druhý robí to isté vo Windows, kde sa zaťaženie nastavuje pomocou -l. Odpoveď znamená, že táto veľkosť cestu prežila. Správa o potrebe fragmentácie je informatívna, kým časový limit je nejednoznačný, pretože hostiteľ alebo medziležiace zariadenie môže ICMP jednoducho zahodiť.
Znižujte veľkosť v niekoľkých krokoch namiesto binárneho hľadania po bajtoch. Snažíte sa zistiť, či existuje strop veľkosti, nie zverejniť číslo pre každú sieť. Číslo, ktoré nájdete, platí pre túto cestu, tento protokol a túto rodinu adries.
IPv4 a IPv6 fragmentujú odlišne, takže výsledok z jednej rodiny nič nehovorí o druhej. Testujte rodinu, ktorú aplikácia skutočne používa.
Orez MSS pomáha len TCP
V TCP sa efektívne zaťaženie dohaduje počas handshake a router na ceste môže túto hodnotu prepísať smerom nadol, aby oba konce posielali menšie segmenty. To robí orez MSS a funguje bez toho, aby sa klienta vôbec dotkol.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Prvé pravidlo orezáva oznámené MSS na MTU cesty pre preposielané TCP handshaky a druhé ukazuje vlastné MTU tunelového rozhrania, aby ste ho porovnali s tým, čo cesta dovoľuje. Orez je najmenej invazívna oprava pre TCP aplikáciu, ktorá sa po handshake zasekne.
Pre UDP nerobí nič. Hlasový alebo herný klient, ktorý posiela veľké datagramy, bude nastavenie MSS úplne ignorovať, pretože tu nie je handshake na prepísanie. Ak zlyhávajúca aplikácia beží cez UDP, pozrite sa namiesto toho na vlastné možnosti veľkosti paketov v klientovi. Oba protokoly zlyhávajú inak a opravujú sa inými nástrojmi, preto protokol patrí do prvej vety tiketu.
OpenVPN ponúka možnosti ako tun-mtu, mssfix a nastavenia súvisiace s fragmentáciou a ich správanie závisí od verzie a od toho, či je dátový kanál AEAD. Prečítajte si manuál k používanej verzii a meňte jednu možnosť za druhou.
Zmeňte jedno podporované nastavenie a zopakujte oba behy
Zachovajte pôvodný profil, zmeňte jednu podporovanú hodnotu a zopakujte malú požiadavku, ktorá fungovala, aj veľký prenos, ktorý zlyhal. Ak sa zmení len ten veľký, šli ste po veľkosti. Ak sa zmenia oba, pohlo sa s ním niečo iné.
Nižšia hodnota môže zmierniť príznak za cenu réžie, takže najmenšie možné číslo nie je cieľ. Cieľom je veľkosť, ktorú cesta spoľahlivo unesie s najmenším plytvaním. Zapíšte hodnotu, cestu a verziu klienta do tiketu, pretože rovnaké číslo použité inde je odhad.
Ak rovnaký profil funguje z inej dôveryhodnej siete, ponechajte tento rozdiel v diagnostike, namiesto toho aby ste klienta vyhlásili za opraveného. Premenná, ktorá sa zmenila, je cesta, a cestu sonda zmerala.