Configuration et gestion du DNS sous Linux

La configuration du système de noms de domaine (DNS) sous Linux peut varier selon la distribution et le gestionnaire de réseau utilisé. Ce guide explore deux approches principales : la gestion manuelle classique et l'utilisation du service moderne systemd-resolved.

Approche 1 : Gestion manuele via resolv.conf

Cette méthode est privilégiée pour les serveurs statiques ou les environnements où un contrôle total est nécessaire, sans interférence des services d'automatisation.

1. Neutralisation du lien symbolique

Sur de nombreux systèmes modernes (comme Ubuntu ou Debian), /etc/resolv.conf est un lien symbolique vers un fichier géré dynamiquement. Pour reprendre la main, il faut suppprimer ce lien :

# Vérification de la nature du fichier
ls -l /etc/resolv.conf

# Suppression du lien s'il existe
sudo rm /etc/resolv.conf

2. Désactivation du service systemd-resolved

Pour éviter que le système ne tente de recréer le fichier ou de gérer la résolution en arrière-plan :

sudo systemctl disable --now systemd-resolved

3. Création du fichier de configuration

Créez un nouveau fichier /etc/resolv.conf avec vos serveurs DNS préférés :

sudo nano /etc/resolv.conf

Exemple de configuration avec Cloudflare et Google :

# DNS Publics
nameserver 1.1.1.1
nameserver 8.8.4.4

# Options de performance
options timeout:1 attempts:3 rotate

4. Test de la résolution

Utilisez l'utilitaire host ou nslookup pour confirmer que les requêtes aboutissent :

host debian.org
# Ou via une requête spécifique
nslookup archlinux.org

Approche 2 : Configuration via systemd-resolved

Il s'agit de la méthode recommandée pour les systèmes de bureau ou les serveurs utilisant systemd, car elle gère intelligemment le cache et les configurations par interface.

1. Liaison avec le stub local

Assurez-vous que /etc/resolv.conf pointe vers le résolveur local de systemd :

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

2. Modification des paramètres globaux

Éditez le fichier de configuration principal du service :

sudo vi /etc/systemd/resolved.conf

Modifiez la section [Resolve] comme suit :

[Resolve]
DNS=9.9.9.9 149.112.112.112
FallbackDNS=8.8.8.8
DNSSEC=yes
DNSOverTLS=opportunistic
Cache=yes

3. Configuration dynamique par interface

Vous pouvez assigner des serveurs DNS spécifiques à une interface réseau (par exemple eth0) sans redémarrer tout le système :

# Identifier l'interface
ip link show

# Appliquer la configuration
sudo resolvectl dns eth0 1.1.1.1 1.0.0.1
sudo resolvectl domain eth0 "~."

4. Application et validation

Redémarrez le service pour appliquer les changements globaux et vérifiez l'état :

sudo systemctl restart systemd-resolved
resolvectl status

Gestion des conflits avec NetworkManager

Si NetworkManager écrase vos paramètres, créez un fichier de configuration pour lui demander d'ignorer la gestion DNS :

# Création d'un fichier de surcharge
sudo bash -c 'cat > /etc/NetworkManager/conf.d/dns.conf <<EOF
[main]
dns=none
EOF'

# Redémarrage de NetworkManager
sudo systemctl restart NetworkManager

Tableau comparatif des méthodes

Critère Manuel (resolv.conf) systemd-resolved
Facilité Très simple Modérée
Fonctionnalités Basique Cache, DNSSEC, DNS over TLS
Persistance Risque d'écrasement si mal configuré Native
Usage recommandé Conteneurs, serveurs minimalistes Postes de travail, serveurs modernes

Diagnostic rapide

En cas de problème de connexion, vérifiez le cheminement des paquets DNS :

# Voir quel serveur répond réellement
dig google.com | grep "SERVER"

# Suivre la trace de résolution
dig +trace kernel.org

Étiquettes: Linux DNS systemd-resolved networking resolv.conf

Publié le 23 juin à 23h33