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

241

A maioria das informações que vejo on-line diz para editar /etc/resolv.conf , mas todas as alterações que eu faço 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 docs dizem para editar /etc/resolv.conf . Eu tentei colocar servidores de nomes personalizados em /etc/resolv.conf.d/base , mas as alterações não apareceram em /etc/resolv.conf depois de executar sudo resolvconf -u .

FYI, não quero alterar o DNS por conexão, desejo definir as configurações de DNS padrão para todas as conexões quando não for especificado.

ATUALIZAÇÃO:

Eu mesmo respondi a essa pergunta: link

Acho que é a melhor solução desde:

  1. Funciona.
  2. Requer o mínimo de alterações e
  3. Ele ainda funciona em conjunto com o cache DNS do dnsmasq, em vez de ignorá-lo.
por Seán Hayes 07.05.2014 / 03:31

14 respostas

52

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 tenho um arquivo /etc/dnsmasq.conf , já que ele é instalado pelo pacote dnsmasq, mas o Ubuntu só vem com o dnsmasq-base. Corri sudo apt-get install dnsmasq , depois editei /etc/dnsmasq.conf , depois sudo service dnsmasq restart e sudo service network-manager restart .

Corri sudo tail -n 200 /var/log/syslog para verificar meu syslog e verificar se dnsmasq estava usando os nameservers 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
    
por 22.10.2014 / 05:06
234

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

Exemplo

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

Em seguida, coloque sua lista de servidores de nomes da seguinte forma:

nameserver 8.8.8.8
nameserver 8.8.4.4

Finalmente atualize resolvconf :

$ sudo resolvconf -u

Se você der uma olhada na página man do resolvconf , ele 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 na parte superior do arquivo head :

$ 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

este aviso está presente para que, quando esses arquivos forem construídos, o aviso funcionará no arquivo resolv.conf resultante que esses arquivos serão usados para fazer. Assim, você poderia facilmente adicionar as nameserver linhas descritas acima para o arquivo base , para o arquivo head também.

Referências

por 07.05.2014 / 04:01
74

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

Para testar, eu 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

Em seguida, 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 o dnsserver é

DNS:             208.67.222.222
DNS:             208.67.220.220

quais são os fornecidos pelo meu roteador. Por outro lado, cavando um endereço informa 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 pelo dnsmasq
  2. o dnsserver é realmente forçado a 8.8.4.4 independente do servidor fornecido pelo dhcp, MAS você perde o caching fornecido pelo dnsmasq, já que o pedido é sempre enviado para 8.8.4.4
  3. O
  4. dnsmasq ainda está usando APENAS o dnsserver fornecido pelo dhcp.

Em suma, funciona, mas não acho que seja o resultado pretendido. Uma solução mais próxima eu acho que é o seguinte. Editar

sudo vim /etc/dhcp/dhclient.conf

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 a nm-tool diz

DNS:             8.8.8.8

, o que significa que, se o nome procurado não estiver no cache, ele será solicitado em 8.8.8.8 e não no servidor fornecido pelo dhcp.

Outra opção (talvez melhor) é usar "prepend" em vez de "supersede": desta forma, se o nome não for resolvido por 8.8.8.8, a solicitação recairá no outro servidor. Na verdade, a nm-tool diz

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
    
por 09.09.2014 / 12:10
19

Para situações de IP estático, o Guia do Servidor Ubuntu diz para alterar o arquivo / etc / network / interfaces, que pode ter esta aparência:

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ê muda os IPs 192.168.3.45 192.168.8.10 para os que você quer, como 8.8.8.8

link Page 38

    
por 23.03.2015 / 19:30
14
  1. Pesquisar "Conexão de rede"
  2. Abra

  3. Emseguida,selecioneWiFiouEthernetouoquevocêestiverusandoecliqueemeditar.Vocêvaiterisso:

  4. Selecione o ipv4 nas guias

  5. Selecionar endereços apenas no método
  6. Digite seu nome DNS abaixo e salve-o

  7. Você terminou

por 08.11.2014 / 15:47
12

Uma solução rápida e suja que ainda não foi mencionada é a configuração do 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

Então:

$ sudo chattr +i /etc/resolv.conf

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

    
por 10.09.2014 / 23:45
9

Meu problema era um pouco diferente, eu queria substituir meus servidores DNS de roteadores. Eu encontrei este link do Ubuntu: link

Diz: Se você quiser substituir as configurações de DNS fornecidas 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.

    
por 23.10.2015 / 14:47
4

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

    
por 04.06.2014 / 17:57
4

