Pesastatud VPN-tunnelid: miks sisemine suurte pakettide juures takerdub
Iga tunnel kulutab osa tee paketieelarvest enne, kui järgmine algab. Liida päised kokku ja sisemine sessioon ebaõnnestub suurte pakettide juures.
DNS laheneb, SSH-sessioon püsib, ja siis külmub suur üleslaadimine, samal ajal kui ping samasse hosti vastab endiselt. See lõhe viitab paketi suurusele, mitte katkisele tunnelile. Pesastatud tunnelid jõuavad selleni suuruste juures, mida kumbki tunnel üksi ei saavutaks. Sisemine sessioon on korras; sellele antakse lihtsalt pakette, mis enam ei mahu.
Kuhu tee MTU tegelikult kaob
Iga kapseldus kulutab baite enne, kui järgmine kiht saab järje. Etherneti tee pakub välimisele paketile 1500 baiti ja välimine tunnel võtab oma osa enne, kui midagi selle sees saab adresseerida. Üks oletatud üldkuluväärtus eksib täpselt nii palju, kui oluline on.
Loetle kihid järjekorras: juurdepääsutee, välimine transport, välimine tunnel, sisemine transport, sisemine tunnel, rakendus. Loenda iga päis üks kord ja hoia UDP tunnelil enda päisest ja sildist eraldi.
Kaks WireGuardi kihti, loetud üks kord
Võta IPv4 juurdepääsutee, mille sees on üks WireGuardi tunnel teise sees. Välimine kiht maksab 20 baiti IPv4, 8 UDP ja 32 WireGuardi andmepäise ning selle autentimissildi eest. Selle sees vajab sisemine tunnel oma 20-baidist IPv4 päist ja 8-baidist UDP päist enne oma teist 32 baiti WireGuardi üldkulu. Ülejäänu mahutab IPv4 päise, TCP päise ja andmed. Välimine IPv6 tee maksab 40, mitte 20, ja jätab 1320.
| Layer | Bytes |
|---|---|
| Path MTU | 1500 |
| Outer IPv4 header | 20 |
| Outer UDP header | 8 |
| Outer WireGuard header and tag | 32 |
| Inner transport IPv4 header | 20 |
| Inner UDP header | 8 |
| Inner WireGuard header and tag | 32 |
| Innermost IPv4 header | 20 |
| TCP header | 20 |
| Payload that fits | 1340 |
Aritmeetika jõuab 1340 baidini. Üks kiht samade reeglite järgi jätab TCP kasulikule koormusele 1400, mis on 1500 miinus 20, 8, 32, 20 ja 20, ning 60 baidi erinevus on täpselt see sisemine kapseldus, mille teine tunnel lisab.
Rakenda 1400 pesastatud teele ja sisemisel tunnelil jääb 60 baiti puudu, nähtamatult seni, kuni pakk on piisavalt suur, et neid vajada. Täiteaine ja protokolli enda killustamise valik liigutavad numbreid taas, seega usalda tabelit.
MTU, MSS ja killustamine toimivad eri kohtades
Liidese MTU piirab seda, mida liides välja saadab, samas kui TCP MSS klammerdamine muudab seda, mida TCP partner on valmis saatma. Klammerdamine parandab TCP sessioonid ja ei tee suure UDP datagrammi jaoks midagi, nii näeb parandus ühe rakenduse jaoks edukas välja ja möödub vaikselt järgmisest. Protokolli enda killustamise valik on kolmas hoob oma ebaõnnestumistega. Liidese MTU on tavaline esimene samm ja kõige jämedam.
Sillatud ja marsruuditud tunnelid kannavad erinevaid kaadreid, seega teise juurutuse numbrid kanduvad harva üle. Tee MTU avastamine, mida kirjeldatakse RFC 8201-s, aitab ainult seni, kuni selle sõltuvad ICMP sõnumid läbi lastakse.
Puuduva kihi leidmine
Kontrolli iga tunnelit eraldi enne nende pesastamist, kui nõuded lubavad võrdlust. Fikseeritud suurusega sond otsustab selle: ping -M do -s 1472 -c 3 10.8.0.1 saadab selle kihi sees täieliku 1500-baidise IPv4 paki. Lisa teine kiht ja korda sama sondi, et iga tõrge kuuluks teadaoleva muudatuse juurde.
Kui ülekanne takerdub, muuda korraga üht dokumenteeritud parameetrit ja märgi üles suurus, mille juures see ebaõnnestub. Kontrolli ka tagasiteed, sest pesastatud marsruudi rekursioon võib paketi suuruse probleemi piisavalt täpselt jäljendada, et maksta terve pärastlõuna. Filtreeritud ICMP vastus võib tegeliku piiri varjata, seega on sond mõttekäigust tähtsam.
Kirjuta eelarve sinna, kust järgmine inimene selle leiab
Tabel ühe reaga iga kihi kohta elab kauem kui rusikareegel. Hoia seda tunneliskeemi kõrval, et keegi ei teeks arvutusi surve all uuesti.
Rohkem tunneleid tähendab rohkem sõltuvusi, seega tagasipööramise plaan väärib kohta eelarve kõrval. Kui numbrid ikkagi ei klapi, mõõda teed, mitte ära arva uuesti. Eesmärk on arv, mida saad kaitsta, mitte meeles pidada.