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.


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

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).


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

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.


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

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.


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.


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

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

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

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


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.


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.


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


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á.


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

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.


-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.