Como adiciono um servidor DNS via resolv.conf?

207

É /etc/resolv.confinútil no Ubuntu 12.04 LTS (Precise Pangolin)?

Vejo que as informações do servidor DNS estão armazenadas no NetworkManager agora. A nmcliferramenta de linha de comando pode listar isso para você.

Se eu quiser adicionar mais um servidor DNS , o adicionarei /etc/resolv.confusando a resolvconfajuda do pacote?

PnotNP
fonte
2
Eu acho que o comando mencionado acima deveria ser nm-tool, não nmcli.
Jesse Glick

Respostas:

139

Se /etc/resolv.confcontém nameserver 127.0.0.1, a adição de entradas para /etc/resolvconf/resolv.conf.d/tailnão fará nada de útil.

Se você estiver usando o NetworkManager, adicione estaticamente os endereços do servidor de nomes por meio do indicador de rede : Editar conexões ... | Editar ... | Configurações de IPv4 | Servidores DNS adicionais .

Se você realmente deseja adicionar mais entradas /etc/resolv.conf, crie um /etc/resolvconf/resolv.conf.d/taile adicione-as lá.

Como em toda versão do Ubuntu, é recomendável ler as Notas da versão do Ubuntu, disponíveis aqui:

As seções Área de trabalho e Infra-estrutura comum contêm um link para

stgraber
fonte
1
@stgraber, comente a abordagem alternativa que encontrei e postei abaixo. Como ele se compara à adição de um /etc/resolvconf/resolv.conf.d/tailarquivo ou ao uso do Network Manager? Obrigado.
Randall Cook
3
@stgraber O que você recomenda para o Ubuntu Server? Percebi no seu blog e comentários que o Network-Manger parece ser a melhor maneira de gerenciar isso, mas fazer uma instalação do gerenciador de rede no meu sistema instalaria um monte de coisas que eu não preciso (por exemplo, coisas da GUI )
Avery Chan
1
Que tal adicionar entradas ao /etc/resolvconf/resolv.conf.d/head (conforme sua postagem no blog)?
sup
3
@AveryChan, use a "terceira abordagem" sugerida por @ randallcook - basta adicionar dns-nameserversà sua seção eth0 em /etc/network/interfaces.
Mrm 26/08
1
/etc/resolvconf/update.d/libcno servidor Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. (configure-o /etc/default/resolvconfcomo as linhas 23 e 24 do /etc/resolvconf/update.d/libcshow.
immeëmosol
134

Encontrei outra abordagem aqui que envolve a adição de uma linha como a abaixo /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Da mesma forma, encontrei uma terceira abordagem aqui que envolve adicionar linhas a /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Atualização: Aqui está a documentação oficial para a terceira abordagem.

Randall Cook
fonte
18
Votei a favor porque third approaché de longe a maneira mais simples de fazer isso.
Billy Lua
1
@billy Não consegui fazer com que o terceiro método funcionasse ... apenas o primeiro listado aqui, editando o dclient.conf, funcionou para mim.
Jeff Atwood
9
Nota: A edição do dhclient.conf só terá efeito se o dhclient for usado (e é usado pelo ifup e pelo NetworkManager!) A edição do / etc / network / interfaces só terá efeito se o ifup for usado. A configuração das conexões do NetworkManager usando o editor de conexões do NetworkManager só terá efeito se o NetworkManager for usado.
Jdthood 29/10/12
1
Se não me engano, a terceira abordagem adiciona outro servidor de nomes APÓS os retornados pelo DHCP. Se você deseja que ele seja o primeiro, uma das outras opções é mais apropriada. Eu usei /etc/resolvconf/resolv.conf.d/head(depois de superar o comentário enganoso "NÃO EDITAR")
starfry 15/09/14
1
@ Mr.Hyde, esses não são comandos de linha de comando, são linhas a serem adicionadas ao / etc / network / interfaces.
Randall Cook
91

Parece que você está falando sobre o pacote resolvconf.

Instale o pacote resolvconf .

Corre

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

A parte superior do arquivo é um aviso assustador. O arquivo /etc/resolv.conf é gerado automaticamente a partir do conteúdo deste arquivo; o aviso está lá, então ele será colocado no /etc/resolv.conf quando o /etc/resolv.conf for gerado. No final do arquivo, adicione

nameserver <ip_of_nameserver>

Pressione Ctrl xe responda sim para salvar o arquivo. Para finalizar, gere novamente o arquivo /etc/resolv.conf para que as alterações sejam aplicadas agora:

sudo resolvconf -u

Em seguida, verifique o conteúdo do /etc/resolv.conf para ver a linha que você adicionou agora está lá. Além disso, ele ainda estará lá na próxima vez em que a máquina inicializar ou o serviço de rede for reiniciado, o que ocorrer primeiro.

Azendale
fonte
As informações sobre o aviso de arquivo são exatamente o que eu precisava. Fiquei com a impressão de que não deveria editar o arquivo! Obrigado!
Xunnamius
Esta é a melhor resposta para mim!
Siwei Shen,
31

Abaixo, mostrarei a melhor maneira que encontrei desde que executo o Ubuntu Server Edition e uso o ifup em vez do NetworkManager.

Na verdade, para mim, eles tornaram isso mais fácil :) colocando tudo no arquivo / etc / network / interfaces. As mesmas configurações que você escreveria para resolv.conf agora podem estar no mesmo arquivo que as configurações do adaptador de rede, como no exemplo abaixo:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Espero que isso ajude e facilite como para mim, agora podemos criar endereços IP estáticos e adicionar servidores de nomes e domínio DNS em um único arquivo :)

