Pelo que pude descobrir, o processo oficial para alterar qual servidor DNS é usado pelo WSL2 no Windows 10 é detalhado abaixo. (WSL2 é a nova versão do Windows Subsystem for Linux, que executa um kernel Linux real em uma VM leve no Windows 10.)
No entanto, esse processo não funciona para mim - acabo com um sistema que simplesmente expira e não consegue resolver nenhum endereço.
O que estou fazendo errado?
Aqui está o processo como eu o montei até agora:
1. Desligue a geração de/etc/resolv.conf
Usando o prompt do Linux (estou usando o Ubuntu), modifique (ou crie) /etc/wsl.conf com o seguinte conteúdo
[network]
generateResolvConf = false
(Aparentemente, há um bug na versão atual em que qualquer espaço em branco à direita nessas linhas atrapalhará as coisas.)
2. Reinicie a máquina virtual WSL2
Saia de todos os prompts do Linux e execute o seguinte comando do Powershell
wsl --shutdown
3. Crie um costume/etc/resolv.conf
Abra um novo prompt do Linux e cd para/etc
Se resolv.conf
estiver vinculado a outro arquivo, remova o link com
rm resolv.conf
Crie um novo resolv.conf
com o seguinte conteúdo
nameserver 1.1.1.1
4. Reinicie a máquina virtual WSL2
Igual ao passo #2
5. Inicie um novo prompt do Linux.
Lucro!
Atualização em 18 de março de 2020
Meu /etc/hosts
arquivo contém isso:
# 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
O arquivo /etc/switch.conf
não existe.
A ferramenta resolvectl
não está no meu caminho; não existe em /usr/bin/resolvectl
.
Da mesma forma systemd-resolve
não está no meu caminho; não existe em /usr/bin/systemd-resolve
.
O processo que documentei acima está correto - é assim que você altera as configurações de DNS no WSL2.
Meu erro foi usar os conhecidos servidores DNS públicos para CloudFlare (1.1.1.1) e Google (8.8.8.8 e 8.8.4.4) para fins de teste. Acontece que minha rede local me impede de usar DNS público.
Quando testei o processo acima com o endereço IP do servidor DNS interno correto, tudo funcionou corretamente.
Adicionando a outras respostas aqui, você também deseja definir
resolv.conf
imutável.No meu caso, ele estava sendo excluído a cada inicialização, mesmo com
wsl.conf
.Por isso, criei esse pequeno programa que automatiza tudo com um shell:
https://github.com/epomatti/wsl2-dns-fix-config
Ao criar/editar
/etc/resolv.conf
, recebi erros como este:Consegui resolver esses problemas removendo e recriando do zero. Ambas as operações requerem execução como root (usar sudo não funcionou para mim)
Respostas muito detalhadas sobre como alterá-lo. Eu só queria usar o padrão e seguir em frente. Segui alguns guias como a primeira resposta, não funcionou para mim. Só troquei
/etc/wsl.conf
e voltou a funcionar.Insira ou altere neste arquivo:
Insira no Powershell/CMD:
ou:
Feito e feito. Deixe-me saber se isso funcionou para você.
Minha configuração estava bagunçada porque Tailscale mudou quando eu comecei. Agora está funcionando novamente.
Eu tive que fazer isso de casa (coronavírus) e acabei escrevendo um script Prompt do administrador do Powershell para iniciar minha distro (debian). Observe também que isso inicia a distro padrão especificada pelo WSL, você precisará alterar a última linha se não for o caso. Procure o
\\wsl$\[distro name]
se o seu também não se chama Debian, basta digitar a primeira parte em um caminho do Windows Explorer para chegar ao WSL2, ou seja, na barra superior do explorer, digite\\wsl$\
e ele listará suas distribuições.Isso extrairá o servidor DNS do host do Windows, criará um novo resolv.conf e o gravará no formato Unix na instância WSL2. Então você precisa editar /etc/wsl.conf para:
Então, um superusuário tentou mudar isso para resolv.config; se esse arquivo existe porque você está usando uma distribuição Linux diferente, suponho que seja o arquivo que você deseja. Portanto, modifique de acordo. Embora eu nunca tenha visto esse arquivo em nenhuma documentação e não tenha certeza se a edição da minha postagem estava correta.
Em seguida, inicie o prompt de administração do PowerShell e execute como ./debian.ps1 (se for esse o nome do arquivo):
Isso foi testado no Debian Buster e em uma VPN Zscaler (corporativa). É um bom ponto de partida, espero que poupe alguém das dores de cabeça que encontrei ao obter acesso DNS na instância WSL2 do meu PC corporativo!
Se você deseja compartilhar a configuração de DNS entre o Windows e o WSL Linux, deixe a geração automática ON .
Como administrador do Windows , edite
C:\Windows\System32\drivers\etc\hosts
.Ou execute o WSL Linux Shell como administrador do Windows (com o botão direito do mouse) e edite o arquivo
/mnt/c/Windows/System32/drivers/etc/hosts
.