Ping по адреси ради унутар дистрибуције, инсталације пакета и git преузимања не, а квар се појавио одмах након подизања тунела. Само су имена престала да се разрешавају, што упућује на DNS, а не на повезаност. Поновна инсталација пакета је најпопуларнији погрешан први корак овде. WSL2 има два независна начина да произведе тачно тај симптом и они траже различите поправке.

Зашто дистрибуција држи сопствени resolver

DNS клијент из Windows-а се не користи унутар дистрибуције. WSL2 при покретању гради сопствени resolver фајл, који показује на stub адресу коју Windows објављује на виртуелном прекидачу за помоћну виртуелну машину.

Тај распоред је стабилан при обичним мрежним променама јер се пише једном и поново користи. Распоред престаје да буде тачан када клијент тунела препише листу адаптера домаћина након што је помоћна виртуелна машина већ покренута.

Ништа унутар дистрибуције не прати ту промену, па фајл наставља да показује на адресу које можда више нема на путу. Следећа претрага тада чека, истиче или добија одговор од сервера који никада није чуо за интерну зону. Изнутра resolver једноставно престаје да одговара, и сва имена падају одједном.

Прво прикупите доказе са обе стране

Забележите шта види дистрибуција, а затим шта види Windows, пре него што било шта промените. Управо два погледа заједно разликују начине квара.

Унутар дистрибуције испишите resolver фајл, табелу рутирања и једну интерну и једну јавну претрагу:

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

На Windows-у наведите DNS сервере по адаптеру и табелу IPv4 са метрикама. VPN клијент обично инсталира руту за подмрежу WSL2, а њена метрика одлучује да ли тај саобраћај излази кроз тунел или остаје локалан.

Get-NetAdapter | Get-DnsClientServerAddress
route print -4

Метрика руте или застарео фајл

Први квар је застарео фајл. Resolver је написан за стање адаптера при покретању, а тунел је то стање променио. Његова stub адреса сада може бити недоступна или може именовати сервер који не зна ништа о интерној зони.

Други је проблем рутирања. Када VPN дода руту која покрива подмрежу WSL2 са метриком нижом од руте везе домаћина, пакети адресирани ка помоћној виртуелној машини улазе у тунел. Тада истиче свака WSL2 услуга, не само DNS.

Разликујући тест кошта једну линију. Ако нумеричка адреса као јавни resolver још одговара на ping док имена падају, пут је неповређен и проблем је DNS. То је случај у ком је промена resolver-а оправдана, а случај у ком није такође постаје очигледан. Ако и нумерички тест падне, помоћна виртуелна машина је изгубила руту и ниједан resolver фајл то неће поправити.

За случај рутирања уклоните аутоматску метрику са адаптера тунела и дајте му број изнад руте везе WSL2:

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

Искључивање је важно. Промена метрике не преписује помоћну виртуелну машину која ради, па се дистрибуција мора поново изградити пре него што промена постане видљива.

Преузмите фајл, свесно

Ако је рутирање исправно и падају само интерна имена, resolver је крив и можете зауставити генератор. То је свесна промена са трошком одржавања, а не заобилазно решење које се примењује нехајно.

Направите /etc/wsl.conf унутар дистрибуције са мрежним одељком који искључује генерисање, затим сами напишите resolver фајл, прво корпоративни сервер и потом јавни резервни:

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

Редослед је важан. Јавни resolver не може да одговори на интерно име, а резерва постоји само за интернет претраге. Када фајл постане ваш, ништа га не регенерише, па корпоративни resolver који се пресели постаје прекид који сами морате приметити.

Проверите имена, затим пакете

Проверите једно интерно и једно јавно име системским resolver-ом, затим поновите операцију која је пала. Менаџери пакета понекад користе сопствени resolver, зато радни getent може постојати поред покварене инсталације.

Ако аутоматизујете преписивање, учините га идемпотентним: без тунела задржите постојећи фајл уместо да пишете празну листу сервера.

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

Радна интерна претрага и радна јавна претрага, изнутра из дистрибуције, резултат је који вреди забележити. Зелена VPN икона на домаћину не доказује ниједну од њих.

Повезани чланци