En side indlæses, en ping lykkes, og en filkopi hænger på det samme punkt hver gang. Det mønster peger på pakkestørrelse frem for båndbredde eller legitimationsoplysninger. Indkapsling tilføjer byte til hver pakke, så en nyttelast, der passede på den oprindelige vej, kan overskride grænsen, når den sendes gennem en tunnel. Tre forskellige tal bliver kaldt MTU i disse samtaler, og forveksler man dem, ender man med en indstilling, der retter én applikation og ødelægger en anden.

Tre tal, som folk kalder MTU

Interface-MTU er den konfigurerede grænse for en pakke på det link. Vej-MTU er den mindste grænse langs ruten, og den opdages i stedet for at blive konfigureret. TCP MSS er den nyttelaststørrelse, en peer oplyser at kunne modtage, og den udledes af de to andre i stedet for at være en separat fysisk grænse.

En tunnel har et indre og et ydre syn. Den ydre pakke bærer den indkapslede plus de headere, protokollen kræver, så den brugbare indre størrelse er mindre, end den ydre vej tillader. Vejen til VPN-serveren er også forskellig fra serverens vej til destinationen.

Opdagelse af vej-MTU lader en afsender lære den fungerende størrelse, men det afhænger af, at feedback når frem. Når en mellemliggende enhed filtrerer de relevante ICMP-beskeder, bliver afsenderen ved med at sende pakker, der aldrig fuldføres, og det er det klassiske sorte hul. Symptomet er karakteristisk, når man kender det: håndtrykket lykkes, den første nyttelast i fuld størrelse forsvinder, og forbindelsen nulstilles eller hænger til sidst. Intet i applikationens log ser ud som et netværksproblem.

Undersøg vejen med en nyttelast, du kontrollerer

En test er bevis om én rute og én størrelse, ikke en anbefalet indstilling. Brug en vært, der svarer, og ændr kun nyttelastens størrelse.

ping -M do -s 1372 -c 2 203.0.113.20
ping -4 -f -l 1372 vpn.example

Den første kommando sender en Linux-test med fragmentering slået fra og en nyttelast på 1372 byte, og den anden gør det samme på Windows, hvor nyttelasten sættes med -l. Et svar betyder, at den størrelse overlevede vejen. En besked om, at fragmentering er nødvendig, er informativ, mens en timeout er tvetydig, fordi værten eller en mellemliggende enhed måske bare dropper ICMP.

Gå størrelsen ned i nogle få trin i stedet for at binærsøge til byten. Du prøver at fastslå, om der findes et størrelsesloft, ikke at offentliggøre et tal for hvert netværk. Det tal, du finder, gælder for denne vej, denne protokol og denne adressefamilie.

IPv4 og IPv6 fragmenterer forskelligt, så et testresultat fra den ene familie siger intet om den anden. Test den familie, applikationen faktisk bruger.

MSS-clamping hjælper kun TCP

For TCP forhandles den effektive nyttelast under håndtrykket, og en router på vejen kan skrive den værdi ned, så begge ender sender mindre segmenter. Det er, hvad MSS-clamping gør, og det virker uden at røre klienten overhovedet.

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
ip link show tun0

Den første regel clamper den annoncerede MSS til vej-MTU for videresendte TCP-håndtryk, og den anden viser tunnelinterfacets egen MTU, så du kan sammenligne den med det, vejen tillader. Clamping er den mindst indgribende rettelse til en TCP-applikation, der hænger efter håndtrykket.

For UDP gør den intet. En tale- eller spilklient, der sender store datagrammer, ignorerer en MSS-indstilling helt, fordi der ikke er noget håndtryk at skrive om. Hvis den svigtende applikation er UDP, så se i stedet på klientens egne muligheder for pakkestørrelse. De to protokoller svigter forskelligt og repareres med forskellige værktøjer, og derfor hører protokollen til i billetens første sætning.

OpenVPN udstiller muligheder som tun-mtu, mssfix og fragmentrelaterede indstillinger, og deres adfærd afhænger af versionen og af, om datakanalen er AEAD. Læs manualen for den version, der bruges, og skift én indstilling ad gangen.

Skift én understøttet indstilling og gentag begge kørsler

Behold den oprindelige profil, skift en enkelt understøttet værdi, og gentag både den lille anmodning, der virkede, og den store overførsel, der fejlede. Hvis kun den store ændrer sig, jagtede du størrelse. Hvis begge ændrer sig, flyttede noget andet sig med den.

En lavere værdi kan reducere symptomet, mens den tilføjer overhead, så det mindst mulige tal er ikke målet. Målet er en størrelse, som vejen bærer pålideligt med mindst spild. Noter værdien, vejen og klientversionen i billetten, fordi det samme tal anvendt et andet sted er et gæt.

Hvis den samme profil virker fra et andet betroet netværk, så behold den forskel i diagnosen i stedet for at erklære klienten rettet. Den variabel, der ændrede sig, er vejen, og vejen er det, testen målte.

Relaterede artikler