O resolv.conf continua sendo redefinido por algo

29

Preciso de ajuda para descobrir por que minha resolv.confmudança continua para isso, fazendo com que eu não consiga acessar a Internet externa e apenas a rede local:

$ cat /etc/resolv.conf
nameserver 192.168.16.1
domain localdomain
search localdomain

Eu pensei em consertá-lo, livrando-me da interface de loopback e adicionando-a à interface eth0 /etc/network/interfacescom as instruções no blog posterous de jontsai .

Eu tentei coisas como fazer:

$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ sudo /etc/init.d/networking restart
$ sudo dhclient

E então as coisas funcionariam temporariamente e, eventualmente, o servidor de nomes no resolv.conf seria revertido novamente.

PS: Eu também postei isso no ubuntuforums .


Editar: Há pelo menos um outro programa, além do NetworkManager, que está sendo gravado resolv.conf, e eu sei disso porque, quando atualizo o NetworkManager, o resolv.confarquivo gerado gera um comentário # Generated by NetworkManagere a versão para a qual ele continua mudando não.

Então, eu estou tentando isso:

while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done


Edição 2:

Adicionando saída de arquivos:

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Nenhum arquivo como /etc/NetworkManager/NetworkManager.conf

$ sudo cat /etc/NetworkManager/system-connections/Auto\ Ethernet 

[connection]
id=Auto Ethernet
uuid=#######omitted#######
type=802-3-ethernet
autoconnect=true
timestamp=1314377063

[ipv4]
method=auto
ignore-auto-routes=false
ignore-auto-dns=false
dhcp-send-hostname=false
never-default=false

[802-3-ethernet]
speed=0
duplex=full
auto-negotiate=true
mtu=0

