Como eu defino meu DNS quando resolv.conf está sendo sobrescrito?

A maioria das informações que vejo on-line diz para editar /etc/resolv.conf, mas todas as alterações feitas lá são substituídas .

$ cat /etc/resolv.conf # 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.1.1 

Parece que 127.0.1.1 é uma instância local de dnsmasq. Os dnsmasq documentos dizem para editar /etc/resolv.conf. Tentei colocar servidores de nomes personalizados em /etc/resolv.conf.d/base, mas as alterações não apareceram em /etc/resolv.conf após a execução de sudo resolvconf -u.

Para sua informação, não quero alterar o DNS por conexão, quero definir as configurações DNS padrão para usar em todas as conexões quando não especificado de outra forma.

ATUALIZAÇÃO:

Eu mesmo respondi a esta pergunta: https://unix.stackexchange.com/a/163506/67024

Acho que é a melhor solução desde:

  1. Funciona.
  2. Exige o mínimo de alterações e
  3. Ainda funciona em conjunto com o cache DNS do dnsmasq, em vez de contorná-lo.

Comentários

  • Melhor responder sua pergunta em vez de atualizar sua pergunta, eu acho … será mais fácil encontrar a resposta certa que você deu ao seu problema
  • Parece que a maioria das respostas são orientadas para o Ubuntu e excessivamente complicadas. Uma solução universal para usuários do NetworkManager é simplesmente adicionar dns=none em /etc/NetworkManager/NetworkManager.conf (veja detalhes em minha resposta abaixo).
  • Acho que esta resposta esclarece por que resolve.conf é sobrescrito, então você sabe como configurá-lo.

Resposta

Acredito que se você quiser substituir o servidor de nomes DNS, basta adicionar uma linha semelhante a esta em seu base arquivo em resolv.conf.d.

Exemplo

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

Em seguida, coloque sua lista de servidores de nomes como então:

nameserver 8.8.8.8 nameserver 8.8.4.4 

Finalmente atualize resolvconf:

$ sudo resolvconf -u 

Se você der uma olhada na página de manual de resolvconf, ela descreve os vários arquivos em /etc/resolvconf/resolv.conf.d/.

 /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. /etc/resolvconf/resolv.conf.d/head File to be prepended to the dynamically generated resolver configuration file. Normally this is just a comment line. /etc/resolvconf/resolv.conf.d/tail File to be appended to the dynamically generated resolver configuration file. To append nothing, make this an empty file. This file is a good place to put a resolver options line if one is needed, e.g., options inet6 

Mesmo que haja “um aviso no topo do arquivo head:

este aviso existe para que, quando esses arquivos forem construídos, o aviso acabe entrando no arquivo resolv.conf resultante que esses arquivos irão ser usado para fazer. Então, você poderia facilmente ter adicionado as nameserver linhas que são descritas acima para o arquivo base, ao head arquivo também.

Referências

Comentários

  • Ubuntu 14.04 – quando coloquei os servidores de nomes em base e executei resolvconf -u, os servidores de nomes foram não colocado em resolv.conf – quando coloquei os servidores de nomes em head, eles foram
  • Ubuntu 14.04 – também tive que comentar configuração definida em /run/resolvconf/interface/NetworkManager
  • digite nslookup google.com e o primeiro IP na lista deve ser o seu novo servidor de nomes, se não , você errou
  • Ubuntu 16.04: funcionou se anexado apenas a /etc/resolvconf/resolv.conf.d/head, não com base. Confirmado com nslookup google.com.
  • Inicialmente, você deve ter resolvconf instalado. Você pode instalá-lo fazendo sudo apt-get install resolvconf.

Resposta

Também estou interessado nesta questão e tentei a solução proposta @sim.

Para testá-la, coloquei

nameserver 8.8.8.8 

em /etc/resolvconf/resolv.conf.d/base e

nameserver 8.8.4.4 

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

Então reiniciei a rede com

sudo service network-manager restart 

