Active Directory : comment automatiser la sauvegarde des zones DNS ?
Sommaire
I. Présentation
Dans cet article, nous allons découvrir comment automatiser les sauvegardes des zones DNS sur un contrôleur de domaine Active Directory.
Dans un environnement Microsoft, qu'il soit sous Active Directory ou non, le service DNS joue un rôle essentiel. Il assure la traduction des noms de machines en adresses IP et inversement, tout en permettant la résolution des noms de domaine externes, qu'ils soient sous forme d'alias ou non. Il est donc primordial de veiller à ce que ces zones DNS soient disponibles et à jour.
Cette disponibilité peut être assurée par le nettoyage régulier des zones DNS, dont nous discuterons prochainement, ou par la mise en place de sauvegardes régulières, qui réduiront la durée d'indisponibilité en cas de problème.
II. Intérêt de sauvegarder les zones DNS
La sauvegarde des zones DNS est essentielle pour restaurer une zone en cas de problèmes tels que des anomalies, des suppressions accidentelles ou des dysfonctionnements. De plus, elle permet de comparer facilement les différents enregistrements à l'aide de tableaux Excel ou de PowerShell.
- Cas de figure :
Il peut arriver que des enregistrements statiques de serveurs soient supprimés de la zone, entraînant ainsi un dysfonctionnement.
De même, une erreur lors du nettoyage de la zone peut entraîner la suppression accidentelle d'enregistrements dynamiques, tels que ceux des clusters ou des objets enfants CNO (Cluster Name Oobject) avec des pointeurs SQL comme Always On, ce qui perturberait la production.
Dans de tels cas, une restauration est nécessaire.
- Zone par défaut :
Par défaut, la zone principale est disponible dans le chemin suivant :
C:\windows\System32\DNS
- Limite :
La sauvegarde des contrôleurs de domaine avec différents outils (Veeam, Commvault, Windows Backup) ne permet de sauvegarder que le fichier en cours.
Cela signifie que seule la dernière sauvegarde sera disponible. Par exemple, si la sauvegarde des VMs s'effectue le soir à 21h, vous perdriez toutes les modifications effectuées durant la journée en cas de restauration. Il est alors nécessaire de remonter la sauvegarde pour avoir accès à plusieurs versions des zones et explorer les enregistrements pour une comparaison.
Note : Il est à noter que les zones intégrées à l'AD sont déplacées dans la corbeille pour une durée correspondante au tombstone. Il est alors possible de restaurer ces zones après suppression seulement à l'aide des commandes PowerShell. La restauration des enregistrements seuls est un peu plus compliquée et sera traitée dans un prochain article.
III. Sauvegarde de zones DNS
La console DNS offre la possibilité d'exporter la zone sous différents formats tels que ".txt" ou ".csv". Cependant, cette méthode est réciproque à la zone sauvegardée présente dans le chemin par défaut, mais ne permet pas de restaurer toutes les zones.
De plus, il n'est pas pratique d'effectuer cela manuellement sur toutes les zones plusieurs fois par jour.
A. Utilisation des commandes
- La commande Dnscmd
La commande Dnscmd, un outil en ligne de commande apparu dans Windows Server 2003, permet de gérer le DNS en ligne de commande.
Elle propose diverses actions de maintenance sur la zone DNS, telles que le nettoyage de la zone, la suppression du cache, et surtout l'exportation partielle ou complète de la zone. Malheureusement, cette commande a été dépréciée par Microsoft et n'est pas intégrée à PowerShell pour faciliter la gestion des sorties.
Une interface de ligne de commande pour la gestion des serveurs DNS. Cet utilitaire est utile dans les scripts des fichiers batch pour automatiser des tâches courantes de gestion DNS, ou pour effectuer une installation sans assistance simple et la configuration de nouveaux serveurs DNS sur votre réseau.
Différentes options sont disponibles. Voici quelques exemples.
# Définit l'heure actuelle sur tous les horodateurs dans une zone ou d'un nœud
Dnscmd /ageallrecords
# Efface le cache du serveur DNS
Dnscmd /clearcache
# Réinitialise la configuration du serveur ou une zone DNS
Dnscmd /config
Par ailleurs, DNSCMD permet d'exporter la configuration DNS à l'aide de la commande suivante :
Dnscmd /ZoneExport
Le problème, c'est que Dnscmd exporte toujours le fichier dans le même répertoire, ce qui peut entraîner l'écrasement de sauvegardes précédentes.
Il n'est pas possible d'enregistrer dans un autre dossier sans ajouter une action dans le script qui regroupera le contenu et modifiera ou déplacera le nom du dossier.
Pour pallier cette limite, Microsoft a introduit des commandes PowerShell permettant de mieux exploiter le DNS.
- Les commandes PowerShell
La commande "Export-DnsServerZone" permet d'exporter une zone dans un dossier. Cependant, comme pour le Dnscmd, il n'est pas possible de changer le dossier racine de sauvegarde.
Pour effectuer une sauvegarde de toutes les zones, nous allons utiliser la commande PowerShell permettant de lister les zones DNS présentes, à savoir "Get-DnsServerZone". Ceci va nous permettre de créer un script de sauvegarde des zones DNS.
Nous exclurons les zones inverses loopback par défaut "0", "127" et "255" car elles ne contiennent pas d'enregistrement et n'existent pas de réseaux 255 ou 0. Ces enregistrements ne sont pas possibles et génèrent une erreur lors de la sauvegarde.
B. Script de sauvegarde
Le script permet de créer un dossier au format date et heure/minutes du jour pour sauvegarder les zones à l'intérieur, ce qui permet d'avoir plusieurs enregistrements par jour/semaine et évite l'écrasement. Généralement, cette partie n'est pas répliquée ni nettoyée.
La taille des zones DNS pour les grandes entreprises ne dépasse généralement pas quelques Ko, voire 4 ou 5 Mo, ce qui nous permet d'avoir plusieurs sauvegardes sans risque d'occuper trop d'espace sur le disque.
Intéressons-nous au code du script et à sa logique de fonctionnement.
La partie suivante permet de créer un dossier horodaté.
$backupDate = Get-Date -Format 'yyyy-MM-dd-HHmm'
$backupDirectory = "$env:SystemRoot\system32\dns\Backup\$backupDate"
New-Item -ItemType Directory -Path $backupDirectory -ErrorAction Stop
Ensuite, nous exclurons les zones non utiles, et effectuerons une sauvegarde.
$zonesToExclude = @( '0.in-addr.arpa', '127.in-addr.arpa', '255.in-addr.arpa')
Try {
Write-Output "Backup zonename : $($_.ZoneName)"
Export-DnsServerZone -Name $_.ZoneName -FileName Backup\$backupDate\Backup.$($_.ZoneName).$zoneBackupDate -ErrorAction Stop
}
C. Utilisation du script
Le script nécessite les droits administratifs du domaine ou d'administrateur DNS pour effectuer la sauvegarde. La commande PowerShell ne permet pas d'effectuer la sauvegarde sur un serveur distant nativement, mis à part l'utilisation de la commande "Invoke-Script".
Il est alors judicieux de l'exécuter sur le contrôleur de domaine. Il n'est pas nécessaire de l'exécuter sur tous les contrôleurs de domaine si les zones sont répliquées. Idéalement le DC ayant le rôle PDC, car c'est celui qui orchestre le plus souvent les changements. Toutefois, le choix peut être décidé selon l'architecture de l'entreprise, notamment en cas d'un foret multi-domaine.
Le script est disponible sur GitHub, ce qui garantira sa maintenance et ses mises à jour, ainsi que d'éventuelles améliorations.
Pour exécuter le script, veuillez l'ouvrir ou copier son contenu à l'aide d'un éditeur ISE, puis cliquez sur "Exécuter".
Vous remarquerez dans la sortie le nom des zones sauvegardées.
Un dossier contenant les sauvegardes est créé dans le chemin par défaut.
Dans le dossier, vous trouverez les enregistrements sous format ".dns". Il est possible d'explorer ces fichiers à l'aide d'un éditeur de texte.
D. Automatisation des sauvegardes
La principale raison du développement du script est la sauvegarde automatisée. Pour cela, nous allons créer une tâche planifiée pour exécuter le script, à l'aide du "Planificateur de tâches" de Windows Server.
Voici les étapes à suivre :
- Mettez d'abord le script dans un dossier accessible sur votre contrôleur de domaine (DC), tel que le dossier "Temp" ou tout autre dossier de votre choix. Dans notre exemple, nous utiliserons le dossier "C:\temp".
- Ouvrez ensuite le Planificateur de tâches et choisissez : "Créer une nouvelle tâche".
- Pour suivre les bonnes pratiques, nous avons créé un dossier "Scripts", mais vous pouvez choisir le dossier de votre choix pour la tâche planifiée.
- Donnez un nom à la tâche.
- Cochez également la case "Exécuter même si l'utilisateur n'est pas connecté". Cela nécessitera la saisie du mot de passe. Il est recommandé d'utiliser un compte de service de type gMSA ou tout autre compte dédié aux tâches/scripts d'automatisation sur les contrôleurs de domaine.
Si vous avez besoin d'aide à ce sujet :
Dans l'onglet "Déclencheurs", cliquez sur "Nouveau".
Choisissez l'heure qui vous convient pour l'exécution de la sauvegarde automatique.
Dans notre cas, nous avons choisi d'exécuter la sauvegarde à 10h et à 15h. Cette planification permet de minimiser l'écart entre les enregistrements DNS sauvegardés et la sauvegarde complète du contrôleur de domaine prévue pour le soir à 21h. De cette manière, nous nous assurons d'avoir peu d'écart dans les enregistrements DNS tout au long de la journée, ainsi que lors de la sauvegarde principale.
Répétez l'opération pour créer un second déclencheur correspondant à la seconde sauvegarde.
Dans l'onglet "Actions" cliquez sur "Nouveau"
Choisissez ensuite "Démarrer un programme", saisissez "Powershell.exe" et dans les arguments, entrez :
-file <chemin complet vers votre script>
Validez ensuite par "OK".
Pour vérifier si le script s'est exécuté correctement, rendez-vous dans l'historique des tâches après avoir exécuté la tâche planifiée une première fois.
Votre contrôleur de domaine crée désormais automatiquement des sauvegardes de toutes vos zones DNS.
Nous verrons dans un prochain article comment restaurer une zone DNS à partir d'une sauvegarde.
V. Conclusion
La sauvegarde régulière des zones DNS permet de réduire les interruptions de service en cas de problème et soulage la charge sur les solutions de sauvegarde qui ne peuvent pas effectuer de sauvegarde en continu. Il est utile d'avoir plusieurs sauvegardes des zones DNS pour pouvoir les comparer facilement en cas de besoin à l'aide d'un fichier CSV ou Excel, ou pour récupérer une entrée supprimée.
Il est à noter que les zones intégrées dans l'Active Directory seront toujours disponibles et pourront être récupérées à partir d'une procédure différente, que nous aborderons dans un prochain article.