desenv-web-rp.com

Como defino meu DNS quando o resolv.conf está sendo substituído?

A maioria das informações que vejo online diz para editar /etc/resolv.conf, mas quaisquer alterações que eu fizer lá serã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. Tentei colocar servidores de nomes personalizados em /etc/resolv.conf.d/base, mas as alterações não foram exibidas em /etc/resolv.conf depois de correr Sudo resolvconf -u.

Para sua informação, não quero alterar o DNS por conexão, quero definir as configurações de 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

Eu acho que é a melhor solução desde:

  1. Funciona.
  2. Requer a menor quantidade de alterações e
  3. Ele ainda funciona em conjunto com o cache DNS do dnsmasq, em vez de ignorá-lo.
302
Seán Hayes

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 um /etc/dnsmasq.conf, porém, já que ele é instalado pelo pacote dnsmasq, mas o Ubuntu vem apenas com o dnsmasq-base. Eu corri Sudo apt-get install dnsmasq, depois editado /etc/dnsmasq.conf, então Sudo service dnsmasq restart e Sudo service network-manager restart.

Eu corri Sudo tail -n 200 /var/log/syslog para verificar meu syslog e verificar se dnsmasq estava usando os 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
60
Seán Hayes

Acredito que se você deseja substituir o servidor de nomes DNS, basta adicionar uma linha semelhante a essa no seu 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 maneira:

nameserver 8.8.8.8
nameserver 8.8.4.4

Por fim, 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 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

esse aviso existe para que, quando esses arquivos forem construídos, o aviso finalmente chegue ao resultado resolv.conf arquivo que esses arquivos serão usados ​​para criar. Assim, você poderia facilmente adicionar as linhas nameserver descritas acima para o arquivo base, ao arquivo head também.

Referências

262
slm

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

Para testar, eu coloquei

nameserver 8.8.8.8

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

nameserver 8.8.4.4

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

Então eu reiniciei a rede com

Sudo service network-manager restart

O resultado é que /etc/resolv.conf parece

# 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 afirma que o dnsserver é

DNS:             208.67.222.222
DNS:             208.67.220.220

quais são os fornecidos pelo meu roteador. Por outro lado, digitar 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. somente 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, independentemente do servidor fornecido pelo dhcp, MAS você perde o cache fornecido pelo dnsmasq, pois a solicitação é sempre enviada para o 8.8.4.4
  3. o dnsmasq ainda está usando APENAS o dnsserver fornecido pelo dhcp.

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

Sudo vim /etc/dhcp/dhclient.conf

então 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 do dnsmasq é chamado e o nm-tool diz

DNS:             8.8.8.8

o que significa que, se o nome pesquisado 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 "prefpend" em vez de "substituir": dessa maneira, se o nome não for resolvido em 8.8.8.8, a solicitação retornará ao outro servidor. De fato, a ferramenta nm diz

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
80
brad

Para situações IP estáticas, o Ubuntu Server Guide diz para alterar o arquivo/etc/network/interfaces, que pode ser assim:

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

23
Rodolpho
  1. Pesquisar 'Conexão de rede'
  2. Abra

    enter image description here

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

    enter image description here

  4. Selecione o ipv4 nas abas

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

  7. Você Terminou

17
pa1pal

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

$ Sudo nano /etc/resolv.conf

Adicione isso e salve:

nameserver 8.8.8.8

Então:

$ Sudo chattr +i /etc/resolv.conf

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

15
Younis Bensalah

Configuração de DNS no Linux

o uso do DNS no linux é concluído um conjunto de rotinas na biblioteca C que fornece acesso ao DNS (Internet Domain Name System). O arquivo de configuração do resolvedor (resolv.conf) contém informações que são lidas pelas rotinas do resolvedor na primeira vez em que são invocadas por um processo. Em resumo, cada processo que solicita o DNS exibirá /etc/resolv.conf sobre a biblioteca. O NSS está em camadas e é configurado por /etc/nsswitch.conf.

Configuração de DNS do Linux estão localizados no arquivo /etc/resolv.conf MAS existem vários programas/serviços que desejam gerenciar e manipular automaticamente o arquivo de configuração DNS em /etc/resolv.conf. Em algumas situações, você pode querer gerenciar esse arquivo sozinho. Cada programa/serviço que gerencia o DNS tem seus próprios arquivos de configuração como /etc/dnsmasq.conf (para o serviço dnsmasq) e anexe a configuração do DNS na alteração da conexão e/ou em outros eventos ... uma solução rápida é bloquear o arquivo de configuração do DNS com chattr +i /etc/resolv.conf mas isso não é recomendado em alguns casos, uma solução melhor é configurar corretamente todos os programas/serviços usando o DNS como (dnsmasq/network-manager/resolvconf/etc.)

Voltando ao controle do DNS

Aqui está uma lista exaustiva de configurações para recuperar o controle do resolv.conf e evite substituí-lo (como desativar/configurar o DNS de outro local que não seja o resolv.conf ) observe que o resolvconf é um programa independente do resolv.conf, também dependendo do seu sistema/configuração, você pode não ter um ou muitos dos programas listados aqui.

1. Resolvconf:

Arquivos de configuração

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

Atualize a configuração

Sudo resolvconf -u

Desativar resolvconf

systemctl disable --now resolvconf.service 

