Zašto VPN zapne na velikim prijenosima, ali ne na malima
Mali zahtjevi dobiju odgovor dok veliki prijenosi zamrznu. Usporedite ograničenje sučelja, ograničenje putanje i najavljeni TCP teret prije nego kopirate fiksni MTU.
Stranica se učita, ping uspije, a kopiranje datoteke svaki put zapne na istom mjestu. Taj obrazac upućuje na veličinu paketa, a ne na propusnost ili vjerodajnice. Enkapsulacija dodaje bajtove svakom paketu, pa korisni teret koji je stao na izvornoj putanji može premašiti ograničenje kad prođe kroz tunel. U tim razgovorima tri različita broja nazivaju se MTU, a njihovo miješanje vodi do postavke koja popravlja jednu aplikaciju i kvari drugu.
Tri broja koja ljudi nazivaju MTU
MTU sučelja konfigurirano je ograničenje za paket na tom linku. MTU putanje najmanje je ograničenje duž rute i otkriva se, a ne konfigurira. TCP MSS veličina je korisnog tereta koju sugovornik najavljuje da može primiti, i izvodi se iz druga dva, a nije zasebno fizičko ograničenje.
Tunel ima unutarnji i vanjski pogled. Vanjski paket nosi enkapsulirani plus zaglavlja koja protokol zahtijeva, pa je upotrebljiva unutarnja veličina manja od onoga što vanjska putanja dopušta. Putanja do VPN poslužitelja također se razlikuje od poslužiteljeve putanje do odredišta.
Otkrivanje MTU putanje omogućuje pošiljatelju da sazna radnu veličinu, ali ovisi o dolasku povratne informacije. Kad posredni uređaj filtrira relevantne ICMP poruke, pošiljatelj nastavlja slati pakete koji nikad ne završe, i to je klasična crna rupa. Simptom je prepoznatljiv kad ga znaš: rukovanje uspije, prvi teret pune veličine nestane, a veza se na kraju resetira ili zapne. Ništa u zapisniku aplikacije ne izgleda kao mrežni problem.
Ispitajte putanju teretom koji kontrolirate
Proba je dokaz o jednoj ruti i jednoj veličini, a ne preporučena postavka. Koristite host koji odgovara i mijenjajte samo veličinu tereta.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Prva naredba šalje Linux probu s isključenom fragmentacijom i teretom od 1372 bajta, a druga radi isto na Windowsu gdje se teret zadaje s -l. Odgovor znači da je ta veličina preživjela putanju. Poruka da je potrebna fragmentacija informativna je, dok je istek vremena dvosmislen jer host ili posredni uređaj može jednostavno odbaciti ICMP.
Spuštajte veličinu u nekoliko koraka umjesto binarne pretrage do bajta. Pokušavate utvrditi postoji li gornja granica veličine, a ne objaviti broj za svaku mrežu. Broj koji nađete vrijedi za ovu putanju, ovaj protokol i ovu obitelj adresa.
IPv4 i IPv6 fragmentiraju se različito, pa rezultat probe iz jedne obitelji ništa ne govori o drugoj. Testirajte obitelj koju aplikacija stvarno koristi.
MSS stezanje pomaže samo TCP-u
Kod TCP-a se efektivni teret dogovara tijekom rukovanja, a usmjerivač na putanji može prepisati tu vrijednost naniže da oba kraja šalju manje segmente. To radi MSS stezanje i djeluje bez ikakvog diranja u klijent.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Prvo pravilo steže najavljeni MSS na MTU putanje za proslijeđena TCP rukovanja, a drugo prikazuje vlastiti MTU tunelskog sučelja da ga usporedite s onim što putanja dopušta. Stezanje je najmanje invazivna popravka za TCP aplikaciju koja zapne nakon rukovanja.
Za UDP ne čini ništa. Glasovni ili igraći klijent koji šalje velike datagrame potpuno će ignorirati MSS postavku, jer nema rukovanja koje bi se prepisalo. Ako aplikacija koja pada radi preko UDP-a, pogledajte umjesto toga opcije veličine paketa u samom klijentu. Dva protokola padaju različito i popravljaju se različitim alatima, zato protokol pripada u prvu rečenicu tiketa.
OpenVPN nudi opcije kao što su tun-mtu, mssfix i postavke vezane uz fragmentaciju, a njihovo ponašanje ovisi o verziji i o tome je li podatkovni kanal AEAD. Pročitajte priručnik za verziju koja se koristi i mijenjajte jednu opciju po jednu.
Promijenite jednu podržanu postavku i ponovite oba prolaza
Zadržite izvorni profil, promijenite jednu podržanu vrijednost i ponovite i mali zahtjev koji je radio i veliki prijenos koji je pao. Ako se promijeni samo veliki, lovili ste veličinu. Ako se promijene oba, nešto se drugo pomaknulo s njim.
Niža vrijednost može smanjiti simptom uz dodatni trošak, pa najmanji mogući broj nije cilj. Cilj je veličina koju putanja pouzdano nosi uz najmanje rasipanja. Zapišite vrijednost, putanju i verziju klijenta u tiket, jer isti broj primijenjen drugdje je nagađanje.
Ako isti profil radi s druge pouzdane mreže, zadržite tu razliku u dijagnozi umjesto da proglasite klijent popravljenim. Varijabla koja se promijenila je putanja, a putanju je proba izmjerila.