Talvez eu esteja sentindo falta de algo, mas de acordo com as instruções de configuração no link fazer é atualizar o seguinte. Eu não estou executando um proxy - apenas uma máquina por trás de um firewall e DNS local (exemplo mostra Googles, mas configurá-lo para o que você precisar).

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

Reinicie, se puder.

    
por 26.04.2017 / 22:51
1

EDITAR MAIO 6,2016

Eu escrevi um script para atualizar todas as configurações das 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 o dns configurado com o grep e o configura com o awk.

Como o acesso a esses arquivos requer sudo access, execute este script com sudo e, em seguida, 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:

ORIGINALPOSTAlgunsusuáriosapontaramqueoDNSédealgumaformacontroladopordnsmasq.Issoédefatoverdade.Euenfrenteiumproblemaumpoucomenor,ondenãoimportacomoeumudeiheadoubodyem/etc/resolvconf/resolv.conf.d,meucomputadornãoconseguiuacessarinternamentepornomededomínio-apenastrabalhandocomendereçosIP.

Oquefizfoieditaroarquivo/etc/NetworkManager/NetworkManager.conf.Originalmente,elediziadns=dnsmasq,maseumudeipara:dns=208.67.222.222.Emboradessamaneira,nm-toolnãomenciona208.67.222.222,aindaconseguiusarnomesdedomínio,nãoapenasendereçosIP.

VejacomomeuarquivoNetworkManager.confsepareceagora:

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

NOTA:Paramaisdetalhessobreomeuproblemaeestasolução,consulteomeupostem askubuntu.com .

UPDATE # 1

Tendo voltado para casa da universidade hoje, descobri que não conseguia me conectar ao WiFi da minha casa. Eu li um pouco sobre man NetworkManager.conf e acontece que dns= in [main] é realmente uma linha para plug-ins, então a linha dns=dnsmasq está realmente adicionando o plugin dnsmasq ao NetworkManager, aparentemente.

Então, minha solução ainda funcionava, não como eu esperava. Aqui está um trecho da página man:

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

DNS plugins are used to provide local caching nameserver functionality (which speeds up DNS queries) and to push DNS data to applications that use it.

Então, definindo dns=208.67.222.222 eu posso ter, basicamente, impedido o NetworkManager de usar aquele plugin, que de outra forma usaria o servidor DNS local (que aparentemente não funciona).

    
por 29.10.2014 / 02:52
1

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 . Todos os seus pedidos de resolução serão enviados para o referido servidor de nomes. Resolvido.

No entanto, existem implicações para isso. Ao usar resolvconf para consultar diretamente 1.1.1.1 para resoluções de endereço, o poder do armazenamento em cache fornecido pelo dnsmasq é eliminado. Cada pedido irá para 1.1.1.1

Método 2

Se você não quer 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.

    
por 30.06.2018 / 17:10
0

A maneira fácil de alterar o DNS:

$ sudo nano /etc/network/interfaces

Se os problemas surgirem, instale nano :

$ sudo apt-get install nano -y

então ..

  1. encontre isto: dns-nameservers
  2. se você não encontrá-lo, digite-o lá
  3. eu fiz o meu assim: dns-nameservers 199.85.126.10 199.85.127.10

Espero que este seja o melhor jeito, eu fiz assim em um VPS.

    
por 15.06.2015 / 07:48
0

Algumas das respostas aqui funcionam bem. No entanto, não fiquei feliz com o fato de ter que percorrer manualmente os arquivos de configuração apenas para definir o "adequado" DNS , o qual já estou recebendo mais de DHCP com NetworkManager .

Eu fiz uma pequena pesquisa e notei que o arquivo /etc/resolv.conf é na verdade um link e está apontando para /run/systemd/resolve/stub-resolv.conf . Depois de 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 via DHCP . Portanto, em vez de ter que substituir / criar arquivos de configuração manualmente em /etc/ , basta vincular novamente /etc/resolv.conf para apontar para o arquivo /run/systemd/resolve/resolv.conf e tudo ficará bem:

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

Agora você deve poder editar as configurações do Gerenciador de rede no Gnome. :)

Não tenho certeza se isso funcionará no Ubuntu antigo, mas no Ubuntu 17.10.

    
por 04.03.2018 / 01:21
0

na raiz:

  1. comente dns=dnsmasq on /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

A seguir, 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 concluir o processo de reinicialização, verifique sua configuração com "nslookup nist.gov". Funciona bem no Ubuntu LTS 14.04.

    
por 15.02.2016 / 17:27