2. Serviço Dnsmasq:

Arquivos de configuração

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

Atualize a configuração

Sudo systemctl restart dnsmasq.service

3. Gerenciador de Rede:

Arquivos de configuração

/etc/NetworkManager/*

Desativar DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

Ativar DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

Use serviço resolvido

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

Use resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

Atualize a configuração

systemctl restart NetworkManager.service

4. Interfaces de rede:

Arquivos de configuração

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Atualizar a configuração

reboot

5. Cliente DHCP:

Arquivos de configuração

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

Atualizar a configuração

reboot

6. Serviço Rdnssd:

Desativar rdnssd

systemctl disable --now rdnssd.service

7. Serviço Resolvido:

Desativar resolvido

systemctl disable --now systemd-resolved.service

8. Netconfig:

Arquivos de configuração

/etc/sysconfig/network/config

Desativar netconfig

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

Atualizar a configuração

reboot

Definindo o servidor DNS

Exemplo de um /etc/resolv.conf configuração

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

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

Ele diz: Se você deseja 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 com o conteúdo adequado.

11
Ryan

Talvez 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 o que você faz é atualizar o seguinte. Não estou executando um proxy - apenas uma máquina protegida por um firewall e DNS local (o exemplo mostra o Google, mas defina-o 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 você puder.

4
TooIgnorantToNotBeAnonymous

Tente adicionar dns-nameservers XXX.XXX.XXX.X dentro de voce /etc/networking/interfaces Arquivo.

3
Mike

Algumas das respostas aqui funcionam muito bem. No entanto, não fiquei satisfeito com o fato de ter que passar manualmente pelos arquivos de configuração apenas para definir o "apropriado" DNS que eu já estou recebendo mais de DHCP com NetworkManager.

Pesquisei um pouco e notei que o /etc/resolv.conf arquivo é realmente um link e está apontando para /run/systemd/resolve/stub-resolv.conf. Após algumas experiências, parece que /run/systemd/resolve/ diretório contém outro arquivo chamado resolv.conf que já contém as configurações que você recebeu através de DHCP. Portanto, em vez de precisar substituir/criar manualmente os arquivos de configuração em /etc/, você pode simplesmente reconectar /etc/resolv.conf para apontar para o /run/systemd/resolve/resolv.conf _ e tudo deve ficar bem:

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

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

Não tenho certeza se isso funcionará nos ubuntu mais antigos, mas no Ubuntu 17.10.

2
tftd

EDITAR EM 6 DE MAIO DE 2016

Eu escrevi um script para atualizar todas as configurações de conexões do sistema no /etc/Network-Manager/system-connections/ diretório. 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 aqueles que não possuem o DNS definido com grep e o define com awk.

Como o acesso a esses arquivos requer acesso Sudo, 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:

enter image description here

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

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

Aqui está como meu NetworkManager.conf arquivo parece agora:

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

[ifupdown]
managed=false

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

ATUALIZAÇÃO # 1

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

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

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

Os plug-ins DNS são usados ​​para fornecer a funcionalidade do servidor de nomes de cache local (que acelera as consultas DNS) e enviar dados DNS para aplicativos que os utilizam.

Então, definindo dns=208.67.222.222 Talvez eu tenha basicamente impedido o NetworkManager de usar esse plug-in, que de outra forma usaria o servidor DNS local (que aparentemente não funciona).

1
Sergiy Kolodyazhnyy

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 depois corra

$ 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, existem implicações nisso. Ao usar resolvconf para consultar diretamente 1.1.1.1 Por resoluções de endereço, o poder do cache fornecido pelo dnsmasq se foi. Toda solicitação irá para 1.1.1.1

Método 2

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

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

servidor = 1.1.1.1

Em seguida, reinicie o serviço dnsmasq

$ Sudo systemctl restart dnsmasq.service

As coisas vão funcionar bem. Resolvido.

1
Pragathees

A maneira mais fácil de alterar o 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, digite-o 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 a propósito.

0
Saif Salim

NB: Como a maioria das respostas, esta assume o uso do NetworkManager. No entanto, diferentemente da maioria das outras respostas, ele não assume o uso de resolvconf, dhclient ou qualquer outra coisa - tenha cuidado para que eles possam assumir o controle (consulte a atualização).

Dado o número de visualizações desta pergunta, é bastante incrível que esta solução 8 caracteres ainda não tenha sido publicada: de acordo com man NetworkManager.conf,

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

Portanto, adicione

dns=none

no [main] Seção de /etc/NetworkManager/NetworkManager.conf reinicie o NetworkManager e ele não será modificado /etc/resolv.conf não mais.

Observe que a configuração rc-manager=unmanaged deve ser equivalente a dns=none e essa configuração rc-manager=symlink além de ter /etc/resolv.conf como um link simbólico pode ser uma idéia melhor (leia a página de manual acima mencionada).

Atualização:

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

nohook resolv.conf

na tua dhcpcd.conf (a minha está em /etc/dhcpcd.conf).

0
Skippy le Grand Gourou

na raiz:

  1. comente dns=dnsmasq em /etc/NetworkManager/NetworkManager.conf
  2. adicionar 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 fim 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 concluir o processo de reinicialização, verifique sua configuração com "nslookup nist.gov". Funciona bem no Ubuntu LTS 14.04.

0
Sebastien Willemijns