Joseph Mituzas
fonte
1
Obrigado. Este se tornou meu método favorito também. Uma observação fora do tópico: não é necessário especificar os endereços 'rede' e 'transmissão', pois eles são calculados automaticamente a partir do 'endereço' e da 'máscara de rede'. Tudo o que você realmente precisa é de 'endereço', 'máscara de rede' e 'gateway'.
Martijn Heemels
Esta é a resposta mais limpa. Apenas certifique-se de digitar as palavras-chave dns- * corretamente. "DNS-nameservers" com erros de ortografia foi o meu problema real.
John McGehee
18

O meu está executando o Ubuntu Server 12.04. Fiz as seguintes alterações e reinicializei o servidor (normalmente, isso pode ser feito baixando apenas a interface de rede, ou seja, ifdown eth0ouifup eth0 ).

No arquivo /etc/resolvconf/resolv.conf.d/base, adicionei as seguintes entradas:

nameserver 8.8.8.8
nameserver 8.8.4.4

Espero que o acima ajude!

Don Chai
fonte
12

Você pode usar o NetworkManager como indicado na resposta de Frank, mas se preferir editar manualmente /etc/resolv.conf, exclua-o (na verdade é um link simbólico) e crie um novo arquivo simples com o conteúdo desejado. O resolvconfutilitário apenas grava no arquivo /run/resolvconf/resolv.conf.

Jase
fonte
9

Nota: Esta resposta foi para uma versão diferente da pré-mesclagem da questão, com foco apenas na pré-pendência do servidor de nomes desejado.

Isso funciona antes de 12.04:

Edite /etc/dhcp3/dhclient.confe adicione:
prepend domain-name-servers 127.0.0.1;

(De fato, essa linha já está presente; tudo o que você precisa fazer é desmarcá-la.)

belacqua
fonte
Isso funciona se você não tiver nenhum endereço atribuído pelo DHCP?
Azendale
Se você quiser aprender mais sobre a configuração do dhclient, faça o man dhclient.confpara acessar a página do manual do dhclient. (Isto não é uma resposta à pergunta de Azendale.)
Christian Skjødt
Esta resposta está completamente errada. Primeiro, o remetente da pergunta deseja adicionar o endereço de um servidor de nomes externo, não o endereço 127.0.0.1. O configurador de interface para uma interface externa não é o local para adicionar um endereço para um servidor de nomes interno. Segundo, o arquivo está em / etc / dhcp, não em / etc / dhcp3. Terceiro, desde o Ubuntu 12.04, essas coisas são configuradas usando o resolvconf.
Jdthood #
1
Primeiro de tudo - a pergunta original foi drasticamente alterada pela fusão do moderador, então minha resposta, é claro, parece estranha. O arquivo dhcp3 foi o local quando eu respondi isso em 2011 , e mesmo que não seja o ideal, funcionou. Eu usei esta solução em várias máquinas. Obviamente, você alteraria o endereço de loopback para o endereço que deseja anexar. Presumo que a maioria das pessoas saiba o que é um loopback, mesmo que não tenha lido o RFC6890.
Belacqua
@jdthood Por que não adicionar sua própria resposta? Pessoalmente, eu não estava familiarizado com a maneira bsd-ish resolvconf de fazer as coisas. Eu preferi a abordagem direta /etc/resolv.conf e não tenho certeza de qual é a vantagem do novo sistema Rube Goldberg. (Da mesma forma com / etc / motd).
Belacqua
7

