DNS no 127.0.0.53 do systemd está ignorando algumas pesquisas

7

O DNS do systemd adorado em 127.0.0.53 parece estar funcionando, exceto quando eu consultar máquinas locais pelo nome. Mas se eu consultar por eles e especificar especificamente o servidor DNS local (meu roteador), então recebo a resposta correta. Mas o arquivo de configuração diz que também está usando o roteador como o endereço de pesquisa. Alguma idéia?

Estou executando o Ubuntu 18.04 no meu laptop Dell.

Resultados incorretos:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

Também falha

$ nslookup -i wlp3s0 web1
nslookup: couldn't get address for 'web1': not found

Resultados corretos:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

Configuração Info systemd-resolve

$ 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 3 (wlp3s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.1
          DNS Domain: wp.comcast.net

Link 2 (enp2s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Configuração do NetworkManager de informações

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Então, como obtenho o nslookup para retornar a resposta correta? O link 3 parece ser a informação correta (minha conexão wifi) e meu DNS no roteador está retornando a resposta correta, mas o cache local nunca tenta procurar o endereço (ou assim parece).

    
por schworak 26.05.2018 / 15:26

2 respostas

2

Seu arquivo resolv.conf não estava apontando para o lugar errado - ../run/systemd/resolve/stub-resolv.conf é onde deveria apontar por padrão.

O problema é que systemd-resolved não passa nomes não pontuados para o DNS. Aparentemente isso está funcionando "como projetado". Veja esta questão do github que afirma que "resolvido nunca permitirá que pesquisas de rótulo único vazem para o DNS unicast".

Se você concorda ou não com o raciocínio nesse problema do github, é uma maneira de corrigir isso. Não é necessário fazer alterações na configuração padrão da sua máquina Ubuntu:

  1. Primeiro, o DNS da sua LAN deve ter um nome de domínio.

    Se você estiver usando o dnsmasq, adicione o seguinte a /etc/dnsmasq.conf em seu servidor DNS:

    expand-hosts
    domain=your-domain # replace "your-domain" with domain of your choice
    

    Agora você deve conseguir resolver os nomes de host da LAN se adicionar o domínio:

    nslookup web1.your-domain
    
  2. Em segundo lugar, verifique se o nome do domínio da sua LAN também está definido no servidor DHCP, se for diferente do servidor DNS. No meu servidor DHCP (meu roteador), essa configuração é chamada apenas de "Nome de domínio".

    Se você renovar sua concessão de DHCP em sua caixa do Ubuntu, deverá ver uma diretiva de busca em /run/systemd/resolve/stub-resolv.conf :

    nameserver 127.0.0.53
    search your-domain
    

Agora, ao procurar web1 , ele será expandido para web1.your-domain , que será resolvido usando o DNS.

$ nslookup web1
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   web1.your-domain
Address: 192.168.1.107

Se você usar dig em vez de nslookup , dig não usará o caminho de pesquisa por padrão - use sua opção +search para ativar isso.

    
por Laurence Gonsalves 04.09.2018 / 22:49
7

Encontrei a correção que funcionou para mim.

meu arquivo resolv.conf estava apontando para o lugar errado. Isso parece um bug no Ubuntu, como aconteceu no meu laptop (a máquina pela qual eu notei esta edição) e em uma nova instalação do Ubuntu 18.04 Server.

O padrão

$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 39 Apr 26 12:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Eu deletei isso e apontei para o arquivo correto. Após a reinicialização, isso resolveu meu problema. E consegui até trocar de rede no meu laptop e o DNS foi trocado corretamente. É claro que, quando em redes externas, não consigo resolver nenhuma das minhas máquinas locais, mas isso é esperado. Assim que eu voltar para a minha rede local, todas as máquinas locais resolvem corretamente porque o meu roteador é o DNS.

A correção

$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 32 May 29 08:48 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

$ sudo reboot

Depois disso, tudo funcionou como eu esperava e 127.0.0.53 não está mais sendo usado.

Os resultados corretos

$ nslookup web1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

$ nslookup google.com

Server:     192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.7.174
Name:   google.com
Address: 2607:f8b0:4004:80e::200e
    
por schworak 29.05.2018 / 18:08