Questão Como incluo linhas no resolv.conf que não se perdem na reinicialização?


Eu finalmente migrei para 12.04 de 7.10. Eu tenho uma última parte para 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

No 12.04, o resolv.conf é sobrescrito quando reinicializado. Eu não posso usar um IP estático para isso, então usar o / etc / network / interfaces 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 resolvconf para lidar com isso na cabeça, cauda ou base? Se houver, há algum exemplo que eu possa usar para ajustar no meu servidor.

Qualquer ajuda é muito apreciada.


148
2018-06-28 13:54


origem




Respostas:


Provavelmente, é melhor que seu servidor DNS consiga resolver o 'fantoche' no endereço certo, e que o servidor DHCP distribua o endereço do servidor 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 fazer isso através dos arquivos de configuração do resolvconf, você vai querer editar /etc/resolvconf/resolv.conf.d/base. Nesse arquivo, coloque em sua informação como você faria em resolv.conf.

nameserver 192.168.1.XXX

Então diga ao resolvconf para regenerar resolv.conf.

sudo resolvconf -u

120
2018-06-28 15:35



Embora essa resposta tenha votos e a primeira parte seja mais ou menos correta, a segunda parte da resposta está incorreta. (1) fazer não coloque uma linha de "busca" em /etc/resolvconf/resolv.conf.d/head. Se você colocar uma linha de "busca", esta linha será ignorada se o resolvconf incluir uma linha de "busca" na parte dinâmica do arquivo resolv.conf. O resolvedor glibc ignora todos menos a última linha de "pesquisa" ou "domínio". Veja o resolv.conf (5). (2) Se a configuração resolvconf for alterada você não deve reiniciar o trabalho resolvconf mas apenas executar uma atualização, "resolvconf -u". - jdthood
Eu removi a linha. A outra opção seria usar a cauda em vez da cabeça. - tgm4883
base, head ou tail (a partir de 12.04) estão sendo reescritos como resolv.conf, então posso confirmar que o comentário @jdthood é verdadeiro. Então, a resposta completa diria - não edite nenhum dos arquivos resolv.conf, e apenas execute: sudo /etc/init.d/networking restart Na verdade, isso irá gravar mudanças de interface no resolv.conf. - tishma
@tishma: Olá. Primeiro, para evitar qualquer mal-entendido: nada grava nos arquivos base, head ou tail. Nada grava em nenhum arquivo em /etc/resolvconf/resolv.conf.d/ em tempo de execução. Esses arquivos são lidos pelo resolvconf que monta o conteúdo deles no arquivo que ele escreve --- /run/resolvconf/resolv.conf --- para o qual o symlink /etc/resolv.conf aponta. Segundo, sobre o que fazer após as opções do dns- * em / etc / network / interfaces serem alteradas. Faz não execute "/etc/init.d/networking restart"; que agora está obsoleto. Em vez disso ifdown a interface em questão e ifup novamente. - jdthood
Em 14.04 esta resposta não fez nada para mim. - Jay Sullivan


Eu acho que a resposta é verificar o seu /etc/dhcp/dhclient.conf, ou seja, não solicite dns-nameservers de você dhcp cliente.

Em seguida, atualize seu /etc/network/interfaces

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

Então o seu resolv.conf vai ficar auto configurado do jeito que você quiser.

Adicione ao dns-search e depois executar um /etc/init.d/networking restart  (mesmo que este script esteja obsoleto, ele ainda funciona).


32
2017-11-26 01:58