O resultado é que /etc/resolv.conf se parece com

# 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.4.4 nameserver 127.0.1.1 

e nm-tool afirmam que os dnsserver são

DNS: 208.67.222.222 DNS: 208.67.220.220 

quais são os fornecidos pelo meu roteador. Por outro lado, cavar um endereço mostra que

;; Query time: 28 msec ;; SERVER: 8.8.4.4#53(8.8.4.4) 

Se estou certo, concluo de tudo isso que

  1. apenas a parte “head” é lida por resolvonf: a parte “base” é de alguma forma controlada por dnsmasq
  2. o dnsserver é realmente forçado a 8.8.4.4 independentemente do servidor fornecido por dhcp, MAS você perde o cache fornecido por dnsmasq, uma vez que a solicitação é sempre enviada para 8.8.4.4
  3. dnsmasq ainda está usando SOMENTE o dnsserver fornecido por dhcp.

De modo geral, funciona, mas eu não pense que é o resultado pretendido pedido.Uma solução mais próxima, eu acho, é a seguinte. Edite

sudo vim /etc/dhcp/dhclient.conf 

e depois adicione

supersede domain-name-servers 8.8.8.8; 

O resultado é o seguinte: resolv.conf contém apenas 127.0.0.1, o que significa que o cache dnsmasq é invocado e nm-tool diz

DNS: 8.8.8.8 

o que significa que se o nome procurado não estiver no cache , então ele é solicitado em 8.8.8.8 e não no servidor fornecido por dhcp.

Outra opção (talvez melhor) é usar “prefixar” em vez de “substituir”: desta forma, se o o nome não é resolvido por 8.8.8.8, então a solicitação volta para o outro servidor. Na verdade, nm-tool diz

DNS: 8.8.8.8 DNS: 208.67.222.222 DNS: 208.67.220.220 

Comentários

  • Uma resposta muito melhor do que invadir o NS configs. Especialmente a opção de adicionar um servidor antes dos fornecidos pelo dhcp. Parece ser o equilíbrio perfeito para resolver o problema, sem criar novos!
  • É ‘ importante notar que nm-tool foi substituído por nmcli

Resposta

Descobri que você pode alterar os servidores de nomes que dnsmasq usa adicionando as seguintes linhas a /etc/dnsmasq.conf:

server=8.8.8.8 server=8.8.4.4 

Eu não tinha /etc/dnsmasq.conf no entanto, já que é instalado pelo pacote dnsmasq, mas o Ubuntu só vem com dnsmasq-base. Corri sudo apt-get install dnsmasq, editei /etc/dnsmasq.conf, sudo service dnsmasq restart e sudo service network-manager restart.

Eu executei sudo tail -n 200 /var/log/syslog para verificar meu syslog e verificar se dnsmasq estava usando o servidores de nomes que eu especifiquei:

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53 Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53 

Comentários

  • Há um motivo pelo qual isso está marcado como o melhor resposta … porque é verdade! muito obrigado! Eu acrescentaria que, após todas as etapas que você mencionou, pode ser necessário reiniciar a rede para que tudo funcione perfeitamente (foi para mim …. sudo service network-manager restart)
  • No Ubuntu 14.04 Server, cerca da metade das vezes, uma inicialização a frio resultaria em nenhuma conectividade com a Internet usando um URL, mas um endereço IP funcionaria. Passei muito tempo tentando consertar em vão, desisti por meses, então encontrei essa solução. Eu também acho que é a melhor resposta.
  • É ‘ intrigante que o dnsmasq tenha que ser instalado. Isso de fato corrigiu meu DNS em uma situação normal, mas quebrou totalmente minha configuração VPN (a conexão VPN agora falha …)
  • não existe tal arquivo no Centos
  • ubuntu 16: as alterações do procedimento com dnsmasq não estão sendo propagadas para /etc/resolv.conf. A consequência é que o hat nslookup ainda usa seu localhost original 127.0.0.1 definido. Embora eu possa confirmar seus syslogs mencionados.

