Como incluir linhas no resolv.conf que não serão perdidas na reinicialização?

173

Finalmente, migrei para 12.04 da 7.10. Tenho uma última parte a completar, mas estou perplexo. Estou usando o Puppet em cada servidor e, no passado, incluí um endereço de servidor de nomes e um nome de domínio de pesquisa para o puppetmaster no resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

Na versão 12.04, o resolv.conf é substituído quando reiniciado. Como não posso usar um IP estático para isso, usar as interfaces / etc / network / para me ajudar é um ponto nulo.

# 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

Existe uma maneira de obter o resolvconf para lidar com isso na cabeça, cauda ou base? Se houver, existem exemplos que eu possa usar para ajustar no meu servidor.

Qualquer ajuda é muito apreciada.

Sam
fonte
2
O resolvconf é um software ruim, apenas exclua-o e gerencie o /etc/resolv.conf da maneira antiga.
bronze man

Respostas:

134

Provavelmente, é melhor que o servidor DNS consiga resolver o "fantoche" para o endereço certo e que o servidor DHCP distribua o endereço do servidor de nomes DNS e a lista de pesquisa ou então (se você tiver endereços IP estáticos) para ter algo como o seguinte em / etc / network / interfaces.

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10

Mas se você quiser fazê-lo através dos arquivos de configuração resolvconf, deverá editar /etc/resolvconf/resolv.conf.d/base. Nesse arquivo, insira suas informações como faria resolv.conf.

nameserver 192.168.1.XXX

Em seguida, diga ao resolvconf para se regenerar resolv.conf.

sudo resolvconf -u
tgm4883
fonte
13
Embora esta resposta tenha votos e a primeira parte esteja mais ou menos correta, a segunda parte da resposta está incorreta. (1) Você não colocar uma linha de "pesquisa" em /etc/resolvconf/resolv.conf.d/head. Se você colocar uma linha de "pesquisa" lá, essa linha será ignorada se resolvconf incluir uma linha de "pesquisa" na parte dinâmica do arquivo resolv.conf. O resolvedor glibc ignora tudo, exceto a última linha de "pesquisa" ou "domínio". Veja resolv.conf (5). (2) Se a configuração do resolvconf for alterada, você não deve reiniciar o trabalho resolvconf, mas apenas executar uma atualização, "resolvconf -u".
Jdthood 27/10/12
1
Eu removi a linha. A outra opção seria usar cauda em vez de cabeça.
tgm4883
6
@tishma: Oi. Primeiro, para evitar qualquer mal-entendido: nada grava nos arquivos de base, na cabeça ou na cauda. Nada grava em nenhum arquivo no /etc/resolvconf/resolv.conf.d/ no tempo de execução. Esses arquivos são lidos pelo resolvconf, que reúne seu conteúdo no arquivo que ele grava --- /run/resolvconf/resolv.conf --- para o qual o link simbólico /etc/resolv.conf aponta. Segundo, sobre o que fazer após as opções dns- * em / etc / network / interfaces serem alteradas. Você não executar "/etc/init.d/networking restart"; agora está obsoleto. Em vez disso, desça a interface em questão e faça a instalação novamente.
Jdthood #
4
Em 14.04, essa resposta não fez nada para mim.
Jay Sullivan
2
Se tudo mais falhar .. $ sudo resolveconf -u não pareceu mudar as coisas para mim, reiniciou a máquina, pronto.
MSpreij 9/04/2015
35

Eu acho que a resposta é verificar o seu /etc/dhcp/dhclient.conf, ou seja, não solicitar dns-nameserversao seu cliente DHCP .

Atualize seu /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Então você resolv.confserá configurado automaticamente da maneira que desejar.

Adicione ao dns-searche, em seguida, execute a /etc/init.d/networking restart (mesmo que esse script esteja obsoleto, ele ainda funciona).

Jamin
fonte
5
O dhclient domina todas as configurações do resolvconf, portanto essa deve ser a melhor resposta.
Alex R
6
/etc/init.d/networking restartnão funcionou na minha máquina, mas sudo ifdown -ae depois sudo ifup -afez. (Além disso, ele me levou um pouco para perceber que eu tinha para substituir dnsserveripcom algo como 8.8.8.8, eu me sinto um pouco bobo.)
Jason Gross
Tentesystemctl restart networking.service
Pavel Sayekat
20