[ipv6]
method=ignore
ignore-auto-routes=false
ignore-auto-dns=false
never-default=false
jontsai
fonte
Eu suspeito que seja um bug do Network Manager ou, mais provavelmente, uma configuração incorreta. Qual versão do Ubuntu você está executando? Você tem o resolvconfpacote instalado? Poste o conteúdo de /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confe /etc/NetworkManager/system-connections/*.
Gilles 'SO- stop be evil'
Estou executando o 10.04, sem resolvconfpacote. Em algum momento, meu modem DSL estava com defeito (atrás do roteador) enquanto minha rede local estava funcionando, então eu poderia ter tentado instalar nscdou - dnsmasqeles estão desinstalados agora, mas podem ter deixado alguns artefatos que estão interferindo?
precisa saber é o seguinte
Ok, acabei de reiniciar meu computador pela primeira vez em três semanas e acho que o problema desapareceu. o_O
jontsai 27/08
Não tenho certeza, mas eu acho que houve algum problema com o servidor DHCP em vmnet1ou vmnet8(NAT e Host-Only)
jontsai
11
Toda essa discussão é de menor relevância desde o Ubuntu 12.04, que introduziu o resolvconf no sistema base, alterando fundamentalmente a maneira como o resolv.conf é tratado.
Jdthood

Respostas:

13

Você pode fazer adições estáticas no /etc/resolv.conf. Essas adições podem substituir as coisas que estão sendo adicionadas automaticamente.

Primeiro, instale o resolvconfpacote.

Em seguida, pressione Alt + F2 e execute gksudo nautilus. Abra /etc/resolvconf/resolv.conf.d/headse você deseja adicionar ao início do arquivo; abra /etc/resolvconf/resolv.conf.d/tailse você deseja adicionar ao final. Faça as alterações, salve / feche os arquivos e execute sudo resolvconf -upara aplicar as alterações.

(Desculpe, não me lembro se as configurações no início ou no final do arquivo têm a maior prioridade.)

Azendale
fonte
Minhas alterações no gerenciador de rede seriam revertidas na conexão com qualquer VPN. Isso me permitiu manter 8.8.8.8 na lista de resolvedores, independentemente da rede à qual eu estava conectado.
Steven P
8

Eu tinha exatamente o mesmo problema - o resolv.conf seria reescrito toda vez que o servidor fosse reiniciado.

Foi causado pelo DHCP. Para definir resolv.conf como eu quero, editei /etc/dhcp/dhclient.confe adicionei o seguinte:

supersede domain-name "my.domain.com";
prepend domain-search "my.domain.com";

Você pode realmente controlar um pouco o seu arquivo resolv.conf fazendo alterações nele.

Espero que ajude.

Peter Sankauskas
fonte
2
Essa seria a solução mais limpa, mas, por algum motivo, parou de funcionar nos meus sistemas alguns anos atrás. Eu fiquei com a desativação do script resolvconf ou do chattr + i /etc/resolv.conf desde então.
Tronic
7

(Esta resposta contém maneiras de investigar o que está acontecendo. Talvez eu possa dar uma solução real se você usar esses métodos para coletar e fornecer mais informações.)

Um possível gatilho para as atualizações aparentemente espontâneas /etc/resolv.confé quando a concessão do DHCP é renovada. Verifique por quanto tempo você recebe concessões de DHCP (isso deve aparecer nos logs do sistema, acho /var/log/syslog).

Você pode usar o auditd Instale o auditd para descobrir o que modifica o arquivo. Inicie o daemon ( sudo service auditd start) e peça para ele procurar modificações nesse arquivo:

sudo auditctl -w /etc/resolv.conf -p w

Os logs de auditoria estão em /var/log/audit/audit.log. Você verá a hora em que o arquivo foi modificado e o nome do programa que o modificou.

Se você tiver o resolvconfpacote instalado, o Network Manager pode estar pisando na ponta dos pés. Tente derrubar todas as interfaces de rede, pare o Network Manager ( sudo service network-manager stop) e reinicie-o.

Gilles 'SO- parar de ser mau'
fonte
11
Acredito que você esteja certo sobre as versões do DHCP. Você pode alterar as configurações de DHCP no gerenciador de rede da seguinte maneira: Execute nm-connection-editorno seu terminal. Selecione sua interface e clique em editar. Nas configurações do IPv4, deve haver um método chamado apenas endereços DHCP (ou algo semelhante). Se não me engano, isso permitirá que você obtenha endereços IP através do DHCP, mas não de servidores de nomes (você pode especificá-los nos campos abaixo).
Christian Skjødt
Defino meu roteador para mapear o endereço MAC para IPs estáticos, para que a concessão do DNS seja prolongada. A auditctllinha não funciona para mim e acredito que o nome do serviço para o Network Manager é network-manager(inclui o hífen). Eu não tinha um resolvconfpacote instalado, mas tinha coisas dentro da /etc/resolvconf/pasta e, quando o comparei com outra máquina Ubuntu, não tinha, então instalei e desinstalei o pacote e removai-a manualmente. /etc/resolv.conffoi reescrito novamente, então acho que começar auditctla trabalhar seria muito útil.
precisa saber é
@jontsai A presença de /etc/resolvconfé normal, mesmo se você não tiver o resolvconfpacote, alguns pacotes lançam ganchos lá, e esses ganchos são usados ​​apenas se resolvconfestiver instalado. Corrigi a auditctllinha, caso o problema apareça novamente.
Gilles 'SO- stop be evil'
Gostei da ideia do usuário auditd de descobrir o que estava editando o arquivo, mas parece que ele começa depois que o arquivo já está modificado.
Peter Sankauskas
4

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 mesmo pela raiz.

Para desfazer o acima

sudo chattr -i /etc/resolv.conf

Para mais

man chattr
tanmay.01
fonte
Isto não funcionou para mim. A reinicialização do gerenciador de rede ainda substitui o /etc/resolv.conf pelos servidores de nomes DHCP.
Tommy
trabalhou para mim em uma VM Debian 9 rodando dentro do GCP. yay! obrigado!
the0ther
3

I desativar a atualização de resolv.confcriando um arquivo chamado disable_make_resolv_confno/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Ele substitui a função padrão pelo mesmo nome responsável pela resolv.confatualização.

Andrew Blake
fonte
1

Tarde, mas vou postar meu caso, pois era diferente de todos os itens acima.

No meu caso, /etc/resolv.confé um link simbólico para /var/run/NetworkManager/resolv.conf, e por algum motivo cat /etc/resolv.confnão me dá erro nesse arquivo ou diretório (talvez porque esteja vazio?)

Se eu abri-lo com o vi e adicioná- nameserver x.x.x.xlo, ele funciona, mas é limpo na reinicialização.

Tentei editar /etc/network/interfacese adicionar dns-nameservers x.x.x.x, alterei /etc/dhcp/dhclient.confe removi em request domain-name-servers, também editei prepend domain-name-servers x.x.x.x.

O binário Resolvconf não está instalado, NetworkManager.confnão tinha nada relevante. Mas sempre que reiniciei a máquina, não havia servidor de domínio.

Não sei ao certo qual é o motivo, mas parece ter a ver com o fato de ser uma máquina VBox, iniciada pelo GNS3, e por causa disso dentro da configuração do VBox, tenho que deixá-lo sem interface criada. Aparentemente, o GNS3 cria uma "interface UDP" em tempo real quando inicio a máquina, desde que inicie a partir do GNS3.

Então, para me salvar de busca sem parar, eu adicionei echo nameserver x.x.x.x> /etc/resolv.confpara /etc/profile, problema resolvido (não resolvido, mas trabalhou em torno hehe). Mas pode ser interessante saber o que acontece com esse cenário, se alguém o encontrar.

Adriano_epifas
fonte
1

Se você tem o arquivo /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

você pode configurar o NetworkManager para parar de redefinir o resolv.conf com

sudo sh -c 'echo "
[main]
dns=none
" >> /etc/NetworkManager/NetworkManager.conf'
cat /etc/NetworkManager/NetworkManager.conf

Agora mude manualmente /etc/resolv.confe teste sua permanência com

sudo systemctl restart NetworkManager
# sudo service network-manager restart
cat /etc/resolv.conf

Fonte: https://askubuntu.com/a/623956/452398

adabru
fonte
Obrigado, adicionar dns = none corrige o problema da maneira correta.
Pneus
0

Basta fazer entradas nos seus arquivos ifcfg-ethX assim

DNS1 = 192.168.XX

DNS2 = 192.168.XX

DOMÍNIO = seudominio.com

o gerente de rede postará esses registros no arquivo resolv.conf depois que você reiniciar os serviços ou reiniciar sua caixa.

user2564853
fonte
0

Apenas no caso de alguém cair no mesmo caso:

Esqueci-me de definir dhcp em uma interface dentro do arquivo /etc/network/interfaces

O Networkmanager modifica a /etc/resolv.confpartir da resposta dhcp que ele recebe.

hth

Boop
fonte
0

Quando há # Generated by NetworkManagerem/etc/resolv.conf

Edite a configuração do Network Manager:

sudo vim /etc/NetworkManager/NetworkManager.conf

na [main]seção adicione rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

Por quê?

rc-manager- Defina o modo de gerenciamento resolv.conf. O valor padrão depende das opções de criação do NetworkManager, e esta versão do NetworkManager foi criada com o padrão "link simbólico".

(...)

unmanaged: não toque /etc/resolv.conf.

Referência de configuração para obter mais informações: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Em seguida, edite seu /etc/resolv.confe reinicie o Network Manager para ver se ele /etc/resolv.confpermanece intocado:

sudo systemctl restart NetworkManager

ou

sudo service network-manager restart

do que:

cat /etc/resolv.conf

Se o procedimento falhou e /etc/resolv.conffoi substituído durante a reinicialização do Network Manager, tente adicionar dns=nonea [main]seção em config como https://askubuntu.com/a/1150326/364772, disse

viagem
fonte