O dhclient rege sobre qualquer configuração do resolvconf, então esta deve ser a melhor resposta. - Alex R
/etc/init.d/networking restart não funcionou na minha máquina, mas sudo ifdown -a e depois sudo ifup -a fez. (Além disso, levei um pouco para perceber que eu tinha que substituir dnsserverip com algo parecido 8.8.8.8; Eu me sinto um pouco bobo. - Jason Gross
experimentar systemctl restart networking.service - Pavel Sayekat


Isso provavelmente é 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 pedidos de servidor de nomes. Em 16.04, você pode não precisar fazer nenhuma alteração aqui.

Terceiro

Reinicie sua rede usando este comando:

/etc/init.d/networking restart

Em 16.04:

sudo ifdown -a
sudo ifup -a

18
2018-06-20 01:50



/etc/init.d/networking restart não funcionou na minha máquina, mas sudo ifdown -a e depois sudo ifup -a fez. - Jason Gross
Isto é simples e funciona mesmo que seja um pouco hacky! Problema com coisas como o Ubuntu está tendo 1000 maneiras de fazer uma coisa! - Willa O Ng'wana
E então você pode verificar isso /etc/resolv.conf contém essas duas novas entradas de DNS nas primeiras linhas úteis. - ROMANIA_engineer


Por favor, olhe para resolvconfpágina do homem. Você pode forçar a inclusão de certas configurações de DNS criando, e. /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 você deseja.


7
2017-09-04 14:26



Você pode adicionar linhas ao /etc/resolvconf/resolv.conf.d/base, mas como cada servidor de nomes é acessível através de uma interface e é acessível apenas quando essa interface está 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: configurar o servidor DHCP para fornecer nomes de pesquisa e endereços de servidores de nomes aos clientes. Etc. Use o arquivo "base" apenas como um hack temporário ou como último recurso. - jdthood


Para mim, as respostas acima foram inadequadas pelas seguintes razões:

  • Eu não estou usando resolvconfsimplesmente /etc/resolv.conf.
  • Usando chattr +i travar resolv.conf parece muito hacky. Eu preciso que o Puppet esteja livre para fazer mudanças quando necessário.
  • AFAIK, edição /etc/network/interfaces não impede resolv.conf de ser sobrescrito; Ele simplesmente especifica os servidores de nomes que devem ser escritos. Para mim, especificar os servidores de nome não era o ponto. Estou tentando definir options timeout:1 e options attempts:1 no meu resolv.conf Arquivo.

o melhor solução Eu encontrei substitui o comportamento padrão de dhclient usando seus ganchos documentados.

Crie um novo arquivo em /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate com 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ê executa manualmente sudo ifdown -a ; sudo ifup -a - carrega este script nodnsupdate. Este script substitui uma função interna chamada make_resolv_conf() que normalmente sobrescreveria resolv.conf e, em vez disso, não faz nada.

Isso funcionou para mim no Ubuntu 12.04.


4
2018-03-05 22:12



Funciona bem no Debian 8. Solução elegante! - Artur Bodera
apenas para completar: manpage script do dhclient 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 recomendada aqui, sem efeito ... mas não modifiquei / etc / dhcp / dhclient.conf - eu realmente preciso modificar um arquivo de configuração estático para corrigir isso? - silverjam


Como muitas outras respostas dizem que isso tem a ver com resolvconf sendo instalado em seu sistema.

Então, a melhor maneira de manter algo em resolv.conf que não vai se perder na reinicialização é incluí-lo nos arquivos de configuração do resolvconf que estão em:

/etc/resolvconf/resolv.conf.d/

Lá vai para o head Arquivo. Tudo o que você colocar lá será escrito no topo do /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

3
2017-10-17 13:59





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 se parecer com isso 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

2
2017-10-23 10:43



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
É a única coisa que realmente funcionou para mim ... e parece difícil entender por que nenhuma das soluções "corretas" está funcionando. - silverjam


Isso pode ser apenas uma peculiaridade estranha na minha máquina, mas outra pessoa pode ter o mesmo caso.

Eu tentei várias maneiras de obter meus servidores de nomes do ISP incluídos no /etc/resolv.conf sem sucesso:

  • Eu os incluí em /etc/network/interfaces e reiniciou a rede. Eles não apareceram em /etc/resolv.conf.

  • Eu os coloquei /etc/resolv.conf explicitamente, mas é claro que foram sobrescritos. Eles apareceram em /run/resolvconf/interface/eth0.inet, mas nunca chegou a /etc/resolv.conf.

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

Finalmente eu li em algum lugar que, se a máquina local (127.0.0.1) aparece em /etc/resolv.conf quaisquer outros servidores de nomes não estão incluídos.

Em desespero eu editei /run/resolvconf/interface/lo.named, excluiu a única linha nela (nameserver 127.0.0.1) e reiniciado: ifdown eth0 && ifup eth0.

O /etc/resolv.conf então incluiu meus servidores de nomes do ISP pela primeira vez! Irã service network-manager restart para ver se era estável e /etc/resolv.conf ainda inclui meus servidores de nomes do ISP. Rebooted apenas para ter certeza e ainda está lá mas  /run/resolvconf/interface/lo.named foi redefinido para: nameserver 127.0.0.1.

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


2
2018-06-26 05:18



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