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.com

Vo 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 = false
search 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.

Súvisiace články