system-resolved

system-resolved

En av de mest spännande (?) nya funktionerna i Linux-världen de senaste åren är Systemd, Lennart Poetterings nya svit av systemkomponenter som ersätter diverse olika system för init-hantering, nätverk, loggning osv så vidare.

Tanken är bra men enkelheten i de tidigare systemen ersattes av en helt annan nivå av komplexitet, och transparansen försvann ut ur fönstret. Så när man dyker på problem med systemd-komponenter så är det lite mer komplicerat att lösa än att kika i systemloggen och ändra i en konfigurationsfil.

Det senaste jag brottades med var systemd-resolvd som en tid efter en uppgradering av Ubuntu från 16.04 till 22.04 slutade svara på DNS-uppslag. Filen /etc/resolv.conf var inte tom men pekade mot den lokala systemd-resolved-tjänsten och efter en del grävande kunde jag konstatera att den i sin tur inte hade någon intern lista på DNS-servrar, trots att dessa fanns konfigurerade i nätverkskonfigurationen.

> resolvectl status

Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: foreign
      DNS Domain: DOMAINS

Link 2 (ens160)
...
> cat /run/systemd/resolve/resolv.conf

# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

search DOMAINS

Inga DNS-servrar fanns tillgängliga för systemd-resolved att fråga.

Så efter ytterligare lite grävande hittade jag att det gick att manuellt konfigurera DNS-servrar genom att skapa en lokal konfigfil och konfigurera servrarna i den.

> sudo mkdir -p etc/systemd/resolved.conf.d
> sudo nano /etc/systemd/resolved.conf.d/dns_servers.conf
[Resolve]
DNS=<server-ip-1> <server-ip-2> <server-ip-3>
Domains=~.

Därefter räckte det med en omstart av systemd-resolved för att applicera förändringarna.

> sudo systemctl restart systemd-resolved

Därefter körde jag om de första kommandona, och fick ett helt annat svar.

> resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: foreign
Current DNS Server: <server-ip-1>
       DNS Servers: <server-ip-1> <server-ip-2> <server-ip-3>
        DNS Domain: ~.

Link 2 (ens160)
...
> cat /run/systemd/resolve/resolv.conf

# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver <server-ip-1>
nameserver <server-ip-2>
nameserver <server-ip-3>
search DOMAINS

En sista koll med nslookup verifierade att allt återigen fungerade.

Pust och frust.