WSL2 Git takerdub VPN-i taga: liidese MTU või tee?
Git autendib ja jääb siis WSL2 sees rippuma? Võrrelge Linuxi liidest Windowsi VPN-adapteriga, katsetage üht väiksemat väärtust ja planeerige selle eluiga.
Kloon autendib, objektide arv ilmub ja siis ei liigu midagi minutite jooksul. Windows teatab VPN-i ühendatuks, hostinimi laheneb ja samas masinas olev brauser toob sama hoidla lehe raskusteta. See kombinatsioon viitab paketi suurusele, mitte mandaatidele, ja suuruse küsimus tuleb esitada kahes kohas, sest WSL2-l on oma Linuxi liides oma MTU-ga. Üks number kuulub tee Windowsi poolele, teine distributsioonile, ja ainult VPN-adapteri lugemine jätab pool teed uurimata.
Kolm signaali eristavad suurusprobleemi muust
Esimene signaal on kuju: ühenduse loomine ja väike vahetus õnnestuvad, seejärel lakkab hulgisiire edenemast. Teine on sümmeetria: sama hoidla ja sama transport ebaõnnestuvad, samas kui teine host samal teel töötab, või tõrge muutub koormuse suurusega, mitte kellaajaga. Kolmas on vaikus: ühtki autentimistõrget, ühtki puhverserveri keeldumist, ühtki nimelahenduse tõrget, ainult siire, mis kunagi ei lõpe.
Need kolm koos õigustavad paketi suuruse hüpoteesi. DNS-i tõrge, aegunud luba, tagasi lükatud SSH-võti ja CONNECT-i keelduv puhverserver tekitavad igaüks oma vea ning ükski neist ei näe välja nagu seiskumine pärast õnnestumist. Sama hoidla, transpordi ja ajaakna hoidmine testimise ajal on see, mis teeb võrdluse ausaks.
Võrrelge mõlemat liidest enne otsustamist
Koguge Windowsi vaade ja Linuxi vaade samas sessioonis ning hoidke hoidla aadressi, mitte oletust, milline liides seda kannab. Allolev käsk lahendab esmalt sihtkoha, et marsruudiotsing kirjeldaks tegelikku serverit, millega kloon ühendust võtab, mis võib erineda brauseri näidatud nimest. Käivitage mõlemad pooled üksteisele lähedal, sest VPN võib katsete vahel liidese mõõdikuid muuta.
netsh interface ipv4 show subinterfaces
wsl -d Ubuntu -- bash -lc 'dest=$(getent ahostsv4 github.com | awk \'NR==1{print $1}\'); ip -br link show; ip route get "$dest"'
Käivitage Linuxi pool distributsiooni sees, mitte kleepige väljundit Windowsi kesta, sest liidesenimed ja marsruudivalik on mõistlikud ainult seal. Windowsi kestast kleebitud väljund teatab valed numbrid suure enesekindlusega. Märkige seade, valitud marsruut ja MTU mõlemalt poolt enne, kui midagi muudate.
Otsustage, kas number peaks olema väiksem
Suurem liidese MTU, kui tee suudab kanda, ei ole automaatselt viga, sest tee MTU avastamine on loodud just selleks. Tõrerežiim ilmub siis, kui avastamine on maha surutud: ICMP-teateid filtreeritakse kusagil teel, saatja ei saa piirist kunagi teada ja suured paketid kaovad, samal ajal kui väikesed lähevad läbi. See on tee omadus, mitte Giti omadus. See on ka põhjus, miks väike fail võib õnnestuda ühendusel, kus suur ei lõpe kunagi.
Kui tõendid seda toetavad, on ajutine muudatus Linuxi liidesel odavaim katse. Valige väärtus alla kasutatava tee suuruse, märkige eelmine ja hoidke kõik muu muutumatuna, et võrdlus midagi tähendaks. Kui siire lõpeb väiksema väärtusega, on teil diagnoos, mitte juhus.
ip -br link show dev eth0
sudo ip link set dev eth0 mtu 1380
ip -br link show dev eth0
Otsustage, kus seade peaks elama
Katsest tuleneb kolm valikut ja tavaliselt on sobiv ainult üks neist. Kui väiksem väärtus parandab siirde ja väärtus on selle võrgu jaoks tõesti vajalik, vajab seade elutsükli omanikku: käivituskonks distributsioonis, platvormi hallatav võrgukonfiguratsioon või dokumenteeritud protseduur. Kui väärtus ei paranda midagi, võtke see tagasi ja pöörduge tagasi transpordi, puhverserveri ja autentimise küsimuste juurde.
Kas käivituskonks on olemas, sõltub kasutatavatest Windowsi ja WSL-i versioonidest ning seadistatud võrgurežiimist. Windowsi võrgu peegeldamine võib muuta seda, kuidas VPN distributsiooniga suhestub, viisil, mis loeb rohkem kui MTU kohandamine, seega tuvastage režiim enne, kui selle jaoks möödasõidu kavandate. Ühele operaatorile või ühele VPN-profiilile sobiv väärtus ei ole järgmise jaoks vaikeväärtus.
Mida vältida, on ahvatlev paigutus: privilegeeritud võrgukäsk iga interaktiivse kesta käivitusfailis või paroolita sudo kogu ip binaarile, et skript saaks ühe rea käivitada. Mõlemad muudavad diagnoosi püsivaks paljastuseks ja teevad algse probleemi hiljem raskemini nähtavaks.
Kontrollige pärast värsket käivitust ja pöörake siis tagasi
Muudatus, mis püsib ainult kuni distributsiooni taaskäivituseni, ei ole parandus. Taaskäivitage distributsioon, ühendage VPN uuesti ja korrake algset Giti toimingut, mitte asendajat nagu ping või väike HTTP-päring. Seejärel kinnitage, et liides kannab uues sessioonis kavandatud väärtust.
ip -br link show dev eth0
ip route get "$(getent ahostsv4 github.com | awk 'NR==1{print $1}')"
Hoidke märgitud algväärtust muudatuse kõrval, et katse saaks puhtalt tagasi pöörata, ja märkige, millist aadressiperekonda testiti, sest IPv4 tulemus ei ütle midagi IPv6 ühenduse kohta samas hostis. WSL-i võrgudokumentatsioon kirjeldab režiime, mis määravad, milline parandus peaks välja nägema; MTU number ise on kohalik mõõtmine, mitte soovitus.