Devo editar meu arquivo resolv.conf para corrigir um problema de DNS errado?

35

Eu tenho o problema de que minha máquina Ubuntu usa o servidor DNS errado. Por algum motivo, a máquina consulta localhostinformações de DNS.

Eu adicionei o servidor DNS na GUI das configurações de rede, mas /etc/resolv.confainda contém 127.0.0.1como o endereço do servidor DNS. Agora, pensei em editar o arquivo sozinho, mas diz explicitamente que não devo editar o arquivo manualmente.

Agora, como a GUI das configurações de rede não gerou o arquivo com as configurações corretas, como faço para gerar um novo resolv.confarquivo sozinho?

Ahatius
fonte
1
Se você estiver usando o Ubuntu Server 12.04 LTS, faça um grande favor e edite o arquivo /etc/resolvconf/resolv.conf.d/head diretamente da mesma maneira que deseja que o resolv.conf legado seja exibido. Eu não tinha nada além de problemas de resolução até que eu a forcei.
askubuntu.com/questions/157154/… talvez uma pergunta relacionada.
Ehtesh Choudhury

Respostas:

40

O que nenhuma das respostas postadas assim longe endereços é a aparência de que o interlocutor não consegue entender que ter nameserver 127.0.0.1em /etc/resolv.confestá correto, assumindo que um servidor de nomes local está em execução. E no Ubuntu 12.04 Desktop há, por padrão, um servidor de nomes local executando, ou seja, um dnsmasqprocesso controlado pelo NetworkManager que ouve 127.0.0.1. No Ubuntu 12.10, o endereço de escuta foi alterado para 127.0.1.1.

Portanto, a solução não é fazer alterações resolv.conf. Está correto, supondo que o interlocutor queira usar o servidor de nomes local.

Se o serviço de nomes não estiver funcionando, o servidor de nomes local não receberá os endereços de encaminhamento corretos ou haverá algum outro problema de rede.

O interlocutor tentou usar a "GUI das configurações de rede" para "gerar o arquivo com as configurações corretas" e isso não funcionou. Não sei exatamente o que isso significa, mas aqui está o caminho certo para inserir endereços de servidores de nomes para que eles acabem no resolv.confmomento certo. Presumo que o interlocutor esteja usando NetworkManagere não ifuppara configurar interfaces.

Na maioria das vezes, as interfaces são configuradas usando o protocolo DHCP. Nesse caso, nada precisa ser configurado no sistema local. O servidor DHCP sabe qual endereço do servidor de nomes seus clientes devem usar e envia essas informações para o cliente DHCP, que as envia para o NetworkManager, que as envia para o resolvconf, que coloca as informações resolv.conf. Portanto, nesse caso, é o servidor DHCP que pode precisar ser configurado.

Se a interface de rede na máquina local estiver configurada estaticamente, os endereços corretos do servidor de nomes deverão ser inseridos no NetworkManager em, por exemplo, indicador de rede | Editar conexões ... | Sem fio | minha conexão | Editar ... | Configurações de IPv4 | Servidores DNS adicionais.

É possível que o servidor de nomes local não esteja funcionando corretamente. Nesse caso, o questionador deve editar/etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf

e comente a linha

dns=dnsmasq

na seção "[principal]". Para comentar a linha, coloque a #no início da linha e salve o arquivo. Em seguida, reinicie o gerenciador de rede.

sudo restart network-manager

Depois disso, endereços de servidores de nomes não locais serão inseridos em resolv.confvez do endereço 127. *.

Se o interlocutor estiver usando, em ifupvez do NetworkManager, para configurar interfaces de rede, a resposta de jmartin2279 está correta: você deve adicionar os endereços do servidor de nomes a / etc / network / interfaces da maneira que jmartin2279 descreve.

Ao contrário do que algumas outras respostas aconselhar, em geral, você deve não adicionar nameserver, domainou searchopções para arquivos em /etc/resolvconf/resolv.conf.d/. Veja meus comentários sobre essas respostas.

jdthood
fonte
1
"O servidor DHCP sabe qual endereço de servidor de nomes seus clientes devem usar" - Exceto quando você não tem controle sobre o servidor DHCP (pense em pontos de acesso Wi-Fi públicos) e deseja substituir o servidor de nomes em uso ... Definindo a mesma configuração em uma conexão base - repetidamente para cada ponto de acesso WiFi ao qual você se conecta - não é a solução.
Teoh Han Hui
Parece que estou precisando executar dhclientpara que as alterações ( nameserverlinhas) finalmente cheguem etc/resolv.conf. Estou executando um live personalizado do Xubuntu 14.04 (talvez seja esse o motivo).
Sopalajo de Arrierez
Quais seriam as desvantagens de desativar o DNSMasq, jdthood? Obviamente, a resolução de nomes e a internet parecem funcionar bem depois de fazer isso.
Sopalajo de Arrierez
Veja bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1003842 , por exemplo, meu comentário # 60.
Jdthood
Meu resolv.conf continua mudando para, 127.0.0.1apesar de meu gerente de rede ter outros namerservers + dnsmasq sendo comentados + reinicializados + dnsmasq mortos (como ainda é iniciado) + rede reiniciada: /
some user
17

