Zakaj se VPN ustavi pri velikih prenosih, pri majhnih pa ne
Majhne zahteve dobijo odgovor, veliki prenosi pa zamrznejo. Primerjajte omejitev vmesnika, omejitev poti in napovedano obremenitev TCP, preden kopirate fiksni MTU.
Stran se naloži, ping uspe, kopiranje datoteke pa se vsakič ustavi na istem mestu. Ta vzorec kaže na velikost paketa, ne na pasovno širino ali poverilnice. Inkapsulacija vsakemu paketu doda bajte, zato lahko koristna obremenitev, ki je bila na prvotni poti dovolj majhna, po prehodu skozi tunel preseže omejitev. V teh pogovorih se MTU imenujejo tri različna števila, njihova zamenjava pa pripelje do nastavitve, ki eno aplikacijo popravi in drugo pokvari.
Tri števila, ki jih ljudje imenujejo MTU
MTU vmesnika je nastavljena omejitev za paket na tej povezavi. MTU poti je najmanjša omejitev vzdolž poti in se odkrije, ne nastavi. TCP MSS je velikost koristne obremenitve, ki jo partner navede kot sprejemljivo, in izhaja iz drugih dveh, ni ločena fizična omejitev.
Predor ima notranji in zunanji pogled. Zunanji paket nosi inkapsuliranega in glave, ki jih protokol potrebuje, zato je uporabna notranja velikost manjša od tiste, ki jo dovoljuje zunanja pot. Tudi pot do strežnika VPN se razlikuje od poti strežnika do cilja.
Odkrivanje MTU poti omogoča pošiljatelju, da spozna delujočo velikost, vendar je odvisno od tega, ali prispe povratna informacija. Ko vmesna naprava filtrira ustrezna sporočila ICMP, pošiljatelj še naprej pošilja pakete, ki se nikoli ne končajo, in to je klasična črna luknja. Simptom je prepoznaven, ko ga poznaš: rokovanje uspe, prva obremenitev polne velikosti izgine, povezava pa se na koncu ponastavi ali ustavi. Nič v dnevniku aplikacije ne izgleda kot omrežna težava.
Preizkusite pot z obremenitvijo, ki jo nadzorujete
Preizkus je dokaz o eni poti in eni velikosti, ne priporočena nastavitev. Uporabite gostitelja, ki odgovarja, in spreminjajte samo velikost obremenitve.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Prvi ukaz pošlje linuxov preizkus z izklopljeno fragmentacijo in obremenitvijo 1372 bajtov, drugi pa stori isto v Windows, kjer se obremenitev nastavi z -l. Odgovor pomeni, da je ta velikost pot preživela. Sporočilo o potrebni fragmentaciji je informativno, medtem ko je časovna omejitev dvoumna, ker lahko gostitelj ali vmesna naprava ICMP preprosto zavrže.
Znižujte velikost v nekaj korakih, namesto binarnega iskanja do bajta. Poskušate ugotoviti, ali obstaja zgornja meja velikosti, ne objaviti števila za vsako omrežje. Število, ki ga najdete, velja za to pot, ta protokol in to družino naslovov.
IPv4 in IPv6 fragmentirata različno, zato rezultat ene družine ne pove ničesar o drugi. Preizkusite družino, ki jo aplikacija dejansko uporablja.
Obrezovanje MSS pomaga le TCP
Pri TCP se dejanska obremenitev dogovori med rokovanjem in usmerjevalnik na poti lahko to vrednost prepiše navzdol, da oba konca pošiljata manjše segmente. To počne obrezovanje MSS in deluje, ne da bi se klienta sploh dotaknilo.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Prvo pravilo obreže napovedani MSS na MTU poti za posredovana TCP rokovanja, drugo pa pokaže lastni MTU tunelskega vmesnika, da ga primerjate s tem, kar pot dovoljuje. Obrezovanje je najmanj invazivna popravka za aplikacijo TCP, ki se po rokovanju ustavi.
Za UDP ne stori ničesar. Glasovni ali igralni odjemalec, ki pošilja velike datagrame, bo nastavitev MSS popolnoma prezrl, ker ni rokovanja za prepisovanje. Če je aplikacija, ki odpoveduje, UDP, poglejte raje lastne možnosti velikosti paketa v odjemalcu. Protokola odpovedujeta različno in se popravljata z različnimi orodji, zato protokol sodi v prvi stavek prijave.
OpenVPN ponuja možnosti, kot so tun-mtu, mssfix in nastavitve, povezane s fragmentacijo, njihovo vedenje pa je odvisno od različice in od tega, ali je podatkovni kanal AEAD. Preberite priročnik za uporabljeno različico in spreminjajte eno možnost naenkrat.
Spremenite eno podprto nastavitev in ponovite oba poskusa
Obdržite prvotni profil, spremenite eno podprto vrednost in ponovite tako majhno zahtevo, ki je delovala, kot velik prenos, ki ni uspel. Če se spremeni samo veliki, ste lovili velikost. Če se spremenita oba, se je z njim premaknilo nekaj drugega.
Nižja vrednost lahko ublaži simptom, a doda stroške, zato najmanjše možno število ni cilj. Cilj je velikost, ki jo pot zanesljivo nosi z najmanjšo izgubo. Zapišite vrednost, pot in različico odjemalca v prijavo, ker je isto število uporabljeno drugje ugibanje.
Če isti profil deluje iz drugega zaupanja vrednega omrežja, ohranite to razliko v diagnozi, namesto da odjemalca razglasite za popravljenega. Spremenljivka, ki se je spremenila, je pot, in pot je tisto, kar je preizkus izmeril.