Outils pour utilisateurs

Outils du site


Panneau latéral

Mycélium

Documentation

Travaux

Membres

Wiki

documentation:technique:systemd-resolved

systemd-resolved

La proposition ici est d'utiliser systemd-resolved.

Si vous utilisez le VPN de Mycélium, nous verrons ci-dessous comment faire en sorte qu'OpenVPN fournisse à systemd-resolved le résolveur que nous préconisons.

Nous verrons également comment faire en sorte que toutes les requêtes DNS effectuées sur votre système circulent vers le résolveur assigné au lien réseau VPN, et ne fuitent pas par d'autres liens réseau.

Si vous souhaitez utiliser systemd-resolved, il est déconseillé de configurer vos interfaces réseau manuellement via /etc/network/interfaces. En effet, ifup viendra écraser le contenu du fichier /etc/resolv.conf, sans ordonner à systemd-resolved d'acquérir le résolveur DNS par DHCP. Il est donc conseillé d'utiliser systemd-networkd dans cette situation.

Mettre en place systemd-resolved

Activer systemd-resolved :

sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

Pour que le système l'utilise, on peut faire l'une des deux manipulations qui suivent, ou bien les 2.

Faire en sorte que systemd-resolved soit utilisé en priorité, en éditant la politique de nsswitch, dans /etc/nsswitch.conf :

hosts:          files resolve dns 

Rediriger resolv.conf vers le résolveur local de systemd :

sudo ln -sf /run/systemd/resolve/stub-resolv.conf resolv.conf

OpenVPN et systemd-resolved (optionnel)

Si vous souhaitez acquérir les informations de résolveur DNS lors de la connexion au VPN.

Pour que OpenVPN puisse interagir avec systemd-resolved via DBUS.

Installer le paquet openvpn-systemd-resolved :

sudo purge resolvconf
sudo apt install openvpn-systemd-resolved

Section à insérer dans la configuration du client OpenVPN, avant la section des certificats :

; https://github.com/jonathanio/update-systemd-resolved
script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
; chemin correspondant au paquet debian
up /etc/openvpn/update-systemd-resolved
; peut être utile en cas de déconnexion/reconnexion du VPN
up-restart
down /etc/openvpn/update-systemd-resolved
down-pre

Tester

Vérifier quels résolveurs sont utilisés :

resolvectl status

Note : Le résolveur doit apparaître dans resolvectl status pour que resolvectl query mycelium-fai.org fonctionne.

Démarrer le service OpenVPN, puis revérifier quel résolveur est alors utilisé.

Effectuer une requête de résolution :

resolvectl query mycelium-fai.org

Notes diverses

ifup et ifdown, ou un redémarrage de l'ordinateur peuvent provoquer une réécriture du fichier /etc/resolv.conf, mais le lien symbolique devrait être préservé si vous l'avez créé.

Le contenu du fichier ne sera restauré par systemd-resolved que si celui-ci est sollicité via DBUS (c'est le cas si vous utilisez systemd-networkd, ou que vous utilisez le hook OpenVPN).

Annexe 1 : resolved.conf

Si systemd-resolved ne reçoit pas d'information sur les résolveurs DNS, il utilise la valeur de FallbackDNS par défaut, qui correspond à Cloudflare/Quad9/Google.

Nous conseillons donc de toujours renseigner une valeur dans /etc/systemd/resolved.conf, ci-dessous les résolveurs de FDN :

FallbackDNS=80.67.169.12 80.67.169.40 2001:910:800::12 2001:910:800::40

systemd-resolved semble poser problème lorsque vous chercherez à résoudre des domaines appartenant à votre réseau local s'il ne s'agit pas de FQDN. Voir par ici. Une “solution” a été apportée, dans le fichier de configuration de resolved, assurez-vous de la présence de la ligne suivante :

ResolveUnicastSingleLabel=yes

Annexe 2 : fuite des requêtes DNS

Infos : https://github.com/jonathanio/update-systemd-resolved#dns-leakage

Par défaut, les requêtes DNS fuitent et sont envoyées sur tous les liens réseau (wifi, ethernet, tun0…), la réponse acceptée étant la première reçue.

Il est possible de forcer la résolution DNS du système à utiliser le résolveur préconisé par le VPN.

Dans la configuration du client OpenVPN, on lui demande de router les requêtes DNS pour *tous* les domaines :

dhcp-option DOMAIN-ROUTE .

Dans le cas contraire où l'on a confiance dans le résolveur utilisé pour les autres liens, le comportement par défaut convient, mais il est aussi possible de forcer l'usage du résolveur assigné au lien de notre interface réseau (non VPN) en utilisant systemd-networkd :

Dans la configuration de son interface réseau /etc/systemd/network/<interface>.network, on ajoute à la section [Network] :

[Network]
Domains=.

Documentation complémentaire

documentation/technique/systemd-resolved.txt · Dernière modification: 2021/01/11 13:02 de cacatoes