A WSL2 elvesztette a DNS-t a VPN csatlakozása után? Két ok
Egy elavult resolver-fájl és egy versengő útvonal-metrika ugyanazt a tünetet okozza a WSL2-ben. Rögzítse mindkét oldalt, majd javítsa meg azt, amelyik valóban hibás.
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.comWindowson 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 = falsesearch 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.