Servidor de nomes errado definido por resolvconf e NetworkManager

34

Meu servidor de DNS é 192.168.1.152.

Esse DNS é fornecido aos clientes pelo DHCP. Os clientes Windows na minha LAN resolvem os nomes corretamente usando esse DNS, mas minha VM do Ubuntu não.

A VM está configurada com rede de ponte e está sendo fornecida adequadamente ao servidor DNS, mas meus nomes de host locais não estão sendo resolvidos pelo nslookup ou pelos navegadores.

Aqui está nslookupum dos meus domínios locais:

# nslookup unraid.local
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find unraid.local: SERVFAIL

Aqui está o que ele deve resolver usando meu servidor DNS:

# nslookup unraid.local 192.168.1.152
Server:     192.168.1.152
Address:    192.168.1.152#53

Name:   unraid.local
Address: 192.168.1.152

/etc/resolv.conf tem um servidor de nomes errado:

# 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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53

Eu executei esse comando. Em servidores DNS, confusamente, ele especifica o servidor correto (e meu gateway padrão).

root@ubuntu:~# systemd-resolve --status
Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.152
                      192.168.1.1

Não quero "codificar" o IP do servidor DNS em um arquivo de configuração porque não poderei resolver quando mudar de rede.

Como faço para que o resolvconf e o NetworkManager configurem automaticamente o IP do servidor DHCP /etc/resolv.conf?

FireSpore
fonte

Respostas:

37

Tente editar /etc/systemd/resolved.conf, adicionando o servidor DNS desejado:

mude isso:

[Resolve]
#DNS=

para isso (mas use o que você deseja - este é um exemplo):

[Resolve]
DNS=192.168.1.152

depois disso, reinicie o serviço:

service systemd-resolved restart

E quando você verificar o status, deverá ver

$ systemd-resolve --status
Global
         DNS Servers: 192.168.1.152

      DNSSEC NTA: 10.in-addr.arpa
                  16.172.in-addr.arpa
                  168.192.in-addr.arpa
                  17.172.in-addr.arpa
                  18.172.in-addr.arpa
                  19.172.in-addr.arpa
Leandro Noskoski
fonte
Aqui está o systemd-resolve --status depois de alterar o /etc/systemd/resolved.conf pastebin.com/AeUFQkyB Os navegadores ainda não conseguem resolver os nomes também.
FireSpore 4/11
12
systemd está tão quebrado. O DHCP informa ao host o que deve ser o DNS (e várias outras configurações de rede), você não precisa alterar nenhum arquivo no host para que isso funcione.
teknopaul
4
Não parece ótimo, você vai ter que fazer isso toda vez que você mudar de servidor DNS / network
Victor
1
Você precisaria reconfigurar toda vez que o IP do DNS mudar (por exemplo, em redes diferentes).
213 Victor Victor
34

Erro conhecido do systemd .

Solução temporária sem necessidade de reconfigurar se o IP do DNS mudar:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot
teknopaul
fonte
2
Esta solução funcionou um pouco, os nomes de host e comandos de nslookup resolver adequadamente, mas o wget e navegadores não são
FireSpore
1
isso é correto ... o erro atual é que o link para /etc/resolv.confvem de /run/systemd/resolve/stub-resolv.confque é bollox deve ser /run/systemd/resolve/resolv.conf nota que /etc/resolv.confrealmente não existe em ambos os casos
Sr. Heelis
@ FireSpore: pingfunciona então? hoste nslookupresolva nomes de host de maneira diferente de pingou wget. Pode ser necessário procurar /etc/nsswitch.confuma solução.
HongboZhu 24/06
9

Finalmente consegui uma solução para esse problema no ubuntu 17.10. Por padrão, esta versão do Ubuntu usa systemd-resolved, e espero que seja estável para as próximas versões.

