¿Cómo cambio la configuración de DNS para WSL2?

¿Cómo cambio la configuración de DNS para WSL2?

Hasta donde he podido averiguar, el proceso oficial para cambiar qué servidor DNS utiliza WSL2 en Windows 10 se detalla a continuación. (WSL2 es la nueva versión del subsistema de Windows para Linux, que ejecuta un kernel de Linux real en una máquina virtual liviana en Windows 10).

Sin embargo, este proceso no funciona para mí: termino con un sistema que simplemente se agota y no puede resolver ninguna dirección.

¿Qué estoy haciendo mal?

Aquí está el proceso tal como lo he armado hasta ahora:

1. Apague la generación de/etc/resolv.conf

Usando el indicador de Linux (estoy usando Ubuntu), modifique (o cree) /etc/wsl.conf con el siguiente contenido

[network]
generateResolvConf = false

(Aparentemente hay un error en la versión actual por el cual cualquier espacio en blanco al final de estas líneas hará que todo se estropee).

2. Reinicie la máquina virtual WSL2

Salga de todas las indicaciones de Linux y ejecute el siguiente comando de Powershell

wsl --shutdown

3. Crea una personalizada/etc/resolv.conf

Abra un nuevo mensaje de Linux y cd para/etc

Si resolv.conftiene un vínculo suave a otro archivo, elimine el vínculo con

rm resolv.conf

Crea un nuevo resolv.confcon el siguiente contenido.

nameserver 1.1.1.1

4. Reinicie la máquina virtual WSL2

Igual que el paso #2

5. Inicie un nuevo mensaje de Linux.

¡Ganancia!

Actualización 18 de marzo de 2020

Mi /etc/hostsarchivo contiene esto:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       [redacted]  bearps-desktop

10.168.244.140  host.docker.internal
10.168.244.140  gateway.docker.internal
127.0.0.1       kubernetes.docker.internal

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

El archivo /etc/switch.confno existe.

La herramienta resolvectlno está en mi camino; no existe en /usr/bin/resolvectl.

Asimismo systemd-resolveno está en mi camino; no existe en /usr/bin/systemd-resolve.

Respuesta1

El proceso que documenté arriba es correcto: estoescómo se cambia la configuración de DNS en WSL2.

Mi error fue utilizar los conocidos servidores DNS públicos para CloudFlare (1.1.1.1) y Google (8.8.8.8 y 8.8.4.4) con fines de prueba. Resulta que mi red local me impide usar DNS público.

Cuando probé el proceso anterior con la dirección IP interna correcta del servidor DNS, todo funcionó correctamente.

Respuesta2

Agregando a otras respuestas aquí ustedtambiénQuiero establecer resolv.confinmutable.

sudo chattr +i /etc/resolv.conf

En mi caso, se eliminaba en cada arranque, incluso con wsl.conf.

Por esa razón, creé este pequeño programa que automatiza todo con un solo shell:

https://github.com/epomatti/wsl2-dns-fix-config

Respuesta3

Tuve que hacer esto desde casa (coronavirus) y finalmente terminé escribiendo un script de solicitud de administrador de Powershell para iniciar mi distribución (debian). También tenga en cuenta que esto inicia la distribución predeterminada especificada por WSL; deberá cambiar la última línea si ese no es el caso. Busque \\wsl$\[distro name]si el suyo no también se llama Debian, simplemente escriba la primera parte en una ruta del Explorador de Windows para llegar a WSL2, es decir, en la barra superior del explorador ingrese \\wsl$\y listará sus distribuciones.

Esto extraerá el servidor DNS del host de Windows, creará un nuevo resolv.conf y lo escribirá en formato Unix en la instancia WSL2. Entonces necesitas editar /etc/wsl.conf para:

[network]
generateResolvConf = false

Entonces un superusuario intentó cambiar eso a resolv.config; Si ese archivo existe porque estás usando una distribución de Linux diferente, entonces supongo que es el archivo que deseas. Así que modifíquelo en consecuencia. Aunque nunca he visto ese archivo en ninguna documentación y no estoy seguro de que la edición de mi publicación fuera correcta.

Luego inicie el símbolo del administrador de PowerShell y ejecútelo como ./debian.ps1 (si ese es el nombre del archivo):

# Filename: debian.ps1
# 
# Get the DNS server of the Windows machine, save into variable nameserver
$nameserver = Get-WmiObject -Namespace root\cimv2 -Query "Select dnsserversearchorder from win32_networkadapterconfiguration" | where {$_.DNSServerSEarchOrder -ne $null} | select -ExpandProperty DNSServerSearchOrder
# Convert nameserver object into a string
$nameserver = Out-String -InputObject $nameserver
# Run Set-Contents (sc) to write the resolv.conf file in a public location as it has DOS formatted line endings written by PowerShell, not readable by Linux
sc -Path 'c:\Users\Public\Documents\resolv.conf' -Value ('nameserver ' + $nameserver) -Encoding utf8
# Convert the DOS formatted file into UNIX format for WSL2 and write it in the proper place (\etc\resolv.conf, its primary location is \\wsl$\[distro_name] from Windows)
[string]::Join( "`n", (gc 'c:\Users\Public\Documents\resolv.conf')) | sc '\\wsl$\debian\etc\resolv.conf'
# Launch the default WSL2 distribution - if you want to use another one, specify in the line below
wsl.exe

Esto se ha probado en Debian Buster y una VPN Zscaler (corporativa). Es un buen punto de partida, espero que le ahorre a alguien los dolores de cabeza que tuve al obtener acceso DNS en la instancia WSL2 de mi PC corporativa.

Respuesta4

Respuestas muy detalladas sobre cómo cambiarlo. Sólo quería usar el valor predeterminado y seguir adelante. Seguí algunas guías como la primera respuesta, no funcionó para mí. Solo lo cambié /etc/wsl.confy vuelve a funcionar.

sudo nano /etc/wsl.conf

Insertar o cambiar en este archivo:

[network]
generateResolvConf = true

Insertar en Powershell/CMD:

wsl --shutdown

o:

wsl --terminate <<Linux distro>>

Hecho y hecho. Déjame saber si esto funcionó para ti.

Mi configuración estaba mal porque Tailscale la cambió cuando la inicié. Ahora está funcionando de nuevo.

información relacionada