Como faço para corrigir a resolução de DNS que não funciona após a atualização para o Ubuntu 13.10 (Saucy)

64

Após a atualização para a 13.10, minha resolução de DNS falha. Parece que os servidores DNS que eu recebo pelo DHCP (LAN) não são usados.

Eu poderia resolver temporariamente o problema adicionando nameserver 8.8.8.8a /etc/resolv.conf. Mas os hosts da intranet ainda não podem ser resolvidos.

Ao clicar no item de menu Informações da conexão no indicador de rede, o DNS primário e o DNS secundário são definidos corretamente. Mas meu computador parece não usá-los.

Então, minhas perguntas:

  • No que devo colocar resolv.conf, se alguma coisa?
  • Como descobrir quais servidores de nome meu computador está consultando?
  • Onde procurar a seguir e descobrir por que os servidores de nomes recebidos pelo DHCP não são usados?
Witek
fonte
2
Eu tive o mesmo problema ao atualizar de 12.04 para 14.04.
Tarrasch
6
Eu tenho falhas diárias de DNS desde a atualização para 16.10, alguns dias atrás.
WindRider 22/10/16
@WindRider tem o mesmo problema, o truque com dnsmasq abaixo parece funcionar.
Suor
Eu tive o problema em uma nova instalação Lubuntu 17.04 e resolvido-lo adicionando manualmente as URLs necessárias para o arquivo hosts: askubuntu.com/a/936972/34298
rubo77

Respostas:

83

Primeiro, você precisa saber um pouco sobre como a resolução de nomes funciona no Ubuntu desde o Ubuntu 12.04.

Stéphane Graber postou algumas informações sobre o assunto no ano passado aqui . A coisa mais importante a saber é que o Ubuntu Server e o Ubuntu Desktop usam o resolvconf para gerenciar o resolv.confarquivo. Isso significa que você não deve mais editar /etc/resolv.confdiretamente; em vez disso, você deve configurar o utilitário de configuração da interface de rede para fornecer as informações corretas para o resolvconf. Para o Ubuntu Server, o utilitário de configuração da interface de rede é ifup e é configurado pelo arquivo /etc/network/interfaces. Para o Ubuntu Desktop, o utilitário de configuração da interface de rede é o NetworkManager . Isto é o que você está usando.

O NetworkManager é configurado por meio do indicador de rede> Editar conexões . No entanto, para interfaces de rede configuradas pelo DHCP, normalmente não é necessário alterar nenhuma configuração manualmente. Normalmente, o que acontece é que o servidor DHCP (remoto) fornece ao NetworkManager um endereço IP para a interface local e o endereço de um servidor de nomes DNS (remoto) a ser usado. O NetworkManager inicia uma instância de um servidor de nomes de encaminhamento que escuta localmente em 127.0.1.1. Este endereço, 127.0.1.1, é enviado para resolvconf que coloca nameserver 127.0.1.1em/etc/resolv.conf. O NetworkManager também fornece o endereço IP (remoto) do servidor de nomes DNS fornecido pelo DHCP ao servidor de nomes de encaminhamento. Assim, um programa em execução no sistema local solicita que o resolvedor traduza um nome de host em um endereço IP; o resolvedor consulta o servidor de nomes de encaminhamento local em 127.0.1.1; o servidor de nomes de encaminhamento consulta os servidores de nomes remotos sobre os quais foi informado, recebe uma resposta e a envia de volta à cadeia.

O NetworkManager se comunica com o processo do servidor de nomes de encaminhamento pelo D-Bus. Você pode ver o que o NetworkManager disse ao servidor de nomes de encaminhamento executando o comando

nmcli dev list iface eth0 | grep IP4.DNS

Atualização resultante dos comentários:
Observe que resolvconf realmente grava o arquivo /run/resolvconf/resolv.confno qual /etc/resolv.confdeveria ser um link simbólico. Se /etc/resolv.confnão for um link simbólico, será necessário recriá-lo. Para fazer isso, você pode executar

sudo dpkg-reconfigure resolvconf

ou

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        
jdthood
fonte
Muito obrigado por esta informação. No meu caso, o comando mostra os servidores DNS corretos. Mas o arquivo resolf.conf não é atualizado. Ele tem o carimbo de data e hora de quando coloquei meus valores lá. Então terei que descobrir por que o resolvconf não está gravando o arquivo.
Witek
15
O Resolvconf realmente grava o arquivo /run/resolvconf/resolv.conf e /etc/resolv.conf deve ser um link simbólico para /run/resolvconf/resolv.conf. Se você excluiu o /etc/resolv.conf, excluiu o link simbólico. Para recriar o link simbólico, você pode executar sudo dpkg-reconfigure resolvconfou pode fazêmv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
lo
7
Isso tem tudo, menos a 'correção'. Como posso resolver esse problema?
Amal Murali
5
A correção pode ser executada sudo dpkg-reconfigure resolvconfconforme sugerido na última parte da resposta.
Jdthood
Obrigado!!! Não tenho certeza do que aconteceu com o meu sistema, mas executar o sudo dpkg-reconfigure resolveconfparecia funcionar muito bem!
meanbunny
49

