resolv.conf a WSL 2: el DNS mor quan es connecta la VPN
WSL regenera resolv.conf a partir dels adaptadors de Windows que veu, així que el resolutor de la VPN pot no arribar mai. Atura la generació i després prova un nom corporatiu.
Navegar dins de la distribució funciona, i el primer nom d’amfitrió intern falla en el moment que aixeca el túnel. El reflex és afegir un resolutor públic, que restaura internet i fa que el nom corporatiu sigui inabastable la resta del dia. A WSL 2, /etc/resolv.conf és una sortida generada i no una configuració, i aquest és el mecanisme que val la pena entendre. La solució no és un resolutor millor, sinó la propietat del fitxer.
El fitxer es genera, no es configura
WSL 2 escriu el fitxer en arrencar a partir dels adaptadors de Windows que veu en aquell moment, i imprimeix un comentari a dalt que ho diu. Quan un client de VPN afegeix o reescriu un adaptador després, la distribució no necessàriament regenera res, i el fitxer continua descrivint una xarxa que ja no existeix.
Un segon mode de fallada és més silenciós: WSL pot copiar servidors només d’alguns adaptadors. Si l’adaptador físic ja té un resolutor IPv6, els servidors IPv4 que proporciona l’adaptador de la VPN es poden descartar en lloc d’afegir-se, i el fitxer sembla complet mentre omet justament el que respon als noms interns.
Compareu la vista de Windows amb la vista de Linux
Llegeix les dues bandes abans d’editar. Dins de la distribució, mira què conté el fitxer i si és un fitxer normal o un enllaç. A Windows, llista el resolutor de cada adaptador, inclòs el que ha creat la VPN:
ls -l /etc/resolv.conf
cat /etc/resolv.conf
Get-DnsClientServerAddress -AddressFamily IPv4
Get-NetAdapter | Where-Object Status -eq 'Up'
Quan l’adaptador de la VPN mostra els servidors corporatius i Linux mostra una altra cosa, la discrepància és en la generació i no en l’abast. Compareu la llista d’adaptadors així com les adreces, perquè un adaptador absent explica un servidor absent. Aquesta distinció decideix si repareu WSL o un tallafoc, i les dues coses no tenen res en comú.
Desactiveu la generació i escriviu el vostre fitxer
Un paràmetre documentat impedeix que WSL reescrigui el fitxer, i es troba a /etc/wsl.conf. Afegiu una secció de xarxa a aquest fitxer:
[network]
generateResolvConf = false
Després atureu la distribució des de Windows amb wsl --shutdown i torneu-la a iniciar. Si el camí és un enllaç simbòlic i no un fitxer normal, suprimiu l’enllaç abans d’escriure el vostre contingut, perquè escriure a través de l’enllaç pot recrear l’objectiu generat en el proper arrencada. Des d’aquell moment el fitxer és vostre i res no el reescriu.
nameserver 172.28.4.10
nameserver 172.28.4.11
search site.corp.example
options timeout:1 attempts:2 rotate
Sense un domini de cerca, un nom d’amfitrió no qualificat es completa amb l’arrel pública i torna com a cap domini d’aquest tipus. timeout evita que un primer servidor mort bloquegi cada consulta, attempts limita quants intents gasta una consulta, i rotate reparteix els reintents en lloc de començar sempre pel primer. L’intercanvi és que el fitxer ja no segueix una VPN l’adreça de resolutor de la qual canvia entre sessions.
Gestiona un resolutor que es mou i després verifica
Alguns clients donen un resolutor específic de la sessió, així que un fitxer estàtic es trenca en la propera connexió. Dues estratègies són defensables. Escriviu el fitxer des d’un script petit sempre que l’adreça canviï, o deixeu la generació activada i assegureu-vos que l’adaptador del qual copia WSL porti el servidor corporatiu. La segona no necessita cap ganxo i falla quan la generació omet l’adaptador de la VPN; totes dues encara requereixen resoldre primer el conflicte d’IPv6.
Windows també aplica les seves pròpies polítiques de noms, com una llista de cerca de sufixos o una política de resolució per a dominis concrets, i copiar les adreces dels adaptadors no reprodueix aquestes regles. Si un nom es resol a Windows i no a la distribució amb el mateix servidor, compareu el tractament dels sufixos abans de culpar el túnel.
Proveu amb un nom i no amb un paquet: getent hosts sensor-access0.corp.example passa per la pila de resolutors, mentre que un ping pot tenir èxit contra una adreça emmagatzemada o literal. Després repetiu-ho després de desconnectar i tornar a connectar, perquè un paràmetre que funciona un cop i es regenera en reprendre mai no s’havia arreglat. Deseu el contingut anterior i anoteu quin component és propietari del camí en aquesta màquina, perquè el proper canvi comenci amb proves.