Para usar o DNS personalizado em vez do cache resolvido pelo sistema local, faça o seguinte:

  1. adicione novos servidores de nomes. Edite o arquivo /etc/systemd/resolved.confcomo sudoer. Aqui eu comentei a entrada DNS e coloquei meu DNS [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. cancele o link simbólico real para /etc/resolv.conf

  3. crie um novo link simbólico sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. reinicie o serviço sudo service systemd-resolved restart
  5. reinicie o gerenciador de rede sudo systemctl restart networking

E agora, se você digitar um nome fornecido pelo seu add dns, verá o registro resolvido dig nexus.default.svc.cluster.mydomain

O último passo é atualizar a ordem da resolução em /etc/nsswitch.conf, colocando o dns antes do mdns4_minimal

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname
Fabio Fumarola
fonte
1
Você precisaria reconfigurar toda vez que o IP do DNS mudar (por exemplo, em redes diferentes).
213 Victor Victor
Victor, você tem a melhor solução? esta é a mesma se você usar net config estática
Fabio Fumarola
Esta resposta funciona para configurações estáticas e dinâmicas: askubuntu.com/a/974482/343617 #
Victor Victor
obrigado, a solução que eu apontei era estática. Concordo #
Fabio Fumarola
Isso só funcionou para mim em uma nova instalação 18.04
JamesCW 30/04
1

Elaborei um script que resolve o problema da Netplan que atualmente não suporta a capacidade de substituir servidores DNS e ordem de pesquisa de domínio fornecidos pelo DHCP. Ele cria o arquivo yaml do Netplan e configura o systemd-resolved para funcionar conforme o esperado.

################## Start Netplan config (renderer: NetworkManager)
#  Some useful commands for customisation
# NetConn=$(nmcli device show|grep GENERAL.CONNECTION|head -n1|awk '{print $2}')
# IP=$(nmcli device show|grep IP4.ADDRESS|head -n1|awk '{print $2}')
# GATEWAY=$(nmcli device show|grep IP4.GATEWAY|head -n1|awk '{print $2}')
# sed -i 's/renderer: networkd/renderer: NetworkManager/' //etc/netplan/01-netcfg.yaml
######################################
systemctl start NetworkManager
NIC=$(nmcli device show|grep GENERAL.DEVICE|head -n1|awk '{print $2}')

#####   create Netplan yaml config file
cat >/etc/netplan/01-netcfg.yaml <<EOF 
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
  network:
   version: 2
   renderer: NetworkManager
   ethernets:
EOF
echo "    ${NIC}:" >> /etc/netplan/01-netcfg.yaml
cat >>/etc/netplan/01-netcfg.yaml <<EOF
      dhcp4: yes
      nameservers:
        search: [abc.domain.edu, def.domain.edu]
        addresses: [10.10.11.22, 10.10.11.23]

EOF

#work around DNS resolv bug
systemctl stop systemd-resolved
sed -i 's/#DNS=/DNS=10.10.11.22 10.10.11.23/' /etc/systemd/resolved.conf
sed -i 's/#Domains=/Domains=abc.domain.edu def.domain.edu' /etc/systemd/resolved.conf
systemctl start systemd-resolved
systemctl restart NetworkManager
netplan apply
reboot
############### End Netplan Config
Wildstalker
fonte
1

A solução que funcionou para mim está postada aqui no meu blog

Use o editor nano para editar esses 2 arquivos

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

Adicione servidores DNS que você deseja usar

nameserver 9.9.9.9
nameserver 127.0.0.1

Em seguida, reinicie o serviço

service systemd-resolved restart

Checagem final:

cat /etc/resolv.conf

Fazer nslookup

nslookup google.com 

Eu apenas usei isso e corrigi o problema no meu laptop em casa, mas em algum momento no futuro, quando estiver fora da minha rede doméstica, posso ver que isso causará problemas, porque o servidor DNS primário e secundário ainda será minha casa. servidores com seus endereços LAN.

ookangzheng
fonte
2
Você precisaria reconfigurar toda vez que o IP do DNS mudar (por exemplo, em redes diferentes).
213 Victor Victor
não é elegante, mas às vezes o gcloud do trabalho sabota minha hora de dormir.
Rodrigo Ferrari
A edição /etc/resolv.confnão funciona, pois o arquivo será substituído durante a systemd-resolvedreinicialização. Apenas edite /etc/systemd/resolved.conf. Veja minha resposta aqui: askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…
EnzoR 2/18
1

O seu /etc/resolv.confnão é o problema. systemd-resolvedo padrão é não configurado, por isso falha em todas as pesquisas. Sinta-se à vontade para reclamar sobre Não configurado vs Um padrão razoável.

Adicione manualmente servidores de nomes a systemd-resolved. (editando pelo comentário de Olorin abaixo para adicionar mkdir, /etcnão corrigir o caminho /lib, a fim de sobreviver às atualizações do sistema)

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/00-my-dns-server-is.conf

Adicionar:

[Resolved]
Cache=yes
DNS=192.168.1.152

Então...

sudo systemctl daemon-reload

systemd-resolvedé inteligente, mas, desconfigurado como é, pelos mantenedores de pacotes, apenas PARECE estúpido porque os mantenedores de pacotes não acreditam em um padrão razoável. Podemos colocar 13 servidores raiz da Internet, também conhecidos como "djb way", ou 10 servidores opennic: https://pastebin.com/JBfYVVtG ou os três servidores opennic mais rápidos, conforme medido pelo namebench. Além de servidores de nomes ISP, com certeza. Além do Google, com certeza. systemd-resolvednão é o problema. Eu sou o problema

BobDodds
fonte
Embora você provavelmente não queira editar um arquivo /usr/lib- eles provavelmente serão substituídos na atualização do pacote. Eu acho que um arquivo correspondente em algum lugar /etc/systemdé o caminho a percorrer (ele já deve ter um /etc/systemd/resolved.confpronto para ser editado pelos administradores).
Olorin 23/01
1
man resolved.conf.d, com d, sim /etc/systemd/resolved.d é o local. Percebo que muitas vezes temos que mkdir /etc/[path}.d. bob @ laptop l /etc/systemd/resolved.conf.d ls: não é possível acessar '/etc/systemd/resolved.conf.d': não
existe
0

No meu sistema, encontrei um link simbólico ruim: /etc/resolv.confera um link simbólico que aponta para/run/systemd/resolve/stub-resolv.conf

Este arquivo contém apenas uma linha:

nameserver 127.0.0.53#53

Como resultado, a pesquisa de DNS da rede local geralmente estava ausente.

Então, em vez disso, mudei /etc/reolv.confpara apontar para/run/systemd/resolve/resolv.conf

e agora funciona corretamente.

Bánó Gábor
fonte
0

É estranho, mas a única solução que funcionou para mim no Ubuntu 18.04 foi a que encontrei aqui :

Primeiro, mude /etc/resolv.confdefinindo o servidor de nomes desejado :

# nano /etc/resolv.conf

Defina, por exemplo,

nameserver 8.8.8.8

E então faça

# chattr +i /etc/resolv.conf

Isso protege o /etc/resolv.confarquivo para que ninguém possa modificá-lo, incluindo o usuário root.

Artem S
fonte
-3

Eu tenho o mesmo problema. Cada reinicialização, nada será resolvido. Eu desinstalei tudo e o reinstalei cerca de 50 vezes. Simplesmente está quebrado.

então a correção é .... "basta aplicar algumas configurações toda vez que você inicializar seu PC, o que permite que 90% dos nomes de host sejam resolvidos, mas as atualizações e atualizações do wget e apt-get falharão aleatoriamente sem motivo"

cat /etc/systemd/resolved.conf

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp

Ao usar o Ubuntu 17.10 Desktop, você deve editar o arquivo que diz NÃO EDITAR ESTE ARQUIVO BLAH BLAH BLAH

Bem, essa é a única maneira que funciona ~!

root@nas:~# cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 8.8.8.8

Portanto, remova o IP 127.0.0.53 como servidor de nomes e insira outro, google por exemplo. Parece que meu endereço IP de DNS real também não resolve nomes de host (embora funcione em outras 10 máquinas e dispositivos em casa), mas o Google funciona bem.

ravery
fonte