Provavelmente, isso é causado pela configuração do DHCP quando você instalou o Ubuntu pela primeira vez. Experimente este processo de três etapas para lidar com esse problema de configuração automática.

Primeiro

Edite sua configuração de interface, localizada em: /etc/network/interfaces

Adicione esta linha abaixo iface lo inet loopback:

dns-nameservers yourdns youraltdns

Como um exemplo para o DNS do Google, você pode querer usar isto:

dns-nameservers 8.8.8.8 8.8.4.4

Segundo

Edite seu arquivo de configuração DHCP, localizado em:

/etc/dhcp/dhclient.conf

Marque a sintaxe como um comentário usando #em todas as linhas ou simplesmente remova todos os servidores de nomes de solicitações. Na 16.04, talvez não seja necessário fazer alterações aqui.

Terceiro

Reinicie sua rede usando este comando:

/etc/init.d/networking restart

Em 16.04:

sudo ifdown -a
sudo ifup -a
astrajingga
fonte
3
/etc/init.d/networking restartnão funcionou na minha máquina, mas sudo ifdown -ae depois sudo ifup -afez.
Jason Gross
Isso é simples e funciona mesmo que seja um pouco hacky! Problema com coisas como o Ubuntu é ter 1000 maneiras de fazer uma coisa!
Willa O Ng'wana
E então você pode verificar se o /etc/resolv.conf contém essas 2 novas entradas DNS nas primeiras linhas úteis.
ROMANIA_engineer
8

Por favor, olhe a resolvconfpágina do manual. Você pode forçar a inclusão de determinadas configurações de DNS criando, por exemplo /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Existem outros arquivos especiais (cabeça e cauda), que podem ajudá-lo a alcançar o que deseja.

roadmr
fonte
4
Você pode adicionar linhas ao /etc/resolvconf/resolv.conf.d/base, mas como todo servidor de nomes é acessível por meio de uma interface e é acessível somente quando essa interface estiver ativa, é melhor associar as informações do servidor de nomes a essa interface. Se a interface estiver configurada com ifup, isso significa: coloque as informações nas linhas "dns-search" e "dns-nameservers" nas sub-rotinas / etc / network / interfaces. Se a interface estiver configurada via DHCP, isso significa: configure o servidor DHCP para fornecer nomes de pesquisa e endereços de servidor de nomes aos clientes. Etc. Use o arquivo "base" apenas como um hack temporário ou como último recurso.
Jdthood 27/10/12
Sim. Adicionei "nameserver 1.2.3.4" em /etc/resolvconf/resolv.conf.d/base
Bastion
8

Como muitas outras respostas afirmam, isso tem a ver com resolvconfa instalação no seu sistema.

Portanto, a melhor maneira de manter algo resolv.confque não será perdido na reinicialização é incluí-lo nos arquivos de configuração resolvconf que estão em:

/etc/resolvconf/resolv.conf.d/

Lá vá para o headarquivo. O que você colocar lá será escrito no topo da/etc/resolv.conf

Então, tudo vai para algo como isto:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u
Juan Javier Triff Cabanas
fonte
Esta é a resposta correta real! Finalmente!
user77232
6

Para mim, as respostas acima foram inadequadas pelos seguintes motivos:

  • Eu não estou usando resolvconf, simplesmente /etc/resolv.conf.
  • Usar chattr +ipara bloquear resolv.confparece muito invasivo. Eu preciso que o Puppet seja livre para fazer alterações quando necessário.
  • AFAIK, a edição /etc/network/interfacesnão impede que resolv.confseja substituída; simplesmente especifica os servidores de nomes que devem ser gravados. Para mim, especificar o nome dos servidores não era o ponto. Estou tentando definir options timeout:1e options attempts:1no meu resolv.confarquivo.

A melhor solução que encontrei substitui o comportamento padrão de dhclientusar seus ganchos documentados.

Crie um novo arquivo /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatecom o seguinte conteúdo:

#!/bin/sh
make_resolv_conf() {
    :
}

Em seguida, torne o arquivo executável:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Agora, quando o dhclient é executado - na reinicialização ou quando você é executado manualmente sudo ifdown -a ; sudo ifup -a- ele carrega esse script nodnsupdate. Esse script substitui uma função interna chamada make_resolv_conf()que normalmente substituiria resolv.confe, em vez disso, não faz nada.

