Gestion du réseau

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

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 automatique



Sans configuration particulière, systemd-resolved prend la configuration DNS depuis le gestionnaire réseau utilisé sur le système.
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=



La configuration DNS de l'interface réseau est prioritaire sur la configuration globale.
Si vous avez une configuration DNS dans votre gestionnaire réseau, supprimez-la.
Si votre configuration réseau est récupérée par DHCP, demandez au gestionnaire réseau de ne pas récupérer les DNS. Cela se fait avec UseDNS=false dans la section [DHCPv4] pour systemd-networkd.


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
/code]
 
-- 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[/code]
 
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[/code]
 
La résolution inverse fonctionne également :
[code=bash]resolvectl query 192.168.21.250[/code]
 
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[/code]
 
Avec le domaine spécifié, un nom court sera automatiquement complété avec le suffixe DNS paramétré :
[code=bash]resolvectl query pve1[/code]
 
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
Cette page a été vue 6936 fois