Miks VPN jääb suurte ülekannete juures kinni, väikeste juures mitte
Väikesed päringud saavad vastuse, suured ülekanded tarduvad. Võrrelge liidese piiri, tee piiri ja teatatud TCP koormust enne fikseeritud MTU kopeerimist.
Leht laaditakse, ping õnnestub ja faili kopeerimine jääb iga kord samasse kohta kinni. See muster viitab paketi suurusele, mitte ribalaiusele ega mandaatidele. Kapseldamine lisab igale paketile baite, nii et algsel teel mahtunud kasulik koormus võib pärast tunnelist läbimist piiri ületada. Nendes vestlustes nimetatakse MTU-ks kolme erinevat arvu ja nende segamini ajamine viib seadeni, mis parandab ühe rakenduse ja rikub teise.
Kolm arvu, mida inimesed MTU-ks nimetavad
Liidese MTU on sellel lingil paketi jaoks seadistatud piir. Tee MTU on marsruudi väikseim piir ja see avastatakse, mitte ei seadistata. TCP MSS on kasuliku koormuse suurus, mille partner teatab vastuvõetavana, ja see tuletatakse kahest teisest, mitte ei ole eraldi füüsiline piir.
Tunnelil on sisemine ja välimine vaade. Välimine pakett kannab kapseldatud paketti ja protokolli jaoks vajalikke päiseid, seega on kasutatav sisemine suurus väiksem kui välimine tee lubab. Tee VPN-serverini erineb ka serveri teest sihtkohta.
Tee MTU avastamine laseb saatjal õppida töötava suuruse, kuid sõltub tagasiside kohalejõudmisest. Kui vahepealne seade filtreerib asjakohased ICMP-sõnumid, jätkab saatja pakettide edastamist, mis ei lõpe kunagi, ja see on klassikaline must auk. Sümptom on iseloomulik, kui seda tead: käepigistus õnnestub, esimene täissuuruses koormus kaob ja ühendus lõpuks lähtestatakse või jääb rippuma. Miski rakenduse logis ei näe välja nagu võrguprobleem.
Uurige teed koormusega, mida kontrollite
Proov on tõend ühe marsruudi ja ühe suuruse kohta, mitte soovitatud seade. Kasutage vastavat hosti ja muutke ainult koormuse suurust.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Esimene käsk saadab Linuxi proovi fragmenteerimisega välja lülitatud ja 1372 baidi suuruse koormusega, teine teeb sama Windowsis, kus koormus seatakse valikuga -l. Vastus tähendab, et see suurus pidas teele vastu. Sõnum fragmenteerimise vajadusest on informatiivne, samas kui aegumine on kahemõtteline, sest host või vahepealne seade võib lihtsalt ICMP ära visata.
Laske suurusel mõne sammuga langeda, selle asemel et baitideni binaarselt otsida. Te püüate teha kindlaks, kas suuruse lagi on olemas, mitte avaldada iga võrgu jaoks numbrit. Leitud arv kehtib selle tee, selle protokolli ja selle aadressiperekonna kohta.
IPv4 ja IPv6 fragmenteeruvad erinevalt, seega ühe perekonna proovi tulemus ei ütle teise kohta midagi. Testige perekonda, mida rakendus tegelikult kasutab.
MSS-i piiramine aitab ainult TCP-d
TCP puhul lepitakse tegelik koormus kokku käepigistuse ajal ja tee peal olev ruuter võib selle väärtuse alla kirjutada, et mõlemad otsad saadaksid väiksemaid segmente. Seda MSS-i piiramine teebki ja see töötab ilma klienti üldse puutumata.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Esimene reegel piirab teatatud MSS-i edastatavate TCP käepigistuste jaoks tee MTU-ga ja teine näitab tunneliliidese enda MTU-d, et saaksite seda võrrelda sellega, mida tee lubab. Piiramine on kõige vähem sekkuv parandus TCP-rakendusele, mis jääb pärast käepigistust rippuma.
UDP jaoks ei tee see midagi. Suuri datagramme saatv hääl- või mänguklient eirab MSS-i seadet täielikult, sest ümberkirjutatavat käepigistust ei ole. Kui rikkuv rakendus on UDP, vaadake selle asemel kliendi enda paketi suuruse valikuid. Kaks protokolli rikkuvad erinevalt ja neid parandatakse erinevate tööriistadega, seepärast kuulub protokoll pileti esimesse lausesse.
OpenVPN pakub valikuid nagu tun-mtu, mssfix ja fragmenteerimisega seotud seaded ning nende käitumine sõltub versioonist ja sellest, kas andmekanal on AEAD. Lugege kasutatava versiooni käsiraamatut ja muutke korraga ühte valikut.
Muutke üht toetatud seadet ja korrake mõlemat katset
Jätke algne profiil alles, muutke ühte toetatud väärtust ja korrake nii väikest päringut, mis töötas, kui ka suurt ülekannet, mis ebaõnnestus. Kui muutub ainult suur, ajasite suurust taga. Kui muutuvad mõlemad, liikus koos sellega midagi muud.
Väiksem väärtus võib sümptomit leevendada, lisades samas üldkulu, seega väikseim võimalik arv ei ole eesmärk. Eesmärk on suurus, mida tee töökindlalt ja väikseima raiskamisega kannab. Märkige väärtus, tee ja kliendi versioon piletisse, sest sama arvu mujal rakendamine on oletus.
Kui sama profiil töötab teisest usaldusväärsest võrgust, jätke see erinevus diagnoosi, selle asemel et kuulutada klient parandatuks. Muutunud muutuja on tee ja tee on see, mida proov mõõtis.