{{tag>netadmin sysadmin linux dns debian ubuntu todo}} ====== systemd-resolved ====== Les versions récentes de nombreuses distributions GNU/Linux utilisent à présent le daemon **systemd-resolved** comme résolveur. Tous les programmes s'exécutant sur le système local ayant besoin de convertir un nom en adresse IP passent par lui. Cette centralisation des recherches DNS est avantageuse pour l'ensemble du système: * Le service propose un cache qui accélère les réponse pour les demandes les plus fréquentes; * Le daemon identifie les serveur non réactifs et évite à chaque programme d'en faire la découverte après timeout; * Les programmes s'adressent au service via un transport local et son aisi plus isolés du réseau. * Le daemon peut être paramétré précisément pour définir quel serveur de noms doit être utilisé en fonction du domaine recherché (routage ou split DNS). ===== Notions de routage et split DNS ===== Dans de nombreux cas, les machines se connectent à différents réseaux physiques ou virtuels. Un ordinateur portable peut par exemple être connecté en parallèle aux réseaux Ethernet et wifi et avoir en plus une connexion VPN vers un réseau d'entreprise. Chacune de ces trois connexions à une interface dédiée dans le noyau à laquelle peuvent être associés plusieurs serveurs de noms. Le //routing// ou routage est le processus décidant quel serveur de noms interroger pour un nom de domaine donné. Le routage du point de vue du DNS ne doit pas être confondu avec le routage des paquets du protocole IP. Dans systemd-resolved, l'interface prévaut. systemd-resolved sélectionne une ou plusieurs interfaces appropriées pour un nom de domaine donné et interroge un des serveurs de noms associés. Ce fonctionnement est désigné par le terme **split DNS**. Pour toute interface, on distingue deux types de domaines: * **routing domains**: domaines de routage; * **search domains**: domaines de recherche. Utilisés conjointement, ils permettent à systemd-resolved de déterminer sur quelles interfaces s'appuyer pour résoudre un nom de domaine donné. Le **search domain** a également pour fonction de servir de suffixe pour les recherches concernant des noms de domaines n'ayant qu'un seul composant (ou label). Par exemple une recherche pour le nom de domaine "test" sera considérée comme une recherche pour le nom de domaine "test.exemple.com" si le search domain vaut "exemple.com" Dans la configuration de systemd-resolved un **routing domain** est préfixé par le caractère ''~'' ===== Exemple commun de routage ===== Considérons une connexion VPN via une interface ''tun0'' avec un domaine de recherche ''network.company.com'' et un domaine de routage ''~company.com''. Si l'on recherche ''mail.network.company.com'', il y a correspondance à la fois sur le domaine de recherche et le domaine de routage, l'interface tun0 sera utilisée pour la résolution de nom. Si l'on demande ''www.company.com'' il y a correspondance sur le domaine de routage ''~compagny.com'', l'interface tun0 est encore utilisée. Si à présent on demande ''www'' (ici la recherche comporte un unique label ou composant) la différence entre **search domain** et **routing domain** commence à se manifester puisque le domaine de recherche est utilisé comme suffixe, la requête devient donc ''www.network.company.com'' sur l'interface tun0. En outre, si plusieurs interfaces possèdent des domaines de recherche, le label unique est suffixé par tous les domaines de recherche déclarés et des recherches sont émises en parallèle. C'est la correspondance la plus longue qui sera retournée. ===== Configuration du daemon ===== Pour altérer la configuration du service, modifier le fichier **/etc/systemd/resolved.conf**. Par défaut systemd-resolved agit comme **stub DNS** (résolveur minimal). Il transmet les requêtes aux résolveurs complets associés aux différentes interfaces du système et conserve un cache. Cela est déclaré dans le fichier de configuration via la directive . . . [Resolve] # Par défaut le service stub dns est actif # Décommenter et changer la valeur pour modifier le comportement par défaut #DNSStubListener=yes Si le fichier a été modifié, relancer le service: systemctl restart systemd-resolved.service On peut être amené à désactiver ce service, par exemple si on souhaite utiliser un autre résolveur. Pour que l'ensemble des applications s'exécutant localement puisse s'appuyer sur la résolution proposée par systemd-resolv.conf, le fichier **''/etc/resolv.conf''** doit être un lien symbolique pointant sur le fichier de configuration généré par le service: **''/etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf''** # Affiche les détail du fichier /etc/resolv.conf ls -l /etc/resolv.conf lrwxrwxrwx 1 root root 37 janv. 18 19:31 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf Ici la configuration est celle attendue. Si ce n'est pas le cas, on peut toujours recréer le lien via la commande: sudo rm /etc/resolv.conf && sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf Pour consulter l'état du service: resolvectl status Lister les serveurs DNS renseignés pour chaque interfaces resolvectl dns Lister les domaines associés aux interfaces resolvectl domain Pour tester une résolution: resolvectl query example.com ===== Redéfinir les serveurs DNS ===== Il est possible de redéfinir dynamiquement les serveurs DNS associés à une interface: sudo resolvectl dns tun0 208.67.220.220 208.67.222.222 Dans l'exemple ci-dessus on associe deux résolveurs DNS à l'interface tun0, les précédents s'ils existent seront remplacés. Pour définir dynamiquement le routage de domaines via une interface sudo resolvectl domain tun0 ~entreprise.local private.entreprise.com ===== Troubleshooting ===== ==== Vider le cache ==== systemd-resolve --flush-caches ==== Logs ==== Pour consulter les logs: journalctl --unit systemd-resolved.service ==== Statistiques ==== sudo systemd-resolve --statistics ===== Références ===== * https://fedoramagazine.org/systemd-resolved-introduction-to-split-dns/ * https://www.linuxuprising.com/2019/07/how-to-flush-dns-cache-on-linux-for.html * https://www.bortzmeyer.org/7719.html * https://www.linuxquestions.org/questions/linux-networking-3/dns-server-priority-in-systemd-resolve-4175680247/