Dans cet article nous allons voir un problème de réplication Active Directory. Nous disposons de 2 Contrôleurs de domaine « LAB1dc1.lab1.lan » et « LAB1dc2.lab1.lan ». Les 2 contrôleurs de domaines sont en Windows 2012 R2. Les 2 serveurs n'ont pas répliqués depuis une période assez longue et supérieur au « TimeTombStoneLifeTime ».
Le « TimeTombStoneLifeTime » indique la durée pendant laquelle un objet est marqué comme supprimé avant qu'il ne le soit entièrement. Pendant cette période le contrôleur de domaine sur lequel la suppression a été faite avertit les autres. Lorsque ce temps est dépassé et que certain contrôleur de domaine n'ont pas été averti il y aura une incohérence dans l'annuaire car certains n'auront plus l'objet alors qu'il existera encore sur d'autres. Les services Active Directory détecte qu'un contrôleur de domaine n'a pas répliqué depuis une période supérieur au TombStoneLifeTime et refusera de le faire pour protéger l'intégrité. En générale il est recommandé de ne pas forcer la réplication et de reconstruire un contrôleur de domaine propre. Il peut arriver que la réinstallation de ce dernier pose d'autres problèmes surtout si celui-ci cumule d'autres rôles.
Détection du problème
Nous pouvons constater le problème de réplication à plusieurs niveaux :
Dans la console « sites et service Active Directory » en faisant un clic droit et « répliquer maintenant » nous obtenons un message d'erreur, indiquant que la durée de vie de désactivation a été dépassé.
En ligne de commande en tant qu'administrateur, la commande repadmin /showrepl montre que la dernière réussite de la réplication est très ancienne. L'erreur 8614 indique que la durée de de désactivation a été dépassée comme dans l'image précédente.
On retrouve également l'erreur « 2042 » d'Active Directory dans l'observateur d'événement sous le journal « Directory Service » :
Comment déterminer la durée de vie des objets supprimés « TombStoneLifeTime » ?
Avec la commande PowerShell suivante :
repadmin /showattr . "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=<forest root domain>,DC=<top level domain>"
Il est également possible de vérifier la valeur de l'attribut avec AdsiEdit.
Comment vérifier la réplication et la date de dernière réussite de la Synchronisation sur un contrôleur de domaine
Avec la commande suivante :
repadmin /showrepl (repadmin est le principal outil pour vérifier la réplication de l'annuaire)
Sur l'image di dessous vous retrouvez la date de la dernière tentative de réplication ainsi que celle de la dernière réussite.
Que faut-il faire ?
Il existe plusieurs causes possibles à ce problème. Si vous avez encore un ancien contrôleur de domaine antérieur à Windows 2003 SP1 il est recommandé de le mettre à jour. Un autre élément à vérifier est la synchronisation des horloges dans votre domaine, en effet il est possible qu'un de vos DC aient fait un retour en arrière dans le temps. Enfin l'utilisation de Snapshot de machine virtuelle ou une restauration d'un contrôleur de domaine sans restauration propre de l'état du système peut également créer des problèmes. A partir de Windows 2012, les contrôleurs de domaine sont en mesure de détecter le retour en arrière si l'hôte qui les héberge est compatible avec le « GenerationID ».
Comme nous avons vu au début de cet article, le fait que la réplication ne fonctionne pas, est un élément voulu afin d'éviter la corruption de l'annuaire. Nous allons voir un peu plus loin comment autoriser la réplication. Néanmoins, avons de forcer la réplication il est préférable de nettoyer les objets en attente et cette opération n'est pas forcément simple.
Pour cela il faut utiliser « repadmin /removelingeringobjects ». Vous trouverez plus de détail dans le lien suivant : https://technet.microsoft.com/fr-fr/library/cc794840%28v=ws.10%29.aspx?f=255&MSPPError=-2147217396 .
Si la première lecture vous a découragé vous pouvez utiliser l'utilitaire « repldiag.exe » disponible sur codeplex dans le lien suivant http://activedirectoryutils.codeplex.com/releases/view/13664
Si vous ajouter l'option « /OutputRepadminCommandLineSyntax » vous pourrez voir le détail des commandes « repadmin /removelingeringobjets » que l'outil a exécuté pour vous.
Enfin pour autoriser la réplication sur les contrôleurs de domaine il faut suffit d'exécuter la commande :
repadmin /regkey <hostname> +allowDivergent
Ensuite nous pouvons relancer la synchronisation :
Une fois que la réplication est de nouveau correcte n'oublie pas de remettre le paramètre sur sa valeur d'origine avec la commande :
repadmin /regkey <hostname> -allowDivergent
Pour finir je vous recommande également la lecture de l'article suivant qui parle d'un autre élément de sécurité de la réplication d'Active Directory :