Gestion du réseau

systemd : La résolution de nom avec systemd-resolved

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



Comme vous le savez, systemd est plus qu'un système d'init et de gestion des services !

systemd-resolved est un service de résolution de noms qui fait partie de l'écosystème systemd. Il gère la résolution de noms DNS et fournit des fonctionnalités avancées telles que la prise en charge de DNSSEC (DNS Security Extensions) et la gestion des résolutions de noms locales.

Dans cet article, nous allons voir comment gérer systemd-resolved.


Le réseau avec systemd-resolved



Concepts



Pour faire fonctionner le réseau avec systemd, nous aurons besoin de :
systemd-networkd.service => Le service réseau
systemd-resolved.service => Le service de résolution de nom

A noter que systemd-resolved peut être utilisé sans systemd-networkd.

Cet article se concentre uniquement sur systemd-resolved.
On a détaillé systemd-networkd dans cet article : systemd : Le réseau avec systemd-networkd


Le fichier historique /etc/resolv.conf n'est plus à éditer manuellement avec systemd-resolved.
Un commentaire le précise d'ailleurs :
Code :
# This is /run/systemd/resolve/stub-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.
#


Statut de systemd-resolved



Pour savoir si on utilise systemd-resolved, et avoir des informations sur la configuration, on pourra utiliser la commande suivante :
Code BASH :
resolvectl status


Ce qui renvoie sur mon système :
Code :
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: foreign
Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google 2606:4700:4700::1111#cloudflar
e-dns.com
                      2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google
          DNS Domain: ~.
Link 2 (ens18)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
         Protocols: +DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.21.251
       DNS Servers: 192.168.21.251


On va avoir des informations intéressantes dans cette sortie ... assez verbeuse.
On voit notamment le serveur DNS utilisé :
Code :
Current DNS Server: 192.168.21.251


La liste des DNS que le système connait (ici, j'en ai qu'un mais on pourrait en avoir plusieurs):
Code :
       DNS Servers: 192.168.21.251


Les "Fallback DNS Servers" (serveurs DNS de secours) sont des serveurs DNS qui sont utilisés lorsque les serveurs DNS principaux configurés ne répondent pas ou échouent à résoudre une requête.

Définir les DNS



--- Configuration automatque --

Sans configuration particulière, systemd-resolved prend la configuration DNS depuis le gestionnaire réseau utilisé sur le système.

La commande resolvctl l'indique avec l'instruction :
Code :
    resolv.conf mode: foreign


Le mode "foreign" est une indication que la gestion des résolutions DNS est déléguée à ce gestionnaire réseau externe (NetworkManager, systemd-networkd, netplan, etc.). Cela permet une gestion plus dynamique et flexible des configurations DNS, mais nécessite que les utilisateurs s'appuient sur ces services pour toute modification des paramètres DNS.

Configuration manuelle



Si on souhaite configurer les DNS manuellement avec systemd-resolved, on créera le dossier /etc/systemd/resolved.conf.d s'il n'existe pas :
Code BASH :
mkdir /etc/systemd/resolved.conf.d


On pourra définir les DNS manuellement en créant et en éditant le fichier /etc/systemd/resolved.conf.d/dns_servers.conf
Code BASH :
vim /etc/systemd/resolved.conf.d/dns_servers.conf


Voici un exemple :
Code :
[Resolve]
DNS=192.168.21.251 192.168.21.252
Domains=linuxtricks.lan


La ligne DNS peut contenir plusieurs serveurs, en adresse IPv4 ou IPv6. Séparer par une espace les adresses.
Domains= permet de traiter d'ajouter le suffixe en cas de nom court. (si on tente de résoudre pve1, le suffixe sera ajouté pour résoudre le FQDN pve1.linuxtricks.lan)


On pourra définir les DNS de secours
Code BASH :
vim /etc/systemd/resolved.conf.d/fallback_dns.conf


Voici un exemple :
Code TEXT :
[Resolve]
FallbackDNS=1.1.1.1


Si on souhaite désactiver complètement cette fonctionalité, on pourra laisser l'option vide comme ceci :
Code TEXT :
[Resolve]
FallbackDNS=


Après chaque modif, il faut redémarrer le service :
Code BASH :
systemctl restart systemd-resolved


On peut relancer la commande resolvectl status pour voir la config appliquée :
Code TEXT :
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: foreign
  Current DNS Server: 192.168.21.251
         DNS Servers: 192.168.21.251 192.168.21.252
Fallback DNS Servers: 1.1.1.1
          DNS Domain: linuxtricks.lan
Link 2 (ens18)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
         Protocols: +DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.21.251
       DNS Servers: 192.168.21.251


-- Utiliser resolvectl pour tester les résolutions ---

La commande resolvectl permet également de résoudre des noms de domaine, et remplit la même fonction que la commande host classique.

Voici un exemple de résolution :
Code BASH :
resolvectl query pve1.linuxtricks.lan


Voici la réponse :
Code :
pve1.linuxtricks.lan: 192.168.21.250           -- link: ens18
-- Information acquired via protocol DNS in 1.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network


La résolution inverse fonctionne également :
Code BASH :
resolvectl query 192.168.21.250


Ce qui donne :
Code TEXT :
192.168.21.250: pve1.linuxtricks.lan           -- link: ens18
-- Information acquired via protocol DNS in 1ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network


Avec le domaine spécifié, un nom court sera automatiquement complété avec le suffixe DNS paramétré :
Code BASH :
resolvectl query pve1


Ce qui donne ceci (on voir entre parenthèses le FQDN) :
Code TEXT :
pve1: 192.168.21.250                           -- link: ens18
      (pve1.linuxtricks.lan)
-- Information acquired via protocol DNS in 1.6ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network