Resposta

Para situações de IP estático, o Guia do servidor Ubuntu diz para altere o arquivo / etc / network / interfaces, que pode ser parecido com:

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 

Você altera os IPs 192.168.3.45 192.168.8.10 para os que deseja , como 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Página 38

Comentários

  • Isso certamente parece certo, mas como faço para regenerar resolv.conf agora ?!
  • @JoelBerger ifdown eth0; ifup eth0.
  • nenhum / etc / network / interfaces no Centos

Resposta

  1. Pesquise “Conexão de rede”

  2. Abra

    insira a descrição da imagem aqui

  3. Em seguida, selecione WiFi ou Ethernet, ou o que quer que você esteja usando, e clique em editar. Você receberá isso:

    insira a descrição da imagem aqui

  4. Selecione ipv4 nas guias

  5. Selecione endereços apenas no método

  6. Insira seu nome DNS abaixo e salve-o

  7. Você terminou

Comentários

  • I ‘ d teria que fazer isso para cada conexão de rede. No passado, você podia alterar o padrão para todas as conexões, que é o que eu procurava fazer aqui.
  • Eu te amo! esta configuração de IU salvou minha bunda da bagunça do sudo e do vim: ‘ (
  • Usando o Mint (no Ubuntu 14.04) – mas vi isso com o KDE também – para alguns Por isso, configurar servidores DNS no Gerenciador de Rede GUI não ‘ afeta as configurações DNS usadas em um terminal
  • Melhor resposta imho. No Ubuntu 14.04 eu tenho 2 externos Endereços IP para DNS que não ‘ reconhecem clientes dentro de minha rede doméstica. Deixando o método em ‘ Automático (DHCP) ‘ para a conexão com fio adicionado o endereço IP do meu roteador ‘ à lista existente.Para a conexão sem fio por wlan0, isso não ‘ funcionou, mas o Método em ‘ endereços automáticos (DHCP) apenas ‘ substituiu os endereços externos pelo IP do meu roteador e funcionou também. Aplique as alterações com sudo service network-manager restart, espere um pouco, verifique com nmcli d list | grep 'DNS\|IP-IFACE'. E execute ping em seu cliente interno por nome.
  • esta é a resposta correta

Resposta

Uma solução alternativa rápida e suja que ainda não foi mencionada é definir o sinalizador imutável no arquivo resolv.conf logo após editá-lo.

$ sudo nano /etc/resolv.conf 

Adicione e salve:

nameserver 8.8.8.8 

Em seguida:

$ sudo chattr +i /etc/resolv.conf 

Isso deve funcionar. Eu também faço isso no meu sistema.

Comentários

  • Sempre que sua solução envolve chattr, ela ‘ não é realmente uma solução.
  • isso é o que eu faço em sistemas onde preciso alterar temporariamente o DNS por algum motivo e não ‘ não quero modificar a configuração. Como solução permanente, eu não ‘ não recomendaria.
  • ” solução alternativa rápida e suja ”
  • Isso não é ‘ sujo. Programas que destroem a configuração local porque pensam que sabem o que é mais sujo.

Resposta

Meu problema era um pouco diferente , Eu queria substituir os servidores DNS dos meus roteadores. Encontrei este link no Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

Diz: Se você gostaria de sobrescrever as configurações de DNS fornecidas a você por um servidor DHCP, abra

/etc/dhcp3/dhclient.conf 

e adicione a seguinte linha:

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>; 

substituindo <dns_ip_address*> itens pelo conteúdo adequado.

Comentários

  • Esta é a resposta que resolveu meu problema.
  • Perfeito. Apenas adicionando isso, você deve reiniciar a rede de serviço sudo para habilitar as alterações.
  • E se não ‘ tivermos que dhcp3 pasta? Eu tenho o Xubuntu 17.10, ele mudou para /etc/dhcp simplesmente?
  • @PlasmaBinturong no meu caso era /etc/dhcp/dhclient.conf em versões mais recentes do Debian e do Ubuntu.

Resposta

Tente adicionar dns-nameservers XXX.XXX.XXX.X em seu /etc/networking/interfaces arquivo.

Comentários

  • Deixe um comentário quando você votar negativamente, por favor. Este é o método fornecido no manual , página 38.
  • O manual não mencionado mostra todos os IPs em uma linha. Esta resposta parece sugerir adicionar uma linha. E por que o último número tem apenas um X de largura? Acho que foi principalmente o estilo de bate-papo extremamente informal e incerto que gerou votos negativos, @Zook.

Resposta

Talvez eu esteja faltando alguma coisa, mas de acordo com as instruções de configuração em https://help.ubuntu.com/14.04/serverguide/network-configuration.html tudo que você faz é atualize o seguinte. Não estou executando um proxy – apenas uma máquina atrás de um firewall e DNS local (o exemplo mostra Googles, mas defina-o para o que for necessário).

nano /etc/network/interfaces 

Padrão:

# This file... # and how to activate... # The loopback... auto local iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp 

ATUALIZADO:

# This file... # and how to activate... # The loopback... auto local iface lo inet loopback # The primary network interface #iface eth0 inet dhcp iface eth0 inet static address x.x.x.x netmask 255.255.255.0 gateway x.x.x.x #nameservers # you may not need dns-search # I use it because I"m running this on a Windows network # so its useful to have # dns-search x.y dns-nameservers 4.4.4.4 8.8.8.8 

Reinicialize, se puder.

Resposta

Algumas das respostas aqui funcionam bem. No entanto, não fiquei feliz com o fato de ter que passar manualmente arquivos de configuração apenas para definir o DNS “adequado” que eu alrei ady estou recebendo em DHCP com NetworkManager.

Eu fiz uma pequena pesquisa e percebi que o arquivo /etc/resolv.conf é na verdade um link e está apontando para /run/systemd/resolve/stub-resolv.conf. Após algumas experiências, parece que o diretório /run/systemd/resolve/ contém outro arquivo chamado resolv.conf que já contém as configurações que você “recebeu por meio de DHCP. Portanto, em vez de substituir / criar manualmente os arquivos de configuração em /etc/, você pode simplesmente vincular novamente /etc/resolv.conf para apontar para o /run/systemd/resolve/resolv.conf arquivo e tudo deve ficar bem:

# sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf 

Agora você deve ser capaz de editar as configurações, mesmo na rede Gerente no Gnome. 🙂

Não tenho certeza se isso funcionará em ubuntu “s mais antigos, mas funciona no Ubuntu 17.10.

Comentários

  • quando executamos systemd-resolve --flush-cache o arquivo vinculado original é aparentemente cortado, a resposta acima restaura a funcionalidade original

Resposta

EDITAR 6 DE MAIO, 2016

Eu escrevi um script para atualizar todas as configurações de conexões do sistema no diretório /etc/Network-Manager/system-connections/. A GUI que você usa para editar conexões individuais edita um arquivo específico nesse diretório. O script atualiza todos os arquivos – ele apenas procura por aqueles que não têm dns definido com grep e define com awk.

Como o acesso a esses arquivos requer sudo acesso, execute este script com sudo e reinicie o gerenciador de rede

#!/bin/bash # Author: Serg Kolo # Date: May 6, 2015 # Description: this script checks all settings for connections in # /etc/NetworkManager/system-connections/ , and if there"s no custom # dns set , this script sets it; # NOTE: run sudo service network-manager restart after running this script set -x for file in /etc/NetworkManager/system-connections/* ; do grep "dns=208.67.220.220;" "$file" || ( awk "{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220. 220;\nignore-auto-dns=true"}}" "$file" > .tmpfile && ( cat .tmpfile > "$file") ) done 

Script em ação:

insira a descrição da imagem aqui

POSTAGEM ORIGINAL Alguns usuários aqui apontaram que o DNS é de alguma forma controlado por dnsmasq. Isso é verdade. Enfrentei um problema um pouco menor, onde não importa como mudei head ou body em /etc/resolvconf/resolv.conf.d, meu computador não conseguiu acessar internamente por nome de domínio – trabalhando apenas com endereços IP.

O que fiz foi editar o arquivo /etc/NetworkManager/NetworkManager.conf. Originalmente, dizia dns=dnsmasq, mas eu mudei para: dns=208.67.222.222. Embora dessa forma, nm-tool não mencione 208.67.222.222, eu ainda era capaz de usar nomes de domínio, não apenas endereços IP.

Veja como meu NetworkManager.conf arquivo parece agora:

[main] plugins=ifupdown,keyfile,ofono #dns=dnsmasq dns=208.67.222.222 [ifupdown] managed=false 

NOTA: Para obter mais detalhes sobre meu problema e esta solução, consulte minha postagem em askubuntu.com .

ATUALIZAÇÃO # 1

Tendo voltado para casa da universidade hoje, descobri que não conseguia me conectar ao meu WiFi doméstico. Eu li um pouco sobre man NetworkManager.conf e verifica-se que dns= em [main] é na verdade uma linha para plug-ins, então linha dns=dnsmasq está, na verdade, adicionando o plug-in dnsmasq ao NetworkManager, aparentemente.

Portanto, minha solução ainda funcionou, mas não como eu esperava. Aqui está um trecho da página de manual:

dns=plugin1,plugin2, ... List DNS plugin names separated by ",". 

Plug-ins DNS são usados para fornecer funcionalidade de servidor de nomes de cache local (o que acelera as consultas DNS) e enviar dados DNS para aplicativos que os usam.

Portanto, definindo dns=208.67.222.222 Posso ter, basicamente, impedido o NetworkManager de usar esse plugin, que, de outra forma, usaria o servidor DNS local (que aparentemente não funciona).

Resposta

Existem dois métodos

Método 1

O servidor DNS a ser usado pode ser alterado atualizando o arquivo head em resolv.conf.d

$ echo "nameserver 1.1.1.1" | sudo tee /etc/resolvconf/resolv.conf.d/base 

e, em seguida, execute

$ sudo resolvconf -u 

O acima irá gerar um arquivo resolv.conf genérico no diretório /etc. Todas as suas solicitações de resolução serão enviadas para o servidor de nomes mencionado acima. Resolvido.

No entanto, há implicações para isso. Ao usar resolvconf para consultar diretamente 1.1.1.1 para resoluções de endereço, o poder de cache fornecido pelo dnsmasq acabou. Cada solicitação irá para 1.1.1.1

Método 2

Se você não quiser que aconteça acima e use dnsmasq para resoluções de DNS, consulte esta resposta. A resposta é simplesmente descrita aqui.

Adicione o seguinte conteúdo no arquivo /etc/dnsmasq.conf .

server = 1.1.1.1

Em seguida, reinicie o serviço dnsmasq

$ sudo systemctl restart dnsmasq.service 

As coisas vão funcionar bem. Resolvido.

Resposta

A maneira fácil de alterar DNS:

$ sudo nano /etc/network/interfaces 

Se surgirem problemas, instale nano:

$ sudo apt-get install nano -y 

então ..

  1. encontre isto: dns-nameservers
  2. se você não encontrar, basta digitar lá
  3. Eu fiz o meu assim: dns-nameservers 199.85.126.10 199.85.127.10

Espero que esta seja a melhor maneira, eu fiz assim em um VPS por sinal.

Resposta

na raiz:

  1. comentário dns=dnsmasq em /etc/NetworkManager/NetworkManager.conf
  2. adicione supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; no final de /etc/dhcp/dhclient.conf
  3. sudo service network-manager restart

O seguinte faz as alterações mostradas acima:

$ sudo sed -i "s/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/" \ /etc/NetworkManager/NetworkManager.conf $ echo "supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;" | \ sudo tee --append /etc/dhcp/dhclient.conf $ sudo service network-manager restart 

Aguarde 7/10 segundos para terminar o processo de reinicialização, verifique sua configuração com” nslookup nist.gov “. Funciona bem no Ubuntu LTS 14.04.

Resposta

NB: como a maioria das respostas, esta assume o uso do NetworkManager . No entanto, ao contrário da maioria das outras respostas, não pressupõe o uso de resolvconf, dhclient ou qualquer outra coisa – tome cuidado para que eles possam assumir, embora (veja a atualização).

Dado o número de visualizações desta questão, “é incrível que tenha 8 caracteres a solução ainda não foi postada: de acordo com man NetworkManager.conf,

dns: […] nenhum: NetworkManager não modificará resolv.conf. Isso implica rc-manager não gerenciado

Portanto, adicione

dns=none 

na [main] seção de /etc/NetworkManager/NetworkManager.conf, reinicie o NetworkManager e não modificará /etc/resolv.conf mais.

Observe que a configuração rc-manager=unmanaged deve ser equivalente a dns=none , e essa configuração rc-manager=symlink junto com ter /etc/resolv.conf como um símbolo O link olic pode ser uma ideia melhor (leia a página de manual mencionada acima).

Atualização:

Depois que o NetworkManager parou de sobrescrever /etc/resolv.conf, eu percebi dhcpcd já estava substituindo /etc/resolv.conf por um arquivo vazio e inútil na inicialização. A página de manual de dhcpcd.conf ajudou, basta adicionar

nohook resolv.conf 

em seu dhcpcd.conf (o meu está em /etc/dhcpcd.conf).

Resposta

Que “s porque um determinado aplicativo instalado está gerenciando este arquivo. Você pode desinstalar esse aplicativo ou definir as opções desejadas diretamente por meio desse aplicativo.

No meu caso (Linux centos7 minimal server) tendo a mesma situação que eu estava recebendo # Generated by NetworkManager na parte superior do resolv.conf arquivo, então a melhor maneira de alterar essa opção seria usando

nmtui

. Você pode editar os servidores de nomes nesta ferramenta e quando você alterar as opções do networkmanager a partir deste utilitário, elas serão automaticamente aplicadas a /etc/resolv.conf após a reinicialização. Aqui você pode encontrar mais informações .

Resposta

Nada em tudo na internet ele Me sugeriu porque o utilitário CLI do NordVPN sempre sobrescrevia /etc/resolv.conf toda vez que eu me conectava e desconectava da VPN. Ele até substituiu chattr +i, o que era muito chato !!

O que funcionou para mim foi desabilitar completamente o resolvconf !

Edite /etc/resolvconf.conf e torne esta a única entrada:

resolv_conf=NO 

Isso desativa especificamente resolvconf, o que significa que seu /etc/resolv.conf nunca será alterado por ele. Então vá em frente e sudo chattr +i /etc/resolv.conf para uma boa medida.

Testado no Arch Linux.

Resposta

No Centos 7, usando o NetworkManager, a solução de trabalho mais limpa e persistente que consegui encontrar é criar um script do NetworkManager que usa nmcli para definir os valores que desejo.

Por exemplo,

Crie /etc/NetworkManager/dispatcher.d/mydns.sh com permissões 755 e o seguinte conteúdo:

#!/usr/bin/sh if [ $1 == "enp0s11" -a $2 == "up" ] then echo "Setting my DNS ($1 is $2)" | logger # disable default DNS nmcli device mod enp0s11 ipv4.ignore-auto-dns yes # Substitute our own DNS, in the desired order nmcli device mod enp0s11 ipv4.dns "10.0.1.101 10.0.1.1" fi 

E para testar, sem reiniciar:

systemctl restart NetworkManager.service cat /etc/resolv.conf 

YMMV, mas esta é a única maneira que descobri que permite que meu /etc/resolv.conf “sobreviver” a uma reinicialização sem ser sobrescrito por valores que não quero.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *