WSL2 pazaudēja DNS pēc VPN pievienošanas? Divi iemesli
Novecojusi resolver faila kopija un konkurējoša maršruta metrika rada to pašu simptomu WSL2 iekšienē. Reģistrējiet abas puses un pēc tam salabojiet to, kas patiešām ir bojāts.
Ping pēc adreses darbojas distribūcijas iekšienē, pakotņu instalēšana un git lejupielādes nedarbojas, un kļūme parādījās tūlīt pēc tuneļa pacelšanas. Tikai vārdi pārstāja risināties, kas norāda uz DNS, nevis uz savienojumu. Pakešu pārinstalēšana šeit ir populārākais nepareizais pirmais solis. WSL2 ir divi neatkarīgi veidi, kā radīt tieši šo simptomu, un tiem vajadzīgs atšķirīgs remonts.
Kāpēc distribūcija tur savu resolver
Windows DNS klients netiek izmantots distribūcijas iekšienē. WSL2 startēšanas laikā izveido savu resolver failu, kas norāda uz stub adresi, ko Windows publicē virtuālajā komutatorā palīgvirtuālajai mašīnai.
Šis izkārtojums ir stabils parastās tīkla izmaiņās, jo tas tiek rakstīts vienreiz un izmantots atkārtoti. Izkārtojums pārstāj būt pareizs, kad tuneļa klients pārraksta resursdatora adapteru sarakstu pēc tam, kad palīgvirtuālā mašīna jau ir palaista.
Nekas distribūcijas iekšienē neuzrauga šīs izmaiņas, tāpēc fails turpina norādīt uz adresi, kas, iespējams, vairs nav ceļā. Nākamais vaicājums tad gaida, beidzas ar taimautu vai saņem atbildi no servera, kas nekad nav dzirdējis par iekšējo zonu. No iekšpuses resolver vienkārši pārstāj atbildēt, un visi vārdi neizdodas vienlaikus.
Vispirms savāciet pierādījumus abās pusēs
Reģistrējiet, ko redz distribūcija, un pēc tam, ko redz Windows, pirms jebkuru no tiem maināt. Tieši abi skati kopā atšķir kļūmes veidus.
Distribūcijas iekšienē izdrukājiet resolver failu, maršrutēšanas tabulu un vienu iekšēju un vienu publisku vaicājumu:
ip -4 route
cat /etc/resolv.conf
getent hosts intranet.corp.example
getent hosts example.comWindows vidē uzskaitiet DNS serverus pa adapteriem un IPv4 tabulu ar metrikām. VPN klients parasti instalē maršrutu WSL2 apakštīklam, un tā metrika nosaka, vai šī plūsma izies caur tuneli vai paliks lokāla.
Get-NetAdapter | Get-DnsClientServerAddress
route print -4
Maršruta metrika vai novecojis fails
Pirmā kļūme ir novecojis fails. Resolver tika rakstīts starta brīža adaptera stāvoklim, un tunelis šo stāvokli mainīja. Tā stub adrese tagad var būt nesasniedzama, vai tā nosauc serveri, kas neko nezina par iekšējo zonu.
Otrā ir maršrutēšanas problēma. Kad VPN pievieno maršrutu, kas aptver WSL2 apakštīklu, ar metriku zemāku par resursdatora saites maršrutu, paketes, kas adresētas palīgvirtuālajai mašīnai, nonāk tunelī. Tad taimauts iestājas katrai WSL2 pakalpojumam, ne tikai DNS.
Atšķirošais tests izmaksā vienu rindu. Ja ciparu adrese, piemēram, publisks resolver, joprojām atbild uz ping, kamēr vārdi neizdodas, ceļš ir vesels un problēma ir DNS. Šis ir gadījums, kad resolver maiņa ir pamatota, un gadījums, kad tā nav, arī kļūst acīmredzams. Ja arī ciparu tests neizdodas, palīgvirtuālā mašīna ir zaudējusi savu maršrutu, un neviens resolver fails to nesalabos.
Maršrutēšanas gadījumā noņemiet automātisko metriku tuneļa adapterim un piešķiriet tam skaitli virs WSL2 saites maršruta:
Get-NetAdapter | Where-Object InterfaceDescription -Match VPN | Set-NetIPInterface -InterfaceMetric 5500
wsl.exe --shutdown
Izslēgšana ir svarīga. Metrikas maiņa nepārraksta darbojošos palīgvirtuālo mašīnu, tāpēc distribūcija ir jāpārbūvē, pirms izmaiņas kļūst redzamas.
Pārņemiet failu, apzināti
Ja maršrutēšana ir pareiza un neizdodas tikai iekšējie vārdi, vainīgs ir resolver, un jūs varat apturēt ģeneratoru. Tās ir apzinātas izmaiņas ar uzturēšanas izmaksām, nevis apvedceļš, ko piemēro vieglprātīgi.
Distribūcijas iekšienē izveidojiet /etc/wsl.conf ar tīkla sadaļu, kas izslēdz ģenerēšanu, un pēc tam paši ierakstiet resolver failu, vispirms uzņēmuma serveris un pēc tam publisks rezerves variants:
[network]
generateResolvConf = falsesearch corp.example
nameserver 10.88.4.53
nameserver 9.9.9.9
Secība ir svarīga. Publisks resolver nevar atbildēt uz iekšēju vārdu, un rezerve pastāv tikai interneta vaicājumiem. Kad fails pieder jums, nekas to neģenerē no jauna, tāpēc pārvietojošs uzņēmuma resolver kļūst par pārtraukumu, kas jums pašiem jāpamana.
Pārbaudiet vārdus, tad pakotnes
Pārbaudiet vienu iekšēju un vienu publisku vārdu ar sistēmas resolveru, un pēc tam atkārtojiet darbību, kas neizdevās. Pakešu pārvaldnieki dažkārt izmanto savu resolveru, tāpēc strādājošs getent var pastāvēt līdzās bojātai instalācijai.
Ja automatizējat pārrakstīšanu, padariet to idempotentu: bez tuneļa saglabājiet jau esošo failu, nevis rakstiet tukšu serveru sarakstu.
getent hosts intranet.corp.example
resolvectl status | head -20
getent hosts example.com
Strādājošs iekšējs vaicājums un strādājošs publisks vaicājums no distribūcijas iekšpuses ir rezultāts, ko ir vērts reģistrēt. Zaļa VPN ikona uz resursdatora nepierāda ne vienu, ne otru.