Fiz a alteração sugerida no link abaixo (desativando o dnsmasq). Agora tudo funciona muito bem! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Abra o /etc/NetworkManager/NetworkManager.confarquivo

sudo gedit /etc/NetworkManager/NetworkManager.conf

Linha de comentário como:

#dnsmasq deactivated
#dns=dnsmasq
Richard Lindstedt
fonte
4
Depois de comentar a dnsmasq, você precisa reiniciar o gerenciador de rede: sudo restart network-manager.
Don Kirkby
2
No meu caso (Xubuntu), o comando é: sudo /etc/init.d/network-manager restart
aviram83
Se você está fazendo isso com você, mesmo que não exista o dnsmasq instalado e não haja nada a comentar, adicione dns=defaulta [main]seção. O NetworkManager possui seu próprio plugin desagradável do dnsmasq, que ele usará de outra forma.
dstibbe
11
Eu preciso fazer este reinício network-manager- #sudo service network-manager restart
Sungam
Uma das minhas caixas não tinha dns após a atualização para 17.10 e acontece que o /etc/resolv.conf não era um link simbólico. Corrigido. Outra caixa não terminou a atualização e eu encontrei um arquivo .dpkg-new no diretório, diferenciá-los, a principal diferença é dnsmasq. Copiado sobre isso e funcionou sem reiniciar qualquer daemon
fchen
20

EDIT 2: A postagem anterior foi excluída por moderação, estou postando o que eu achei uma solução. Desculpe por isso.

EDIT: Acabei de encontrar a resposta e está nesta página - desculpe pelo meu miopy. Publiquei minhas descobertas abaixo, expandindo a resposta correta por Richard Lindstedt encontrada nesta página. Eu deixei meu estrondo cedo para um pouco de contexto. Por favor, vote na resposta de Richard, ele merece.

É realmente muito fácil.

basta abrir seu arquivo conf de interfaces -> sudo vi / etc / network / interfaces

Isso com certeza não ajudou o OP e não me ajuda agora. Não queremos endereços estáticos, queremos usar os que o servidor DHCP nos envia. O NetworkManager parece reconhecê-los, mas o Ubuntu os ignora sem rodeios:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

Mas...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

E minhas / etc / network / interfaces são:

auto lo
iface lo inet loopback

o que é um pouco estranho, eu esperaria que todas as interfaces fossem declaradas aqui (ou estou faltando alguma coisa?).

Então, resumindo:

  • Eu não mexi com nenhum arquivo para começar
  • Eu já corri dpkg-reconfigure resolvconf
  • O link simbólico correto está em vigor
  • O NetworkManager recupera os servidores DNS corretos do DHCP
  • O Ubuntu NÃO usa esses endereços
  • A solução alternativa é colocar 8.8.8.8 fixo em / etc / network / interfaces O QUE NÃO QUERO
  • Eu quero usar os servidores DNS fornecidos por DHCP em toda e qualquer situação.

Não estou abrindo outro encadeamento porque é o problema exato, exceto que estou com 14.10 agora (mas isso me incomoda desde a atualização das 12.10 para as 13.04).

SOLUÇÃO

Essa última frase me colocou no caminho certo e só então percebi a resposta de Richard.

O problema parece estar relacionado aos pacotes dnsmasqe conflito resolvconf. Até as 12.10, dnsmasqfoi utilizado. A partir do 13.04, o Ubuntu parecia mudar para um híbrido dnsmasq / resolvconf, onde você instalou os pacotes dnsmasq-basee resolvconf, mas não dnsmasqele próprio.

Não posso dizer se é um bug nos scripts de atualização para 13.04 ou algo mais, porque ao atualizar (como em novas instalações) o resolvconf é instalado, o dnsmasq-base é atualizado e o dnsmasq é (corretamente) desinstalado.

O problema é que o script de atualização falha ao comentar a entrada de dns=dnsmasqlinha /etc/NetworkManager/NetworkManager.conf. Portanto, mesmo que o daemon dnsmasq não esteja mais presente no sistema, /etc/resolv.conf ainda espera que esteja.

Henrique
fonte
ISSO É TÃO INCRÍVEL!
metadings
11
OMG isso resolveu meus problemas de DNS que tive nos últimos 3 anos! Se você possui dnsmasqe dnsmasq-baseinstalou, o NM colocará 127.0.0.1em /etc/resolv.confvez de 127.0.1.1. Eu simplesmente desinstalei dnsmasq(e habilitei o NM) e tudo funciona muito bem.
user1129682
4
Os futuros Googlers devem observar que é necessário que sudo service network-manager restartisso entre em vigor.
precisa saber é o seguinte
Bom ponto de reinicialização do gerenciador de rede de serviço!
Henrique
7

É realmente muito fácil.

basta abrir seu arquivo conf de interfaces -> sudo vi / etc / network / interfaces

e sob sua interface (provavelmente eth0), você verá toda a configuração usual.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

Após o gateway, basta adicionar 'dns-nameservers 8.8.8.8 8.8.8.9' ou qualquer servidor de nomes que você usará.

Portanto, sua configuração deve ser:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

basta fazer uma 'reinicialização da rede de serviço sudo' e pronto!

brotar
fonte