A ping cím alapján működik a disztribúción belül, a csomagtelepítések és a git-lehúzások nem, és a hiba közvetlenül az alagút felállása után jelentkezett. Csak a nevek feloldása állt le, ami a DNS-re utal, nem a kapcsolatra. A csomagok újratelepítése itt a legnépszerűbb rossz első lépés. A WSL2-nek két független módja van pontosan ennek a tünetnek az előidézésére, és ezek különböző javítást igényelnek.

Miért tart saját resolver-t a disztribúció

A Windows DNS-kliense nem használatos a disztribúción belül. A WSL2 indításkor saját resolver-fájlt épít, amely egy stub-címre mutat, amelyet a Windows a virtuális kapcsolón közzétesz a segéd virtuális gép számára.

Ez az elrendezés szokásos hálózati változásoknál stabil, mert egyszer íródik és újra felhasználják. Az elrendezés akkor szűnik meg helyes lenni, amikor egy alagút-kliens újraírja a gazdagép adapterlistáját, miután a segéd virtuális gép már elindult.

A disztribúción belül semmi nem figyeli a változást, ezért a fájl továbbra is egy olyan címre mutat, amely talán már nincs az útvonalon. A következő feloldás ekkor vár, időtúllépést kap, vagy olyan kiszolgálótól kap választ, amely soha nem hallott a belső zónáról. Belülről a resolver egyszerűen abbahagyja a válaszadást, és minden név egyszerre hibázik.

Először gyűjtsön bizonyítékot mindkét oldalon

Rögzítse, mit lát a disztribúció, majd hogy mit lát a Windows, mielőtt bármelyiket módosítaná. A két nézet együtt az, ami megkülönbözteti a hiba módjait.

A disztribúción belül nyomtassa ki a resolver-fájlt, az útvonaltáblázatot, valamint egy belső és egy nyilvános feloldást:

ip -4 route
cat /etc/resolv.conf
getent hosts intranet.corp.example
getent hosts example.com

Windowson listázza az adapterenkénti DNS-kiszolgálókat és az IPv4-táblázatot a metrikákkal. Egy VPN-kliens általában útvonalat telepít a WSL2 alhálózatához, és annak metrikája dönti el, hogy ez a forgalom az alagúton keresztül távozik-e vagy helyi marad.

Get-NetAdapter | Get-DnsClientServerAddress
route print -4

Útvonal-metrika vagy elavult fájl

Az első hiba az elavult fájl. A resolver az indításkori adapterállapothoz íródott, és az alagút megváltoztatta ezt az állapotot. A stub-címe most elérhetetlen lehet, vagy olyan kiszolgálót nevez meg, amely semmit nem tud a belső zónáról.

A második útvonalazási probléma. Amikor a VPN olyan útvonalat ad hozzá, amely lefedi a WSL2 alhálózatát, a gazdagép link-útvonalánál alacsonyabb metrikával, a segéd virtuális gépnek címzett csomagok belépnek az alagútba. Ekkor minden WSL2-szolgáltatás időtúllépést kap, nem csak a DNS.

A megkülönböztető teszt egy sort igényel. Ha egy numerikus cím, például egy nyilvános resolver, továbbra is válaszol pingre, miközben a nevek meghiúsulnak, az útvonal ép, és a probléma a DNS. Ez az az eset, amikor a resolver módosítása indokolt, és az az eset is nyilvánvalóvá válik, amikor nem az. Ha a numerikus teszt is meghiúsul, a segéd virtuális gép elvesztette az útvonalát, és egyetlen resolver-fájl sem fogja ezt rendbe hozni.

Az útvonalazási esethez távolítsa el az automatikus metrikát az alagút adapteréről, és adjon neki a WSL2 link-útvonala fölé eső számot:

Get-NetAdapter | Where-Object InterfaceDescription -Match VPN | Set-NetIPInterface -InterfaceMetric 5500
wsl.exe --shutdown

A leállítás számít. A metrika módosítása nem írja újra a futó segéd virtuális gépet, ezért a disztribúciót újra kell építeni, mielőtt a változás láthatóvá válik.

Vegye át a fájlt, szándékosan

Ha az útvonalazás helyes, és csak a belső nevek hibáznak, a resolver a hibás, és leállíthatja a generátort. Ez szándékos változás karbantartási költséggel, nem sután alkalmazandó kerülő megoldás.

Hozza létre a /etc/wsl.conf fájlt a disztribúción belül a generálást kikapcsoló hálózati szakasszal, majd írja meg maga a resolver-fájlt, először a vállalati kiszolgálóval, majd egy nyilvános tartalékkal:

[network]
generateResolvConf = false
search corp.example
nameserver 10.88.4.53
nameserver 9.9.9.9

A sorrend számít. Egy nyilvános resolver nem tud belső nevet megválaszolni, és a tartalék csak internetes feloldásokhoz létezik. Amint a fájl az Öné, semmi nem generálja újra, így egy átköltöző vállalati resolver olyan kieséssé válik, amelyet Önnek magának kell észrevennie.

Ellenőrizze a neveket, aztán a csomagokat

Ellenőrizzen egy belső és egy nyilvános nevet a rendszer resolver-ével, majd ismételje meg a meghiúsult műveletet. A csomagkezelők néha saját resolver-t használnak, ezért létezhet működő getent egy törött telepítés mellett.

Ha automatizálja az újraírást, tegye idempotenssé: alagút nélkül tartsa meg a meglévő fájlt ahelyett, hogy üres kiszolgálólistát írna.

getent hosts intranet.corp.example
resolvectl status | head -20
getent hosts example.com

Egy működő belső és egy működő nyilvános feloldás, a disztribúción belülről, az az eredmény, amelyet érdemes rögzíteni. A gazdagépen látható zöld VPN-ikon egyiket sem bizonyítja.

Kapcsolódó cikkek