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:
- Funciona.
- Exige o mínimo de alterações e
- Ainda funciona em conjunto com o cache DNS do dnsmasq, em vez de contorná-lo.
Comentários
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 executeiresolvconf -u
, os servidores de nomes foram não colocado em resolv.conf – quando coloquei os servidores de nomes emhead
, 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 combase
. Confirmado comnslookup google.com
. - Inicialmente, você deve ter
resolvconf
instalado. Você pode instalá-lo fazendosudo 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
- apenas a parte “head” é lida por resolvonf: a parte “base” é de alguma forma controlada por dnsmasq
- 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
- 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
-
Pesquise “Conexão de rede”
-
Abra
-
Em seguida, selecione WiFi ou Ethernet, ou o que quer que você esteja usando, e clique em editar. Você receberá isso:
-
Selecione ipv4 nas guias
-
Selecione endereços apenas no método
-
Insira seu nome DNS abaixo e salve-o
-
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 comnmcli 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:
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 ..
- encontre isto:
dns-nameservers
- se você não encontrar, basta digitar lá
- 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:
- comentário
dns=dnsmasq
em/etc/NetworkManager/NetworkManager.conf
- 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
-
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.
dns=none
em/etc/NetworkManager/NetworkManager.conf
(veja detalhes em minha resposta abaixo).