Isso funcionou para mim no Ubuntu 12.04.

richardkmiller
fonte
1
Funciona bem no Debian 8. Solução elegante!
Artur Bodera 15/10/2015
1
apenas para completar: manpage dhclient-script contém as informações sobre o script de configuração de rede do cliente DHCP mencionado na resposta acima.
Hecke
Isso não funcionou no 16.04, eu adicionei coisas ao /etc/network/interfaces.d também, sem efeito, adicionei uma substituição vazia do make_resolv_conf recomendado aqui, sem efeito .... mas não modifiquei o / etc / dhcp / dhclient.conf - eu realmente preciso modificar um arquivo de configuração estático para corrigir isso?
silverjam
3

Isso pode ser apenas uma peculiaridade estranha na minha máquina, mas outra pessoa pode ter a mesma caixa de canto.

Tentei várias maneiras de incluir meus servidores de nome ISP no /etc/resolv.conf sem sucesso:

  • Eu os incluí /etc/network/interfacese reiniciei a rede. Eles não apareceram /etc/resolv.conf.

  • Eu os coloquei /etc/resolv.confexplicitamente, mas é claro que eles foram substituídos. Eles apareceram /run/resolvconf/interface/eth0.inet, mas nunca conseguiram /etc/resolv.conf.

  • Tentei configurar o resolvconf para atualizações dinâmicas. Nenhuma mudança.

Finalmente, li em algum lugar que, se a máquina local (127.0.0.1) aparecer em /etc/resolv.confqualquer outro servidor de nomes, não será incluída.

Em desespero, editado /run/resolvconf/interface/lo.named, suprimida a única linha em que ( nameserver 127.0.0.1) e reiniciado: ifdown eth0 && ifup eth0.

O /etc/resolv.conf incluiu meus servidores de nome ISP pela primeira vez! Corri service network-manager restartpara ver se era estável e /etc/resolv.confainda inclui meus servidores de nome do provedor de serviços de Internet. Reiniciado apenas para se certificar e ele ainda está lá , mas /run/resolvconf/interface/lo.named foi reposto para: nameserver 127.0.0.1.

O reinício curioso da rede ainda funciona: /etc/resolv.confainda contém meus servidores de nome ISP. Não posso explicar isso (alguém pode?), Mas isso pode ajudar alguém preso no mesmo local.

user297954
fonte
Isso provavelmente é causado por dnsmasq. Você pode simplesmente removê-lo usando apt-get remove dnsmasqou atualizar a configuração no /etc/dnsmasq.conf.
Tombart
2

adicione seu servidor de nomes ao arquivo /etc/resolvconf/resolv.conf.d/head. O arquivo contém a mensagem que você recebeu:

esse arquivo deve ficar assim depois de adicionar 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# 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.8.8
HVNSweeting
fonte
3
Adicionar linhas ao /etc/resolvconf/resolv.conf.d/head é uma solução ruim, ainda pior do que adicionar linhas ao /etc/resolvconf/resolv.conf.d/base. A solução correta para interfaces configuradas usando ifup é adicionar linhas "dns-search" e "dns-nameservers" às sub-rotinas em / etc / network / interfaces. Veja também meus comentários sobre as outras respostas.
Jdthood 27/10/12
3
É a única coisa que realmente funcionou para mim ... e parece difícil entender por que nenhuma das soluções "corretas" está funcionando.
precisa saber é o seguinte
1

adicione na última linha, por exemplo:

nameserver 8.8.8.8

Abra um terminal e digite

sudo chattr +i /etc/resolv.conf

o + i cuida para que o arquivo não seja redefinido em uma inicialização.

Para desfazer o acima

sudo chattr -i /etc/resolv.conf

Para mais

man chattr
tanmay.01
fonte
1

