DNS en 127.0.0.53 de systemd está ignorando algunas búsquedas

14

El DNS del sistema lovated en 127.0.0.53 parece estar funcionando, excepto cuando busco máquinas locales por nombre. Pero si los busco y especifico específicamente el servidor DNS local (mi enrutador), obtengo la respuesta adecuada. Pero el archivo de configuración dice que también está usando el enrutador como dirección de búsqueda. ¿Alguna idea?

Estoy ejecutando Ubuntu 18.04 en mi computadora portátil Dell.

Resultados incorrectos:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

También falla

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

Resultados correctos:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

Información de configuración 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

Información de configuración NetworkManager

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

[ifupdown]
managed=false

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

Entonces, ¿cómo hago para que nslookup devuelva la respuesta correcta? El enlace 3 parece ser la información correcta (mi conexión wifi) y mi DNS en el enrutador está devolviendo la respuesta correcta, pero el caché local nunca intenta buscar la dirección (o eso parece).

Schworak
fuente
Eche un vistazo a esta publicación y vea si eso resuelve su problema: askubuntu.com/questions/1034064/…
No tengo dns = dnsmasq en mi archivo de configuración. Estoy actualizando mi pregunta para mostrar esto.
schworak
¿Qué versión de Ubuntu está ejecutando y también puede actualizar su publicación con la configuración de IP?
Estoy ejecutando Ubuntu 18.04 en una computadora portátil Dell.
schworak
¿podría intentarlonslookup -i wlp3s0 web1
cmak.fr

Respuestas:

9

Su archivo resolv.conf no apuntaba al lugar incorrecto, ../run/systemd/resolve/stub-resolv.conf es donde se supone que debe apuntar de manera predeterminada.

El problema es que systemd-resolvedno pasa nombres sin puntos al DNS. Aparentemente esto está funcionando "como fue diseñado". Consulte este problema de github que establece que "resuelto nunca permitirá que las búsquedas de etiqueta única se filtren en DNS de unidifusión".

Ya sea o no de acuerdo con el razonamiento de que la cuestión github, no es una manera de solucionar este problema. Ni siquiera requiere hacer ningún cambio en la configuración predeterminada en su máquina Ubuntu:

  1. Primero, el DNS de su LAN debe tener un nombre de dominio.

    Si está utilizando dnsmasq, agregue lo siguiente /etc/dnsmasq.confen su servidor DNS:

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

    Ahora debería poder resolver los nombres de host de LAN si agrega el dominio:

    nslookup web1.your-domain
    
  2. En segundo lugar, asegúrese de que el nombre del dominio de su LAN también esté configurado en su servidor DHCP si es diferente de su servidor DNS. En mi servidor DHCP (mi enrutador), esta configuración se llama simplemente "Nombre de dominio".

    Si luego renueva su contrato de arrendamiento de DHCP en su casilla de Ubuntu, debería ver aparecer una directiva de búsqueda en /run/systemd/resolve/stub-resolv.conf:

    nameserver 127.0.0.53
    search your-domain
    

Ahora mirando hacia arriba web1lo ampliará a web1.your-domain, que luego se resolverá usando 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

Tenga en cuenta que si usa en diglugar de nslookup, digno usa la ruta de búsqueda de forma predeterminada; use su +searchopción para habilitar eso.

Laurence Gonsalves
fuente
Antes de reiniciar buscó web1.mydomain.com muy bien. Pero, por supuesto, buscar solo web1 no funcionó. Así que reinicié y durante toda mi vida no tengo idea de dónde está recogiendo el dominio de Comcast, pero ahora si busco web1, responde con la IP correcta pero muestra el dominio de Comcast en lugar de mi dominio. Se resuelve, así que no estoy demasiado preocupado, pero ¿qué diablos?
schworak
@schworak Weird! ¿Su servidor DHCP también es su módem Comcast? ¿Ves ese dominio que aparece en /etc/resolv.confo en la salida de cualquiera nmcli -g allo systemd-resolve --status? ¿Quizás intente ver lo que hay en su contrato de arrendamiento de DHCP ?
Laurence Gonsalves
No es el módem comcast. Tengo un enrutador SysLink con DDWRT ejecutándose. La configuración de comcast se reemplaza totalmente. El nombre del comcast aparece en el archivo resolv.conf que se genera automáticamente al arrancar. No estoy demasiado preocupado por eso, pero es extraño.
schworak
@LaurenceGonsalves Muchas gracias por el enlace del problema github. Había encontrado soluciones al problema, pero esto realmente me ayudó a resolver el problema raíz.
Gregory Arenius
19

Encontré la solución que funcionó para mí.

mi archivo resolv.conf apuntaba al lugar equivocado. Esto parece un error en Ubuntu como sucedió en mi computadora portátil (la máquina en la que noté este problema por primera vez) y en una nueva instalación del Servidor Ubuntu 18.04.

El valor por defecto

$ ls -l /etc/resolv.conf

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

Eliminé esto y señalé el archivo correcto. Después de reiniciar, esto resolvió mi problema. E incluso pude cambiar las redes en mi computadora portátil y el DNS cambió correctamente. Por supuesto, cuando estoy en redes externas no puedo resolver ninguna de mis máquinas locales, pero eso es de esperar. Tan pronto como cambio a mi red local, todas las máquinas locales se resuelven correctamente porque mi enrutador es el DNS.

La solución

$ 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

Después de eso, todo funcionó como esperaba y 127.0.0.53 ya no se usa en absoluto.

Los resultados correctos

$ 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
Schworak
fuente
Por favor reporte este error usando ubuntu-bug resolvconf.
Chai T. Rex
Cuando empiezo a enviarlo, dice resolvconf (no instalado). ¿Resolvconf y systemd-resolve son lo mismo?
schworak
systemd-resolvees proporcionado por el systemdpaquete , así que intente en su ubuntu-bug systemdlugar.
Chai T. Rex
¡Gracias! Nunca antes había usado esa función de informe de errores. Muy agradable.
schworak
1
Wow, esto es una locura. Gracias. ¿Se solucionó este error alguna vez? ¿Es un error específico de Docker? Creo que resolv.confestá configurado de esta manera para el DNS de la red de Docker Bridge ¿verdad?
void.pointer