Comprendre et gérer le DNS sous Linux
Le DNS traduit `pixzo.nl` en une adresse IP, et cet article montre comment configurer, tester et déboguer cette résolution sur une machine Linux moderne.
Vous avez besoin d'un système Linux avec systemd 255 ou plus récent (Ubuntu 24.04 LTS, Debian 13 ou Fedora 41 conviennent), d'un accès root via `sudo`, et d'une interface réseau fonctionnelle. Les commandes ci-dessous utilisent `resolvectl` et `dig` ; installez ce dernier avec `sudo apt install dnsutils` sur Debian/Ubuntu ou `sudo dnf install bind-utils` sur Fedora.
Pourquoi le DNS sous Linux fonctionne autrement que vous ne le pensez
Sur les anciens systèmes, vous écriviez vos serveurs de noms dans `/etc/resolv.conf` et c'était réglé. Sur les distributions modernes, ce fichier est souvent un lien symbolique vers `/run/systemd/resolve/stub-resolv.conf`, géré par **systemd-resolved**. C'est un résolveur stub DNS/DNSSEC avec cache et validation : il intercepte toutes les requêtes des applications locales, met les réponses en cache, valide les signatures DNSSEC et prend en charge en plus LLMNR et MulticastDNS pour les réseaux locaux.
L'avantage, c'est la rapidité et la sécurité. L'inconvénient, c'est que modifier `/etc/resolv.conf` à la main ne sert à rien — votre modification disparaît au redémarrage suivant ou est simplement ignorée. C'est le prix d'un résolveur central : un seul endroit à configurer, mais il faut connaître le bon endroit.
Étapes
1. Vérifiez que systemd-resolved est actif
```bash systemctl status systemd-resolved ```Vous cherchez `Active: active (running)`. Si le service est sur `inactive` ou `failed`, votre système retombe sur `/etc/resolv.conf` et tout ce qui suit fonctionne différemment. Démarrez-le alors avec `sudo systemctl enable --now systemd-resolved`.
2. Consultez l'état actuel du résolveur
```bash resolvectl status ```Cela affiche, par interface, quels serveurs DNS, domaines de recherche et paramètres DNSSEC sont actifs. Faites attention à la ligne `Current DNS Server` et au bloc `DNSSEC`. Si DNSSEC est sur `no`, les réponses falsifiées ne sont pas détectées — acceptable pour la plupart des postes de travail, pas pour des serveurs.
3. Configurez votre propre serveur DNS par interface
```bash sudo resolvectl dns eth0 9.9.9.9 149.112.112.112 ```Vous utilisez ainsi Quad9 au lieu des serveurs fournis par DHCP. Le choix de Quad9 n'est pas une recommandation : il bloque les domaines malveillants connus, ce qui signifie qu'il bloque parfois aussi quelque chose que vous vouliez justement atteindre. Si vous voulez un contrôle total, utilisez votre propre résolveur ou un fournisseur sans filtrage.
Ce réglage est volatile. Après un redémarrage ou un nouveau bail DHCP, vous l'avez perdu.
4. Rendez le réglage permanent
```bash sudo mkdir -p /etc/systemd/resolved.conf.d sudo tee /etc/systemd/resolved.conf.d/dns.conf > /dev/null <<'EOF' [Resolve] DNS=9.9.9.9 149.112.112.112 FallbackDNS=1.1.1.1 8.8.8.8 DNSSEC=allow-downgrade DNSOverTLS=opportunistic EOF sudo systemctl restart systemd-resolved ````DNSSEC=allow-downgrade` valide lorsque l'upstream le prend en charge et continue si ce n'est pas le cas. `DNSSEC=yes` est plus strict mais casse dès qu'un résolveur de la chaîne ne suit pas. `DNSOverTLS=opportunistic` chiffre votre trafic DNS si le serveur le propose. Cela cache vos requêtes à ceux qui lisent le réseau, mais ce n'est pas une garantie — un attaquant qui bloque le trafic TLS vous force à revenir en clair.
5. Testez la résolution
```bash dig pixzo.nl +short ```Vous obtenez une ou plusieurs adresses IP. Si cela prend plus d'une seconde, il y a un problème avec l'upstream ou avec la route vers celui-ci.
6. Testez la validation DNSSEC
```bash dig sigfail.verteiltesysteme.net +dnssec dig sigok.verteiltesysteme.net +dnssec ```Le premier domaine doit renvoyer un `SERVFAIL`, le second un `NOERROR` avec le flag `ad` dans l'en-tête. Si vous obtenez `NOERROR` sur les deux, votre résolveur ne valide pas et fait aveuglément confiance à ce qu'il reçoit.
7. Videz le cache après une modification DNS
```bash sudo resolvectl flush-caches resolvectl statistics ```Les statistiques affichent `Cache Misses` et `Cache Hits`. Après un flush, les misses sont élevés et les hits à zéro. Sans flush, vous continuez à voir les anciens enregistrements jusqu'à expiration du TTL — parfois des heures, parfois des jours, selon ce que le propriétaire de la zone a configuré.
8. N'utilisez le prefetch DNS que là où il apporte quelque chose
Ajoutez dans le head HTML d'une page qui charge des ressources externes :
```html ```Cela fait faire au navigateur la recherche DNS à l'avance, avant que l'utilisateur ne clique sur le lien. Depuis septembre 2025, c'est largement pris en charge dans les navigateurs modernes. Cela n'aide que pour les domaines que vous n'avez pas encore visités ; lors d'une deuxième visite, la réponse est déjà dans le cache du navigateur et l'indication ne fait rien.
Vérification
Vérifiez que tout est correct avec :
```bash resolvectl status | grep -E 'Current DNS|DNSSEC|DNSOverTLS' dig pixzo.nl +short dig sigfail.verteiltesysteme.net +dnssec | grep -E 'status|flags' ```Vous voulez voir vos serveurs configurés, une adresse IP pour `pixzo.nl`, et `SERVFAIL` pour le domaine sigfail. Si l'un des trois ne correspond pas, la configuration n'est pas passée.
Problèmes fréquents
**`resolvectl` renvoie `Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found`** systemd-resolved ne tourne pas. Sur WSL2 et dans certains conteneurs, c'est normal ; là, vous gérez le DNS via `/etc/resolv.conf` ou le runtime du conteneur. Démarrez le service sur une machine ordinaire avec `sudo systemctl enable --now systemd-resolved` et vérifiez que `/etc/resolv.conf` pointe vers `/run/systemd/resolve/stub-resolv.conf`.
**Les modifications dans `/etc/resolv.conf` n'ont aucun effet** Le fichier est un lien symbolique ou il est écrasé. Vérifiez avec `ls -l /etc/resolv.conf`. Si c'est un lien symbolique vers `/run/systemd/...`, utilisez l'approche `resolved.conf.d` de l'étape 4.
**DNSSEC renvoie `SERVFAIL` sur des domaines qui fonctionnent normalement dans le navigateur** Votre résolveur est plus strict que le navigateur, qui ignore souvent DNSSEC. Mettez `DNSSEC` sur `allow-downgrade` au lieu de `yes` et redémarrez le service. Pour des serveurs où la validation est obligatoire, c'est un choix assumé : vous perdez la garantie, vous gagnez en accessibilité.
Le DNS est une chaîne de confiance dans laquelle chaque maillon peut casser quelque chose, et le vôtre est rarement le premier où cela se gâte.