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