As outras soluções não funcionaram para mim no meu sistema Fedora 20. Meu problema específico era que a linha de "pesquisa" no /etc/resolv.conf estava sendo substituída. Aqui está o que foi corrigido. (Isso pressupõe que o NetworkManager esteja produzindo a linha search rn.yourcompany.com e você deseja que ela seja search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1. Use o comando "ifconfig" para descobrir qual interface é de seu interesse:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2.Torne-se root e altere para o diretório de dispositivos de rede de configuração do sistema:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Use seu editor disponível favorito para adicionar uma Domainlinha com os domínios adicionais a serem pesquisados:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Salve, efetue logout e efetue login novamente. O NetworkManager agora deve ter a linha \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com
CBI
fonte
3
Não chova no seu desfile, mas este é o Ask Ubuntu, e por isso o Fedora está fora de tópico.
Flimm
1

Adicionar entradas em /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

e execute o seguinte comando

sudo resolvconf -u
siz
fonte
1

Para o Ubuntu Server 18, o Netplan é o novo utilitário para configurar redes.

# cd /etc/netplan

Em seguida, edite a entrada de endereços dos servidores de nomes no arquivo yaml (use o recuo correto). Por exemplo, se você usa os servidores DNS do Google:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

Para reiniciar o serviço

# netplan apply

Veja https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/

Oscar Escamilla
fonte
0

Se você estiver usando DHCP, edite /etc/dhcp/dhclient.confpara adicionar servidores DNS adicionais:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

O cliente DHCP substitui o dns-nameserversin etc/network/interfacese eu penso /etc/resolvconf/resolv.conf.d/basetambém.

Isso funcionou para mim no servidor Ubuntu 14.04.3.

Veja o Debian NetworkConfiguration Wiki para detalhes.

Kevin S. Miller
fonte
0

Basta fazer backup do seu resolve.conf e excluir o pacto resolvconf e editar o arquivo /etc/resolv.conf para o que você quiser.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Deveríamos ter o direito de optar por não usar software ruim como o resolvconf.

A propósito, o campo de pesquisa no /etc/resolv.conf é inútil.

homem de bronze
fonte
0

Usando resolvconfe desativando systemd-resolved.service(isso funciona para mim no Ubuntu 19.04):

  1. Instalar resolvconf

    sudo apt install resolvconf
    
  2. Adicionando servidores de nomes

    Abra /etc/resolvconf/resolv.conf.d/basecom o seu editor de texto, eu uso vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    adicione os servidores de nomes dentro do arquivo aberto, por exemplo:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Atualizando resolv.conf

    sudo resolvconf -u
    
  4. Desative systemd-resolved.servicee reinicie. nameserver 127.0.0.53não está escrito para /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Feito!

Fonte

Bania J. Fonseca
fonte
Você poderia especificar para qual versão do Ubuntu você fez isso? A pergunta original refere-se ao ubuntu 12.04, desde há muito tempo obsoleta.
Marc Vanhoomissen 27/06
0

Achei isso a correção mais simples. Se você tiver resolv.confe resolvconfarquivos, eles entrarão em conflito. Você precisa remover o resolv.confarquivo que é obtido e sobrescrito toda vez que você reinicia.

Coloque nameserver 1.1.1.1 1.0.0.1na parte inferior do arquivo resolvconf e execute

sudo rm /etc/resolv.conf

Para se livrar do arquivo. Em seguida, reinicie e tudo funcionará.

Irv
fonte
0

Solução Mi em 12.04:

Notei que, se você adicionar o servidor de nomes de DNS em interfaces que não usam os servidores de resolução de nomes

Página de manual resolvconf

Para que o resolv.conf não mude quando editamos manualmente, faça isso no terminal:

sudo resolvconf –disable-updates

depois de:

sudo resolvconf -a eth0 # or your network interface

edite manualmente /run/resolvconf/resolv.confadicionando no máximo dois servidores DNS.

Em seguida, reinicie o serviço:

sudo /etc/init.d/networking restart
enlinea777
fonte
4
Este não é o caminho certo para resolver o problema.
Jdthood 27/10/12
1
@jdthood como alguém navegando por isso, você pode elaborar POR QUE esse não é o caminho certo? Parece lógico para mim, mas não sei nada sobre isso.
ErikPerik
-1

Basta colocar um

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

comando em sua /etc/network/interfacesconfiguração. depois reinicie sua rede.

deve funcionar.

tesar
fonte
-2

Essa configuração é declarada em /etc/default/bind9

RESOLVCONF=no|yes

no = não aplique a condição noinit.d bind9

sim ou outro valor = substituirresolv.conf

Esse problema ocorre quando você instala bind9e não se preocupa em verificar todas as confs.

user147967
fonte