WSL2 stratil DNS po pripojení VPN? Dve príčiny
Zastaraný súbor resolveru a konkurenčná metrika trasy dávajú v WSL2 rovnaký príznak. Zaznamenajte obe strany a potom opravte tú, ktorá je naozaj pokazená.
Ping podľa adresy funguje v distribúcii, inštalácie balíkov a sťahovanie git nie, a porucha sa objavila hneď po zdvihnutí tunela. Prestali sa prekladať iba názvy, čo ukazuje na DNS, nie na konektivitu. Preinštalovanie balíkov je tu najpopulárnejší nesprávny prvý krok. WSL2 má dva nezávislé spôsoby, ako vyvolať presne tento príznak, a vyžadujú odlišné opravy.
Prečo si distribúcia drží vlastný resolver
Klient DNS z Windows sa v distribúcii nepoužíva. WSL2 pri štarte zostaví vlastný súbor resolveru, ktorý ukazuje na stub adresu, ktorú Windows zverejňuje na virtuálnom prepínači pre pomocný virtuálny počítač.
Toto usporiadanie je pri bežných sieťových zmenách stabilné, pretože sa zapisuje raz a znova sa používa. Usporiadanie prestáva byť správne, keď klient tunela prepíše zoznam adaptérov hostiteľa po tom, čo pomocný virtuálny počítač už beží.
Nič v distribúcii zmenu nesleduje, takže súbor ďalej ukazuje na adresu, ktorá už nemusí byť na ceste. Ďalší dotaz potom čaká, vyprší alebo dostane odpoveď od servera, ktorý o internej zóne nikdy nepočul. Zvnútra resolver jednoducho prestane odpovedať a všetky názvy zlyhajú naraz.
Najprv zozbierajte dôkazy na oboch stranách
Zaznamenajte, čo vidí distribúcia, a potom čo vidí Windows, skôr než čokoľvek zmeníte. Práve oba pohľady spolu rozlišujú režimy poruchy.
V distribúcii vypíšte súbor resolveru, smerovaciu tabuľku a jeden interný a jeden verejný dotaz:
ip -4 route
cat /etc/resolv.conf
getent hosts intranet.corp.example
getent hosts example.comVo Windows vypíšte servery DNS podľa adaptéra a tabuľku IPv4 s metrikami. Klient VPN zvyčajne nainštaluje trasu pre podsiete WSL2 a jej metrika rozhoduje, či tento prenos odíde tunelom alebo zostane lokálny.
Get-NetAdapter | Get-DnsClientServerAddress
route print -4
Metrika trasy alebo zastaraný súbor
Prvá porucha je zastaraný súbor. Resolver bol napísaný pre stav adaptéra pri štarte a tunel ten stav zmenil. Jeho stub adresa môže byť teraz nedostupná alebo môže označovať server, ktorý o internej zóne nič nevie.
Druhá je problém smerovania. Keď VPN pridá trasu pokrývajúcu podsiete WSL2 s metrikou nižšou ako trasa prepojenia hostiteľa, pakety adresované pomocnému virtuálnemu počítaču vstúpia do tunela. Potom vyprší každá služba WSL2, nielen DNS.
Rozlišovací test stojí jeden riadok. Ak číselná adresa, napríklad verejný resolver, stále odpovedá na ping, kým názvy zlyhávajú, cesta je neporušená a problém je v DNS. To je prípad, keď je zmena resolveru opodstatnená, a prípad, keď nie je, sa tiež vyjasní. Ak zlyhá aj číselný test, pomocný virtuálny počítač stratil trasu a žiadny súbor resolveru to nespraví.
Pre prípad smerovania odstráňte automatickú metriku z adaptéra tunela a dajte mu číslo nad trasou prepojenia WSL2:
Get-NetAdapter | Where-Object InterfaceDescription -Match VPN | Set-NetIPInterface -InterfaceMetric 5500
wsl.exe --shutdown
Vypnutie je dôležité. Zmena metriky neprepíše bežiaci pomocný virtuálny počítač, takže distribúciu treba pred zviditeľnením zmeny znova zostaviť.
Prevezmite súbor, vedome
Ak je smerovanie správne a zlyhávajú len interné názvy, na vine je resolver a generátor môžete zastaviť. To je vedomá zmena s nákladmi na údržbu, nie obchádzka na ledabolo použitie.
Vytvorte /etc/wsl.conf v distribúcii so sieťovou sekciou, ktorá vypne generovanie, a potom súbor resolveru napíšte sami, firemný server prvý a verejnú zálohu druhú:
[network]
generateResolvConf = falsesearch corp.example
nameserver 10.88.4.53
nameserver 9.9.9.9
Poradie je dôležité. Verejný resolver neodpovie na interný názov a záloha existuje len pre internetové dotazy. Keď je súbor váš, nič ho znova nevygeneruje, takže firemný resolver, ktorý sa presťahuje, sa stane výpadkom, ktorý si musíte všimnúť sami.
Skontrolujte názvy, potom balíky
Overte jeden interný a jeden verejný názov systémovým resolverom a potom zopakujte operáciu, ktorá zlyhala. Správcovia balíkov niekedy používajú vlastný resolver, preto môže funkčný getent existovať vedľa pokazenej inštalácie.
Ak prepis automatizujete, urobte ho idempotentným: bez tunela ponechajte existujúci súbor namiesto zápisu prázdneho zoznamu serverov.
getent hosts intranet.corp.example
resolvectl status | head -20
getent hosts example.com
Funkčný interný dotaz a funkčný verejný dotaz zvnútra distribúcie je výsledok, ktorý stojí za záznam. Zelená ikona VPN na hostiteľovi nedokazuje ani jedno.