Sous Linux avec systemd pour connaßtre votre configuration DNS vous devez utiliser la commande suivante :
resolvectl status --no-pager
Cette commande vous donnera les informations sur les serveurs DNS actuels connu du systÚme et ce pour chaque interface réseau.
Ici le paramĂštre --no-pager
est destinĂ© Ă ne pas mettre en pause lâaffichage Ă chaque fois que la page de la console a Ă©tĂ© remplie, son usage est surtout requis pour les scripts.
Noter que si la commande resolvectl nâest pas disponible, vous devrez utiliser la commande systemd-resolve :
systemd-resolve --status --no-pager
Le service systemd-networkd
Le service systemd-networkd gĂšre les configurations rĂ©seau. Il dĂ©tecte et configure les pĂ©riphĂ©riques rĂ©seau Ă mesure quâils apparaissent ; il peut Ă©galement crĂ©er des pĂ©riphĂ©riques rĂ©seau virtuels. Il fait partie du paquet systemd inclus dans la plupart des systĂšmes Linux rĂ©cents.
Ce service permet de prendre en compte la complexitĂ© grandissante des rĂ©seaux modernes, qui ont souvent deux piles IP (IPv4 et IPv6) qui cohabitent et de nombreuses interfaces rĂ©seaux : RJ45, Wifi, USB, mais Ă©galement les rĂ©seaux virtuels locaux (docker) ou distant (sĂ©curitĂ©)âŠ
Ce service est hautement configurable ; ce qui a comme consĂ©quence quâil peut ĂȘtre assez compliquĂ© de modifier la configuration de base.
Le service systemd-resolved.service
Pour ceux qui connaissent Linux
depuis un petit moment, ce service remplace dnsmasq â et Ă noter que ces services sont incompatibles lâun avec lâautre, au sens que si vous avez les deux services sur la mĂȘme machine vous risquez que la rĂ©solution DNS ne fonctionne pas.
Vous devez donc vous assurer que la résolution est bien active via ce service :
systemctl status systemd-resolved.service
La commande resolvectl
La commande resolvectl permet de résoudre les noms de domaine, les adresses IPV4 et IPv6, les enregistrements de ressources DNS et les services ; introspecter et reconfigurer le résolveur DNS.
Les commandes resolvectl et resolvconf permettent conjointement dâĂ©changer (utilisation, configuration) avec le service (systemd-resolved.service).
Fonctionnement général :
- Si vous donner un nom dâhĂŽte, vous obtiendrez son adresse IP,
- Si les paramĂštres spĂ©cifiĂ©s sont formatĂ©s comme des adresses IPv4 ou IPv6, lâopĂ©ration inverse sera effectuĂ©e et un nom dâhĂŽte sera rĂ©cupĂ©rĂ© pour les valeurs spĂ©cifiĂ©es.
Lâusage le plus basique de la commande est :
resolvectl query www.example.org
qui produit un résultat du type :
www.example.org: 93.184.216.34 -- link: enp3s0
2606:2800:220:1:248:1893:25c8:1946 -- link: enp3s0
-- Information acquired via protocol DNS in 1.0ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: cache
Lâoption --cache=BOOL
permet de ne pas utiliser le cache (par défaut la valeur est true
), lorsque la valeur est false
les rĂ©solutions DNS sont faites Ă lâaide du rĂ©seau et non pas Ă lâaide du cache local.
resolvectl --cache=false query www.example.org
qui produit un résultat du type :
www.example.org: 2606:2800:220:1:248:1893:25c8:1946 -- link: enp3s0
93.184.216.34 -- link: enp3s0
-- Information acquired via protocol DNS in 5.0ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network
La commande systemd-resolve (est obsolĂšte)
systemd-resolve peut ĂȘtre vu comme le prĂ©dĂ©cesseur de resolvectl puisque câĂ©tait cette commande qui Ă©tait disponible jusquâĂ la version 239 de systemd.
Si votre systĂšme ne supporte pas encore resolvectl et qu'il utilise systemd rĂ©fĂ©rez-vous au billet đ§ Systemd et le DNS (ObsolĂšte).
Comparaison de résolution avec nslookup et host
On peut noter que le résultat est proche de ce que donne nslookup :
nslookup www.example.org
Qui retourne quelque chose comme :
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: www.example.org
Address: 93.184.216.34
Name: www.example.org
Address: 2606:2800:220:1:248:1893:25c8:1946
Ou encore de host :
host example.com
Qui affiche cela :
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0 .
 Trouver le ou les DNS utilisés
