Table des matières
Open Table des matières
Introduction : pourquoi ton DNS mérite un bon ménage
Spoiler : si tu administres un réseau Windows avec DHCP, ton serveur DNS accumule probablement des enregistrements obsolètes. Résultat ? Des conflits de noms, des résolutions foireuses et des utilisateurs qui viennent te voir avec des mines d’enterrement.
Le DNS Scavenging est cette fonctionnalité magique qui fait le ménage automatiquement. Et contrairement à ton bureau, ça marche vraiment.
🧩 Comment fonctionne le DNS Scavenging ?
Le processus repose sur deux concepts principaux :
- No-Refresh Interval : Période pendant laquelle les mises à jour d’un enregistrement DNS ne sont pas acceptées pour éviter une charge excessive sur le serveur.
- Refresh Interval : Période pendant laquelle l’enregistrement doit être mis à jour avant d’être marqué comme obsolète.
Une fois ces deux périodes écoulées, l’enregistrement devient éligible au Scavenging et peut être supprimé automatiquement par le serveur DNS.
En gros : si un enregistrement n’a pas donné signe de vie pendant No-Refresh + Refresh, il dégage.
🛡️ Les avantages du DNS Scavenging
- ✅ Nettoyage automatique des anciens enregistrements
- ✅ Réduction des erreurs de résolution dues aux enregistrements obsolètes
- ✅ Optimisation des performances du serveur DNS
- ✅ Moins de galères pour toi (et ça, c’est le plus important)
⚙️ Configuration du DNS Scavenging
Prérequis avant de commencer
⚠️ IMPORTANT : Assure-toi que tes serveurs DHCP et DNS sont correctement synchronisés. Sinon, tu risques de supprimer des enregistrements encore actifs.
Configuration via PowerShell (la méthode de pro)
# Activer le scavenging sur le serveur
Set-DnsServerScavenging -ScavengingState $true
# Définir les intervalles (en jours)
Set-DnsServerZoneAging -Name "cafe.local" -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00
# Démarrer immédiatement le processus de scavenging
Start-DnsServerScavenging
Pour activer le scavenging sur une zone spécifique
Set-DnsServerZoneAging -Name “tondomaine.local” -Aging $true
Vérifier la configuration
Get-DnsServerZoneAging -Name “tondomaine.local”
🔧 Configuration avancée : les réglages fins
Pour les environnements complexes avec plusieurs contrôleurs de domaine, assure-toi de bien maîtriser la gestion des rôles FSMO avant de déployer le scavenging.
Synchronisation avec DHCP
Si tu utilises DHCP (et tu devrais), synchronise les durées :
# Durée de bail DHCP : 8 jours
# No-Refresh Interval : 7 jours
# Refresh Interval : 7 jours
# Total avant suppression : 14 jours
Set-DnsServerZoneAging -Name "tondomaine.local" -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00
Activer les logs détaillés
Set-DnsServerDiagnostics -SaveLogsToPersistentStorage $true -EnableLogFileRollover $true
Vérifier les enregistrements éligibles au scavenging
Get-DnsServerResourceRecord -ZoneName “tondomaine.local” | Where-Object {$_.TimeStamp -lt (Get-Date).AddDays(-14)}
🚨 Pièges à éviter (ou comment ne pas tout casser)
❌ Erreur n°1 : Activer sans tester
Le piège : Activer le scavenging sur toutes les zones d’un coup. La solution : Teste d’abord sur une zone de dev ou non-critique.
❌ Erreur n°2 : Mauvaise synchronisation DHCP
Le piège : Intervalles DNS plus courts que les baux DHCP. La solution : Durée DHCP = No-Refresh + Refresh + marge de sécurité.
❌ Erreur n°3 : Pas de sauvegarde
Le piège : « Ça va bien se passer… » La solution : Sauvegarde ta zone DNS avant d’activer le scavenging.
# Export de sauvegarde
dnscmd /zoneexport tondomaine.local tondomaine_backup.txt
Vérifier l’état du scavenging
Get-DnsServerScavenging
Voir les dernières suppressions
Get-WinEvent -FilterHashtable @{LogName=‘DNS Server’; ID=1541}
Statistiques de la zone
Get-DnsServerStatistics
Script de monitoring
# Script à lancer en tâche planifiée
$ZoneName = "tondomaine.local"
$Records = Get-DnsServerResourceRecord -ZoneName $ZoneName
$StaleRecords = $Records | Where-Object {$_.TimeStamp -lt (Get-Date).AddDays(-30)}
if ($StaleRecords.Count -gt 100) {
# Envoyer une alerte
Write-EventLog -LogName "Application" -Source "DNS Monitoring" -EventId 1001 -Message "Trop d'enregistrements obsolètes détectés : $($StaleRecords.Count)"
}