systemd : La résolution de nom avec systemd-resolved
Table des matières
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.
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 :
Pour savoir si on utilise systemd-resolved, et avoir des informations sur la configuration, on pourra utiliser la commande suivante :
Ce qui renvoie sur mon système :
On va avoir des informations intéressantes dans cette sortie ... assez verbeuse.
On voit notamment le serveur DNS utilisé :
La liste des DNS que le système connait (ici, j'en ai qu'un mais on pourrait en avoir plusieurs):
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.
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.
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 :
On pourra définir les DNS manuellement en créant et en éditant le fichier /etc/systemd/resolved.conf.d/dns_servers.conf
Voici un exemple :
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
Voici un exemple :
Si on souhaite désactiver complètement cette fonctionalité, on pourra laisser l'option vide comme ceci :
Après chaque modif, il faut redémarrer le service :
On peut relancer la commande resolvectl status pour voir la config appliquée :
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=
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