DNS Scavenging Windows Server : automatiser le nettoyage DNS

Tu connais cette sensation ? Ton serveur DNS ressemble à un placard qu’on n’a jamais rangé : plein d’anciens enregistrements qui traînent depuis des mois. Le DNS Scavenging, c’est Marie Kondo pour ton serveur DNS.

Photo by Samm Henshaw on Giphy

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

Configuration via l’interface graphique

Pour ceux qui préfèrent les clics aux lignes de commande :

  1. Ouvre la console DNS Manager
  2. Clic droit sur ton serveur DNSPropriétés
  3. Onglet « Avancé » → Coche Activer le nettoyage automatique des enregistrements obsolètes
  4. Définis l’intervalle de nettoyage (recommandé : 7 jours)

Configuration par zone DNS

# 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

Surveillance et logs

# 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

📊 Surveillance et maintenance

Vérification périodique

# 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)"
}

🎯 Bonnes pratiques

Configuration recommandée pour un environnement standard

  • No-Refresh Interval : 7 jours
  • Refresh Interval : 7 jours
  • Durée bail DHCP : 8 jours minimum
  • Fréquence de scavenging : Toutes les 24h

Pour les environnements critiques

  • No-Refresh Interval : 14 jours
  • Refresh Interval : 14 jours
  • Durée bail DHCP : 30 jours
  • Tests préalables obligatoires

🔗 Intégration avec l’écosystème Windows

Le DNS Scavenging fonctionne parfaitement avec :

  • Active Directory (évidemment)
  • DHCP dynamique
  • Réplication DNS multi-sites

Si tu gères des environnements mixtes Linux/Windows, consulte mon guide sur comment connecter Ubuntu à Active Directory pour optimiser la configuration DNS.


Conclusion : DNS propre, admin heureux

Photo by www.gifbay.com on Giphy

Avec le DNS Scavenging correctement configuré, ton serveur DNS reste propre automatiquement. Plus besoin de faire le ménage manuellement tous les mois.

Prochaine étape ? Pense à automatiser la surveillance avec des scripts PowerShell et des alertes. Ton futur toi te remerciera.

Et si ça se casse ? Tu as fait une sauvegarde avant d’activer le scavenging… hein ? HEIN ?