Se você estiver usando o ifup para configurar a interface estaticamente, poderá adicioná-la ao arquivo / etc / network / interfaces.

Abra um terminal e digite:

sudo gedit /etc/network/interface*

Você deve ver algo como:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Editar para:

auto eth0
iface eth1 inet static
address 192.168.1.10 
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

usando suas próprias informações de rede. isso permitirá que você defina o DNS. você pode usar vários servidores DNS aqui:

dns-nameservers 8.8.8.8 8.8.4.4

Depois de fazer isso, execute

ifdown eth0
ifup eth0
jmartin2279
fonte
Se for o seu caso, esta é a solução: "Se você estiver usando o ifup para configurar a interface estaticamente ..."
angelcervera
Você ainda testou isso? ifdown: interface eth0 not configured
Cerin
3
se você estiver conectado através do ssh, não poderá usar o ifdown / ifup. em vez disso, usesudo /etc/init.d/networking restart
TD_Nijboer
11

No Ubuntu 12.04, o tratamento do resolv.conf mudou.

Se você quiser adicionar seu próprio endereço de servidor de nomes (es), em seguida, editar o arquivo /etc/resolvconf/resolv.conf.d/ cabeça

sudo nano /etc/resolvconf/resolv.conf.d/head

e adicione seu servidor de nomes (por exemplo: Google open dns)

nameserver 8.8.8.8

salve o arquivo e execute

sudo resolvconf -u

Sem reinicialização ou qualquer outra coisa. Talvez você precise reiniciar o gerenciador de rede

sudo service network-manager restart

Feito.

Você pode testá-lo com o comando

nslookup www.google.com

O resultado deve ser semelhante a

Server: 8.8.8.8
Address: 8.8.8.8#53
NickTux
fonte
4
Adicionar uma linha "nameserver" ao /etc/resolvconf/resolv.conf.d/head pode funcionar como um hack rápido, mas não é a solução correta para nenhum problema. Isso faz com que o resolvedor use o endereço do servidor de nomes em todas as circunstâncias, enquanto os servidores de nomes a serem usados ​​dependem das circunstâncias. Por exemplo, se você está conectado a uma LAN (talvez via VPN), geralmente deseja usar os servidores de nomes da LAN para poder resolver nomes particulares na LAN. E, no presente caso, o sistema parece estar executando um servidor de nomes em cache local, mas adicionar "nameserver 8.8.8.8" apenas o ignora.
Jdthood #
@jdthood - Você apontou um problema. Gostaria de fornecer uma solução?
TJ Biddle
@TJ Eu já postei uma resposta para a pergunta principal ("Como edito meu arquivo resolv.conf?") Se é isso que você quer dizer.
Jdthood
1
Por favor, não recomendo isso. No muito superior do arquivo: "Não editar este arquivo à mão - as alterações serão substituídas".
Cerin 28/04
Gostaria de salientar que a edição do /etc/resolv.conf substitui manualmente as alterações na reinicialização; no entanto, a edição do /etc/resolvconf/resolv.conf.d/head manualmente NÃO substitui as alterações na reinicialização, mas provavelmente ocorre na reinicialização. instalação do resolvconf, provavelmente o motivo pelo qual o aviso está lá.
Ken
1

Para adicionar mais entradas /etc/resolv.conf, crie um /etc/resolvconf/resolv.conf.d/tailarquivo e adicione-as lá.

Mas, se /etc/resolv.confcontiver 127.0.0.1, adicionar entradas a /etc/resolvconf/resolv.conf.d/tailnão mudará nada. Você deve definir os endereços do servidor DNS estaticamente no NetworkManager, que os enviará ao dnsmasq que atender 127.0.0.1.

A configuração de DNS para uma interface estática deve ser como entradas " dns-nameservers", " dns-search" e " dns-domain" adicionadas à sub-rotina iface apropriada em/etc/network/interfaces

Leia isto para mais informações.

`Além disso:

Você pode instalar uma ferramenta GUI chamada gnome-network-adminque definirá seu DNS. Tente :

sudo apt-get install gnome-network-admin
Kevin Bowen
fonte
3
(1) Não, não adicione opções "nameserver" ao /etc/resolvconf/resolv.conf.d/tail. Isso é ineficaz (porque outras opções de "servidor de nomes" têm precedência) e subótimo (porque é uma configuração estática, enquanto a configuração deve refletir as circunstâncias da rede). (2) Não, não use o gnome-network-admin. Não funciona corretamente com o resolvconf. Veja o bug # 60518 ( bugs.launchpad.net/ubuntu/+source/gnome-system-tools/+bug/60518 ).
Jdthood 29/10/12