WSL2 je izgubio DNS nakon povezivanja VPN-a? Dva uzroka
Zastarjela resolver datoteka i konkurentska metrika rute daju isti simptom unutar WSL2. Zabilježite obje strane, pa popravite onu koja je zaista pokvarena.
Ping po adresi radi unutar distribucije, instaliranje paketa i git preuzimanja ne, a kvar se pojavio odmah nakon podizanja tunela. Samo su imena prestala da se rješavaju, što upućuje na DNS, a ne na povezanost. Ponovna instalacija paketa najpopularniji je pogrešan prvi korak ovdje. WSL2 ima dva nezavisna načina da proizvede upravo taj simptom i oni traže različite popravke.
Zašto distribucija drži vlastiti resolver
Windows DNS klijent se ne koristi unutar distribucije. WSL2 pri pokretanju gradi vlastitu resolver datoteku, koja pokazuje na stub adresu koju Windows objavljuje na virtuelnom prekidaču za pomoćnu virtuelnu mašinu.
Taj raspored je stabilan kroz obične mrežne promjene jer se piše jednom i ponovo koristi. Raspored prestaje biti ispravan kada klijent tunela prepiše listu adaptera hosta nakon što je pomoćna virtuelna mašina već pokrenuta.
Ništa unutar distribucije ne prati tu promjenu, pa datoteka nastavlja pokazivati na adresu koje možda više nema na putu. Sljedeće traženje tada čeka, ističe se ili dobija odgovor od servera koji nikada nije čuo za internu zonu. Iznutra resolver jednostavno prestaje odgovarati i sva imena padaju odjednom.
Prvo prikupite dokaze s obje strane
Zabilježite šta vidi distribucija, pa šta vidi Windows, prije nego što bilo šta promijenite. Dva pogleda zajedno razlikuju načine kvara.
Unutar distribucije ispišite resolver datoteku, tabelu rutiranja i jedno interno i jedno javno traženje:
ip -4 route
cat /etc/resolv.conf
getent hosts intranet.corp.example
getent hosts example.comNa Windowsu navedite DNS servere po adapteru i IPv4 tabelu s metrikama. VPN klijent obično instalira rutu za WSL2 podmrežu, a njena metrika odlučuje hoće li taj saobraćaj izaći kroz tunel ili ostati lokalno.
Get-NetAdapter | Get-DnsClientServerAddress
route print -4
Metrika rute ili zastarjela datoteka
Prvi kvar je zastarjela datoteka. Resolver je napisan za stanje adaptera pri pokretanju, a tunel je to stanje promijenio. Njena stub adresa sada može biti nedostupna ili može imenovati server koji ne zna ništa o internoj zoni.
Drugi je problem rutiranja. Kada VPN doda rutu koja pokriva WSL2 podmrežu s metrikom nižom od rute linka hosta, paketi adresirani na pomoćnu virtuelnu mašinu ulaze u tunel. Tada ističe svaka WSL2 usluga, ne samo DNS.
Razlikovni test košta jednu liniju. Ako numerička adresa poput javnog resolvera još odgovara na ping dok imena padaju, put je netaknut i problem je DNS. To je slučaj u kojem je promjena resolvera opravdana, a slučaj u kojem nije takođe postaje očigledan. Ako i numerički test padne, pomoćna virtuelna mašina je izgubila rutu i nijedna resolver datoteka to neće popraviti.
Za slučaj rutiranja odbacite automatsku metriku na adapteru tunela i dajte joj broj iznad rute linka WSL2:
Get-NetAdapter | Where-Object InterfaceDescription -Match VPN | Set-NetIPInterface -InterfaceMetric 5500
wsl.exe --shutdown
Gašenje je važno. Promjena metrike ne prepisuje pokrenutu pomoćnu virtuelnu mašinu, pa se distribucija mora ponovo izgraditi prije nego promjena postane vidljiva.
Preuzmite datoteku, namjerno
Ako je rutiranje ispravno i padaju samo interna imena, resolver je kriv i možete zaustaviti generator. To je namjerna promjena s troškom održavanja, a ne zaobilazno rješenje koje se primjenjuje usput.
Napravite /etc/wsl.conf unutar distribucije s mrežnom sekcijom koja isključuje generisanje, pa sami napišite resolver datoteku, korporativni server prvi i javni rezervni drugi:
[network]
generateResolvConf = falsesearch corp.example
nameserver 10.88.4.53
nameserver 9.9.9.9
Redoslijed je važan. Javni resolver ne može odgovoriti na interno ime, a rezerva postoji samo za internetska traženja. Kad datoteka postane vaša, ništa je ne regeneriše, pa korporativni resolver koji se preseli postaje prekid koji sami morate primijetiti.
Provjerite imena, pa pakete
Provjerite jedno interno i jedno javno ime sistemskim resolverom, pa ponovite radnju koja je pala. Menadžeri paketa ponekad koriste vlastiti resolver, zato radni getent može postojati uz pokvarenu instalaciju.
Ako automatizujete prepisivanje, učinite ga idempotentnim: bez tunela zadržite datoteku koja već postoji umjesto da napišete praznu listu servera.
getent hosts intranet.corp.example
resolvectl status | head -20
getent hosts example.com
Radno interno traženje i radno javno traženje, iznutra iz distribucije, rezultat je koji vrijedi zabilježiti. Zelena VPN ikona na hostu ne dokazuje nijedno.