Il y avait un gros manque depuis lâarrivĂ©e de systemd autour de la vĂ©rification de quel DNS Ă©tait pris en compte par le systĂšme. Il nây avait pas vraiment de moyen de le savoir, puisque les mĂ©thodes utilisĂ©es au paravant donne comme rĂ©sultat 127.0.0.1 (qui et en fait le service systemd-resolved.service).
resolvectl résout ce manque :
resolvectl dns
Qui vous donnera quelque chose comme :
Global:
Link 2 (enp3s0): 192.168.1.90
Link 3 (wlo1):
Link 4 (docker0):
Global:
Link 2 (enp3s0): 8.8.8.8 fd0f:ee:b0::1
Link 3 (wlo1):
Link 4 (docker0):
mieux encore, vous pouvez limiter lâaffichage Ă une seule interface :
resolvectl dns enp3s0 # ici 'enp3s0' Ă©tant le nom de lâinterface
qui produit un résultat du type :
Link 2 (enp3s0): 192.168.1.90
Notez que les écritures suivantes sont parfaitement identiques :
resolvectl dns enp3s0
resolvectl -i enp3s0 dns
resolvectl --interface=enp3s0 dns
Changer le ou les DNS dâune interface temporairement
sudo resolvectl dns LINK SERVERâŠ
par exemple :
sudo resolvectl dns enp3s0 8.8.8.8 1.1.1.1
Ce changement sera temporaire, il ne rĂ©sistera pas Ă un redĂ©marrage ou Ă une rĂ©initialisation de lâinterface.
 Utiliser un DNS qui n'est pas connu du systÚme pour résoudre une adresse
Dans ce cas, on souhaite utilisé un DNS qui n'est pas connu du service systemd-resolved.service. La solution se trouve donc ailleurs:
Avec nslookup câest possible et fort simple, la syntaxe est la suivante :
nslookup HOTE_A_RESOUDRE SERVEUR_DNS_A_UTILISER
Par exemple :
nslookup www.example.org 8.8.8.8
Le rĂ©sultat est le mĂȘme, mais la rĂ©solution DNS est alors traitĂ©e par le serveur donnĂ©Â :
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.example.org
Address: 93.184.216.34
Name: www.example.org
Address: 2606:2800:220:1:248:1893:25c8:1946
Vider le cache DNS
Pour vider le cache DNS, il suffit dâutiliser :
resolvectl flush-caches
Les commandes de contrĂŽle du DNS
Pour une rĂ©paration et diagnostique rapide (en mode jâai autre chose Ă faire), je vous propose la sĂ©quence de commande suivante :
resolvectl flush-caches ; systemctl status --no-pager -l systemd-resolved.service
Pour faire un diagnostic un peu plus sérieux, voici comment obtenir quelques informations utiles :
- Identifier les DNS utilisés (par interface) :
resolvectl --no-pager status
- Vous pouvez Ă©galement avoir les statistiques de rĂ©solution Ă lâaide de :
resolvectl statistics
Vous pouvez avoir besoin de réinitialiser ces statistiques, pour cela utilisez :
resolvectl reset-statistics
- VĂ©rifier la configuration
La configuration est accessible via le fichier /etc/resolv.conf
mais pour systemd
, et particuliÚrement en conjonction avec une configuration réseau basée sur un DHCP, vous devez que ce fichier est un lien symbolique vers la configuration de systemd
.
Typiquement, la commande :
ls -la --color /etc/resolv.conf
doit avoir comme résultat du type :
lrwxrwxrwx 1 root root 39 mars 16 2019 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Il est probablement pas une bonne idée de modifier le contenu de etc/systemd/resolved.conf
surtout si votre machine doit supporter le protocole DHCP (ce qui est normalement le cas sur un rĂ©seau domestique). Dâailleurs en entreprise, cela me semble Ă©galement une mauvaise idĂ©e que dâintervenir sur ce fichier. Les problĂ©matiques dâinfrastructure devant ĂȘtre rĂ©glĂ©es au niveau de lâinfrastructure.
- Pensez Ă©galement Ă vĂ©rifier votre configuration rĂ©seau Ă lâaide de comme simple comme
ping
ettraceroute
(outraceroute6
).
A notez quâil est dĂ©conseillĂ© dâutiliser les outils graphiques prenant en charge le rĂ©seau en mĂȘme temps que vous modifier votre configuration manuellement, câest pourquoi ce billet nâira pas plus loin sur ce sujet.
Juste une derniĂšre remarque cependant, dans un environnement graphique, on sâattend gĂ©nĂ©ralement Ă ce que le WIFI soit automatiquement connecter sur les rĂ©seaux connus, et sans intervention de lâutilisateur. Dans ce cas, notez que la configuration est modifiĂ©e par les outils qui prennent en charge cette fonctionnalitĂ©.
Liens
- Man page of resolvectl,
- Documentation archlinux de systemd-networkd (Français),
- đ§ systemd-resolve: command not found.
኿