resolvconfé inútil. Estou em um servidor Linux e meu endereço IP é estático e meus servidores DNS são estáticos. Eu não preciso resolvconfou NetworkManager .

Mantê-lo simples é minha política ao trabalhar em um servidor. Quanto menos complexidade, mais fácil será gerenciar / consertar quando as coisas quebrarem.

Então eu fiz aptitude purge resolvconfe manualmente me certifiquei de /etc/resolv.confnão ser um link simbólico e apenas criei um arquivo estático. Apenas no caso de um programa tentar alterar o arquivo, eu o fiz chattr +i(imutável) /etc/resolv.confcomo precaução.

Marca
fonte
4
Como o resolvconf faz parte do sistema base, ao excluí-lo, você estará solicitando problemas no futuro, no momento da atualização.
Jdthood 29/10/12
3
Concordo com o comentário e a resposta: considere quantos problemas isso causou e quantas horas de suporte foram necessárias para solucionar esse "problema" e quantas equipes de TI passaram algum tempo procurando respostas. Simples é o melhor - não preciso que meus servidores alterem o DNS para algo que não quero.
Mei
6

A maioria dos itens acima pressupõe que você tenha um sistema original, mas a realidade geralmente é tal que você instalou diferentes clientes dhcp, desabilitou o gerenciador de rede em determinada versão anterior do Ubuntu, etc. Talvez valha a pena saber o seguinte. Eu uso o dnsmasq há um tempo, mas o desinstalei. Atualmente, meu sistema tinha o seguinte conteúdo de /etc/resolv.conf(que é um link simbólico /run/resolvconf/resolv.confno meu sistema):

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

Não importa com que frequência eu corro sudo resolvconf -uou sudo dpkg-reconfigure resolvconfnão atualizou o servidor de nomes para os que eu defini no NetworkManager. As informações que o resolvconf usa no NetworkManager estavam presentes:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

No entanto, acontece que, se houver vários arquivos nesse diretório, esse arquivo poderá não ser usado. O culpado foi um arquivo não removido com a desinstalação do dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

A remoção deste arquivo (e a execução sudo resolvconf -uposterior) resolveu meus problemas de DNS:

cat /etc/resolv.conf                        
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 8.8.8.8 

Espero que isso ajude outras pessoas na depuração (as interações complexas entre todas essas ferramentas de rede diferentes) também. Se você usar, resolvconfnão deixe de correr ls /run/resolvconf/interfacespara ver o que está lá.

Anne van Rossum
fonte
1
Obrigado, isso foi muito útil. Tentei primeiro as respostas mais votadas e nenhuma parecia funcionar. Eu não tinha nenhum arquivo adicional no /run/resolvconf/interface/diretório, mas meu NetworkManagerarquivo precisava de um pouco de amor. Sua resposta ajudou a resolver esse problema para mim.
mason81
4

Acabei de excluir um link /etc/resolv.confe criei um arquivo regularmente com os endereços dos servidores de nomes. Funciona, e não vejo nenhuma razão para usar essa construção bastante estranha que os desenvolvedores do Ubuntu criaram.

Ivan
fonte
1
Sim, não sou fã desse tipo de mudança que afeta servidores, agrega complexidade e opacidade. Esse é o comportamento principal que não deve mudar de uma versão para outra.
Belacqua
Esta resposta tem 5 anos e o IMHO ainda é o melhor de todos os listados. É simples, rápido e eficaz. Existe alguma desvantagem?
Craig S. Anderson
3

Você pode editar a conexão "AUTO ETH0" ou qualquer que seja o nome que você usa para conectar-se ao NM. Você pode fazer isso clicando com o botão direito do mouse em NM e selecionando "Editar conexões ...". Na guia IPv4, você pode selecionar "Somente endereços automáticos (DHCP)" como o "Método" e o NM permitirá que você defina os endereços do servidor de nomes manualmente, mesmo os endereços são entregues pelo DHCP.

Frank Barcenas
fonte
3

Adicionando meu bit à lista já longa, aqui está outra maneira (testada em 12.04):

Edite /run/resolvconf/interface/NetworkManagerpara atender às suas necessidades. Aqui está um exemplo:

search foobar.com example.com
nameserver 192.168.1.1

