O que substitui o /etc/resolv.conf em cada inicialização?

15

Recebi os arquivos de um mini linux , que é inicializado diretamente em firefox . Funciona para tudo o que deveria estar fazendo, só que eu não recebo uma conexão com a internet.

Temos 3 servidores DNS na rede, todos funcionando. Eu também posso dar um ping neles. Mas ao tentar ping google.de ou wget google.de , recebo um erro bad address .

nslookup google.de funciona por algum motivo.

Eu rastreei o problema até meu resolv.conf no sistema inicializado não tendo o mesmo conteúdo que o resolv.conf que eu coloquei no arquivo .iso .

Tentei entender todos os fatores envolvidos na criação e modificação de resolv.conf . Não tenho certeza se tenho tudo, mas definitivamente não encontrei minha solução.

Então como um último esforço, tentei tornar o arquivo resolv.conf imutável usando

:~# chattr +i /etc/resolv.conf

Ao recriar e inicializar novamente para minha surpresa, meu arquivo foi renomeado para resolv.conf~ e em seu lugar estava o mesmo arquivo padrão que tem me assombrado.

O conteúdo do arquivo me faz acreditar que obtém as informações da própria rede. Ao iniciar o .iso no Virtualbox sem acesso à internet, meu arquivo está sendo mantido como está.

Eu tentei alterar /etc/dhcp/dhclient.conf para não obter as informações da rede, excluindo domain-name-server e domain-name-search da parte request do arquivo.

Não funcionou infelizmente.

Eu não tenho o NetworkManager instalado. O iso é baseado no Ubuntu 14.04.

Provavelmente há informações vitais em falta. Estou feliz em fornecer isso.

ATUALIZAÇÃO:

Acho que encontrei o arquivo que limpa resolv.conf .

Parece ser /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

Faz parte do programa udhcpc . Um pequeno cliente dhcp, que faz parte do busybox

Irá investigar mais.

UPDATE2 E SOLUÇÃO:

Comentei a parte (#Start to #End), que aparentemente sobrescreve o arquivo /etc/resolv.conf e com certeza. Esse foi o culpado. Então, um script obscuro causou todo esse problema.

Eu mudei a pergunta para refletir, o que realmente precisava ser conhecido para resolver o meu problema, por isso seria mais fácil encontrar pessoas com o mesmo problema e assim eu poderia aceitar uma resposta.

Obrigado pela ajuda aqui em descobrir as coisas.

    
por Minix 15.12.2014 / 15:15

6 respostas

16

1) Você não deve atualizar manualmente seu resolv.conf, porque todas as alterações serão substituídas por dados que o servidor DHCP local fornece. Se você quiser que ele seja estático, execute sudo dpkg-reconfigure resolvconf e responda "não" às atualizações dinâmicas. Se você quiser adicionar novas entradas, edite /etc/resolvconf/resolv.conf.d/base e execute sudo resolvconf -u , ele anexará suas entradas e entradas do servidor DHCP.

2) Tente editar seu / etc / network / interfaces e adicione suas entradas, como

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

e, em seguida, reinicie /etc/init.d/networking restart ou sudo ifdown -a e sudo ifup -a

3) Seu sistema usa o udhcp , que é um programa cliente DHCP muito pequeno. O cliente udhcp negocia uma concessão com o servidor DHCP e notifica um conjunto de scripts quando uma concessão é obtida ou perdida. Você pode ler sobre seu uso aqui ou apenas edite este script (como você fez).

    
por 15.12.2014 / 15:32
4

Eu corri para isso também. Comentar o domain-name-server também não resolveu para mim.

Além disso, não estou usando resolvconf , apenas /etc/resolv.conf .

Eu não tentei usar chattr +i para bloquear resolv.conf porque parece muito hacky. Além disso, quero que o Puppet possa modificar resolv.conf quando necessário.

A melhor solução que 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 for executado - na reinicialização ou quando executar manualmente sudo ifdown -a ; sudo ifup -a -, ele carregará esse script nodnsupdate . Esse 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.

    
por 05.03.2015 / 23:18
2

Se as interfaces de rede para sua instância do servidor forem controladas pelo DHCP, o programa dhclient sobrescreverá o arquivo /etc/resolv.conf sempre que o serviço de rede for reiniciado.

Você pode corrigir o problema editando o arquivo /etc/dhcp/dhclient.conf e adicionando instruções "substituir" para nome-do-domínio , domínio-search e nome-do-domínio -servidores da seguinte forma:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

Neste caso em particular, o servidor de nomes está localizado em "192.168.56.103" e o nome do domínio é "local.com"

Observe que cada linha é terminada por um ponto e vírgula e o nome do domínio é colocado entre aspas duplas.

    
por 02.04.2016 / 11:51
1

Para fazer as alterações relacionadas ao DNS em resolv.conf permanente, você precisa alterar o arquivo de configuração do DHCP chamado dhclient.conf . Você pode encontrar o arquivo em /etc/dhcp/dhclient.conf .

Abra o arquivo para edição (não esqueça de usar o sudo). Você verá linhas como estas:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

Remova o “#” anterior e use o nome de domínio e / ou os servidores de nome de domínio que você deseja. Salve isso. Agora, as alterações relacionadas ao DNS serão permanentes.

Os créditos vão para: link

    
por 14.06.2018 / 21:25
0

vá para este diretório:

  cd /etc/resolvconf/resolv.conf.d

Abra o arquivo chamado head e coloque os IPs ou nomes DNS nele. Abra o arquivo chamado tail e coloque o domínio lá. Reinicie.

    
por 07.08.2017 / 19:46
0

Em VMs do Azure, o /etc/resolv.conf não é diretamente editável.

Tente adicionar as integrações do DNS em seus arquivos de configuração de rede / etc / sysconfig / network-scripts / ifcfg-eth0 e assim por diante, como segue:

DOMAIN = example.com

DNS1 = 10. . . * *                                                                     DNS2 = 10. . . * *                                                                     DNS3 = 10. . . *

e reinicie o serviço de rede depois de salvar os arquivos. você verá que a configuração será então incluída no arquivo resolve.conf também.

    
por 15.10.2018 / 12:48