Então, como indicado na maioria dos outros exemplos, faça a sudo resolvconf -u. Agora você vai ficar resolv.confassim:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Ainda não gosto da maneira como ele é implementado agora (parece que o Ubuntu precisa de um serviço para cada foo que faz), e preferiria um plano resolv.confcom certeza. Mas essa abordagem parece ser o melhor compromisso para mim até agora. O "localhost-NS" adicionado não deve doer muito.

Izzy
fonte
2

Corrigi isso alterando a ordem das fontes. Mudei o dnsfonte antes mdnsem /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Você pode manter suas configurações e ainda usar o servidor de cache local dessa maneira.

Dan B
fonte
em vez de adicionar entradas, corrija o sistema que está quebrado e fornecendo as informações que você realmente deseja. +1.
Nelaaro
2

E se:

sudo dpkg-reconfigure resolvconf

Antes disso, use o Network Manager para alterar o endereço DNS e o método para

Somente endereços automáticos (DHPC)

Em seguida, execute o comando acima e reinicie. Isso fez a solução para mim.

Adige72
fonte
2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp
Roy Rogers
fonte
2

Essa é uma pergunta muito popular, com uma coleção de respostas possíveis padrão, todas as quais, na IMO, são bastante hacky. Eu sempre tive problemas em fazer com que o Ubuntu respeitasse as configurações de DNS que eu configurei no NetworkManager - em particular configurando servidores DNS estáticos com "somente endereços automáticos (DHCP)" - e hoje finalmente descobri o que realmente estava errado.

O problema está na interação entre resolvconf e NetworkManager. resolvconf tem esse arquivo chamado /etc/resolvconf/interface-order. Pelo menos nos meus sistemas, o NetworkManager não está neste arquivo (exceto que está coberto pelo * curinga no final). Então o que acontece é que o relatório mais recente do dhclient para resolverconf tem precedência sobre qualquer coisa que o NetworkManager tenha a dizer.

Assim, pelo menos no meu caso, a resposta real era adicionar

NetworkManager

no topo ou perto dele /etc/resolvconf/interface-order.

(Sim, eu sei que muitas pessoas dizem apenas "desinstalar o resolvconf", o que me parece uma péssima idéia. Mas mais do que isso, pelo menos astuciosamente e xenial consideram o resolvconf uma parte vital do sistema [ie, ubuntu -minimal depende dele], portanto, seria difícil manter seu sistema em um estado consistente e atualizado sem o resolvconf.)

Mediante solicitação, posso fornecer mais detalhes sobre como eu descobri isso. ( EDIT : aparentemente, eu não o fiz quando solicitado, desculpe. Neste ponto, não me lembro de muito mais detalhes do que o que digo a seguir :) Em poucas palavras, substituí o executável resolvconf por um invólucro de shell em torno dele que despejou seus argumentos, entrada, saída e stderr em arquivos; e adicionou set -x aos scripts de atualização do resolvconf.

( EDIT : Eu posso . Dizer que o que eu quero dizer com a primeira parte é que eu usei sudo para mover o executável resolvconf real, que poderia ser encontrado usando o qual comando ou o comando tipo Em seguida, criar um shell script que, em última instância apenas executa o movido resolvconf, mas também ecoa os argumentos para algum arquivo e usa o redirecionamento de shell para enviar stdin, stdout e stderr para vários outros arquivos.Não me lembro onde estão os "scripts de atualização do resolvconf" e não posso verificar facilmente no momento. muitos geeks do Linux podem entender o que quero dizer; talvez um bom samaritano forneça ainda mais detalhes em um comentário.)

Steven Collins
fonte
Por favor, " forneça mais detalhes sobre como você descobriu isso "
Pierre.Vriens
1

Para alterar o DNS, siga as instruções em: https://developers.google.com/speed/public-dns/docs/using

  1. Vá para Rede

  2. Selecione a conexão para a qual você deseja configurar o DNS.

  3. Para alterar as configurações de uma conexão sem fio, selecione a guia Sem fio e selecione a rede sem fio apropriada.

  4. Clique na seta (direita) e, na janela exibida, selecione a guia Configurações IPv4 ou Configurações IPv6.

  5. Se o método selecionado for Automático (DHCP), abra a lista suspensa e selecione Apenas endereços automáticos (DHCP). Se o método estiver definido para outra coisa, não o altere.

  6. No campo Servidores DNS, insira os endereços IP do DNS, separados por vírgula

Ferroao
fonte
0

Adicionar DNS temporário. Edite /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Instale ou atualize o resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Adicione seu servidor de nomes em /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Reinicie sua máquina.

xiaoliuzi
fonte