Sommaire
ToggleCet article a pour but d’expliquer :
- Le découpage en contexte de nommage (partitions) d’un annuaire Active Directory.
- Comment sont hébergées les zones DNS et les entrées DNS sur un serveur Windows 2003 et versions ultérieures.
- Comment corriger le problème des zones DNS ForestDNSZones et DomainDNSZones manquantes / corrompues.
Pour effectuer toutes les manipulations expliquées dans cet article, vous devez :
- Disposer d’un domaine Active Directory (1 forêt / 1 domaine) avec 2 contrôleurs de domaine Windows 2003 ou versions ultérieures. Seul le premier contrôleur de domaine doit être serveur DNS. Les deux contrôleurs de domaine doivent être serveur de catalogue global.
- Installer les Supports Tools (contient des outils comme DCDIAG, REPADMIN, ADSIEDIT). Ces derniers sont installés de base sous Windows 2008 R1 et versions ultérieures. Ils sont disponibles sur le CD1 d’installation de Windows 2003 ou téléchargeables à l’adresse suivante : http://www.microsoft.com/en-us/download/details.aspx?id=15326
Le découpage en contexte de nommage d’un annuaire Active Directory
Un annuaire Active Directory est une base LDAP.
Afin d’optimiser la réplication de son annuaire, Microsoft l’a découpé en partition ou contexte de nommage. Pour visualise les partitions d’annuaire, appliquer la procédure suivante :
- Ouvrir la console ADSIEDIT (adsiedit.msc)
- Faire un clic droit sur ADSIEDIT et cliquer sur « Connect to ».
- Sélectionner « Select a well known Naming Context:» et sélectionner « Configuration ».
- Aller dans CN=Partitions
Il est alors possible de voir tous les contextes de nommage / partitions avec leur chemin LDAP.
Un annuaire Active Directory dispose toujours d’une partition de domaine par domaine et d’une partition DomainDNSZones par domaine, d’une unique partition de Configuration, d’une unique partition de schéma, et d’une unique partition ForestDNSZones :
- Une forêt avec 1 domaine contient donc par défaut 5 contextes de nommage / partitions.
- Une forêt avec 2 domaines contient donc par défaut 7 contextes de nommage / partitions.
- Une forêt avec 3 domaines contient donc par défaut 9 contextes de nommage / partitions.
Remarque
En cliquant sur le bouton Advanced dans la console ADSIEDIT, il est possible de se connecter sur le CATALOG GLOBAL et non sur les partitions / contexte de nommage.
Cela peut être utile si vous voulez connaître le contenu du catalogue global qui pour rappel est une copie partielle (seulement certains attributs) de tous les objets de tous les contextes de nommage.
La commande repadmin /showrepl permet aussi de valider le bon fonctionnement de la réplication pour chaque contexte de nommage.
En effet lorsque l’on rencontre des problèmes de réplication, ce n’est pas forcément tous les contextes de nommage qui ne répliquent plus.
Cette commande affiche uniquement les contextes de nommage ForestDNSZones et DomainDNSZones si le contrôleur de domaine est serveur DNS.
Résultat de la commande (avec l’exemple d’une domaine nommé metsys.intra):
<em>Default-First-Site-NameCMLDCQUALIF1</em>
<em> DC Options: IS_GC</em>
<em> Site Options: (none)</em>
<em> DC object GUID: 9ca7500c-d61d-4f9d-9386-e61cfeaa5802</em>
<em> DC invocationID: 9ca7500c-d61d-4f9d-9386-e61cfeaa5802</em>
<em>==== INBOUND NEIGHBORS ======================================</em>
DC=msreport,DC=intra
Default-First-Site-NameDC2003B via RPC
DC object GUID: 9f445e7c-7dc2-4fef-86e4-40475276f555
Last attempt @ 2014-08-10 15:48:11 was successful.
CN=Configuration,DC=metsys,DC=intra
Default-First-Site-NameDC2003B via RPC
DC object GUID: 9f445e7c-7dc2-4fef-86e4-40475276f555
Last attempt @ 2014-08-10 15:48:30 was successful.
CN=Schema,CN=Configuration,DC=metsys,DC=intra
Default-First-Site-NameDC2003B via RPC
DC object GUID: 9f445e7c-7dc2-4fef-86e4-40475276f555
Last attempt @ 2014-08-10 15:34:11 was successful.
DC=DomainDnsZones,DC=metsys,DC=intra
Default-First-Site-NameDC2003B via RPC
DC object GUID: 9f445e7c-7dc2-4fef-86e4-40475276f555
Last attempt @ 2014-08-10 15:49:11 was successful.
DC=ForestDnsZones,DC=metsys,DC=intra
Default-First-Site-NameDC2003B via RPC
DC object GUID: 9f445e7c-7dc2-4fef-86e4-40475276f555
Last attempt @ 2014-08-10 15:49:11 was successful.
Comment sont hébergées les zones DNS et les entrées DNS sur un serveur Windows 2003 et versions ultérieures ?
En terme Microsoft, on dit que la zone est intégrée ou non intégrée à l’annuaire Active Directory.
Dans l’exemple ci-dessous la zone principale MSREPORT.INTRA a été créée sur le serveur DNS et n’est pas intégrée à l’annuaire Active Directory.
Le fichier MSREPORT.INTRA.DNS a été créé dans le dossier c:windowssystem32dns.
<strong>Contenu de fichier MSREPORT.INTRA.DNS (le serveur DNS s’appelle dc2003b.metsys.intra)</strong><br><em>;</em><br><em> ; Database file msreport.intra.dns for msreport.intra zone.</em><br><em> ; Zone version: 2</em><br><em> ;</em><br><em> @ IN SOA dc2003b.metsys.intra. hostmaster.metsys.intra. (</em><br><em> 2 ; serial number</em><br><em> 900 ; refresh</em><br><em> 600 ; retry</em><br><em> 86400 ; expire</em><br><em> 3600 ) ; default TTL</em><br><em> ;</em><br><em> ; Zone NS records</em><br><em> ;</em><br><em> @ NS dc2003b.metsys.intra.</em><br><em> ;</em><br><em> ; Zone records</em><br><em> ;</em><br><em> www A 192.168.99.211<br></em><br>La zone DNS MSREPORT.INTRA va maintenant être intégrée à l’annuaire Active Directory.
- Ouvrir la console DNS (DNSMGMT.MSC).
- Aller dans les propriétés de la zone DNS MSREPORT.INTRA.
- Dans l’onglet « General », cliquer sur le bouton « Chang e » à droite de « Type **** » et cocher la case « Store the zone in Active Directory (available only if DNS server is a domaine controller) ».
Le fichier c:windowssystem32dnsmsreport.intra.dns est alors supprimé.
- Toujours dans l’onglet « General » dans les propriétés de la zone DNS MSREPORT.INTRA, cliquer sur le bouton « Change » à droite de « Replication ****» et sélectionner « To all DNS servers in the Active Directory forest metsys.intra ». La zone DNS est alors hébergée au niveau de la ForestDNSZones.
Nous allons maintenant nous connecter à cette partition pour en voir le contenu et comment la zone et les entrées DNS y sont hébergées.
- Lancer la console ADSIEDIT.MSC.
- Faire un clic droit sur ADSIEDIT et cliquer sur « Connect to ».
- Sélectionner « Select or type a Distinguised name or Naming Context :» et entrer le chemin LDAP suivant pour se connecter au contexte de nommage ForestDNSZones. Dans l’exemple ci-dessous le domaine s’appelle metsys.INTRA Pour se connecter à la ForestDNSZones, il faut donc taper : DC=FORESTDNSZONES,DC=metsys,DC=INTRA
- Développer le contenu de la partition ForestDnsZones.
Les zones DNS sont dans le conteneur CN=MicrosoftDNS.
On peut constater que les zones DNS sont des objets de la classe « dnsZone ».
Les entrées DNS sont des objets de la classe « dnsNode ».
Une entrée DNS réplique donc comme un compte utilisateur via le mécanisme de réplication d’Active Directory. C’est ce qui permet aux serveurs DNS Microsoft de disposer de plusieurs serveurs DNS en lecture / écriture.
- Retourner dans les propriétés de la zone MSREPORT.INTRA.
- Dans l’onglet « General » dans les propriétés de la zone DNS MSREPORT.INTRA, cliquez sur le bouton « Change » à droite de « Replication ****» et sélectionnez « To all DNS servers in the Active Directory domain metsys.intra ». La zone DNS est maintenant hébergée au niveau de la DomainDnsZones.
- Pour visualiser le contenu de cette zone, appliquer la même procédure que ci-dessus. Le chemin de la DomainDnsZones est (exemple d’un annuaire metsys.intra) :
DC=DomainDnsZones,DC=metsys,DC=INTRA.
- Retourner dans les propriétés de la zone MSREPORT.INTRA.
- Dans l’onglet « General » dans les propriétés de la zone DNS MSREPORT.INTRA, cliquez sur le bouton « Change » à droite de « Replication ****» et sélectionnez « To all domain controllers in the Active Directory domain metsys.intra ». La zone DNS est hébergée dans le conteneur System de la partition de domaine msreport.intra.
- Pour visualiser le contenu des zones DNS, lancer la console Active Directory Users and Computers (dsa.msc).
- Aller dans le menu « View » et cliquer sur « Advanced Features ».
- Cliquer sur « System | Microsoft Dns ».
On retrouve les zones DNS (objet dnsZone) et à l’intérieur les entrées DNS sous forme d’objets Active Directory dnsNode.
Comment corriger le problème des zones DNS ForestDNSZones et DomainDNSZones manquantes / corrompues
Maintenant que nous avons vu les notions théoriques, nous allons pouvoir résoudre ensemble un incident fort complexe rencontré chez plusieurs de mes clients.
Description du problème :
Toutes les zones DNS étaient intégrées dans l’annuaire Active Directory et étaient configurées pour répliquer au niveau de la partition de domaine dans le conteneur système (choix 3 : To all domain controllers in the Active Directory domain metsys.intra).
Lorsque j’ai essayé de déplacer les zones DNS dans la ForestDnsZones, j’ai rencontré l’erreur suivante :
The replication scope could not be set. For more information, see Dns zone replication in Active Directory in Help and Support. The error was There was a server failure.
Lorsque j’essayais de me connecté sur la ForestDnsZones j’avais l’erreur suivante dans ADSIEDIT: .
A referal was returned from the server.
Comment reproduire ce problème?
Ce problème provient du fait que la DomainDnsZones et la ForestDnsZones sont des partitions applicatives qui ne répliquent que sur des contrôleurs de domaine qui sont serveur DNS. Cette option est apparue avec Windows 2003 Server.
Pour reproduire le problème, il faut 2 contrôleurs de domaine et un serveur DNS en groupe de travail :
- Seul le premier contrôleur de domaine doit être serveur DNS.
- Faire pointer les deux contrôleurs sur le troisième serveur DNS.
- Sur ce troisième serveur DNS, créer les zones DNS suivantes :
<em>metsys.intra</em><br><em>_mdscs.metsys.intra</em>
- Autoriser les mises à jour dynamiques DNS sécurisées et non sécurisées.
- Lancer les commandes suivantes sur les deux contrôleurs de domaine :
<em>Ipconfig /registerdns</em><br><em>Net stop netlogon</em><br><em>Net start netlogon</em>
Les entrées DNS correspondant aux 2 contrôleurs de domaine sont recréées sur le serveur DNS (troisième serveur DNS).
- Sur le premier serveur, faire un DCPROMO /FORCEREMOVAL et arrêter cette machine.
Un DCPROMO inverse classique échoue car le premier contrôleur de domaine n’arrive pas à répliquer les partitions (contextes de nommage) ForestDNSZones et DomainDNSZones sur le second contrôleur de domaine (ce dernier n’est pas serveur DNS).
- Sur le second serveur, faire un NTDSUTIL avec l’option METADATA CLEANUP pour supprimer l’ancien contrôleur de domaine. Pour plus d’informations, voir: http://support.microsoft.com/kb/216498/en-us.
- Une fois que tout est effectué, redémarrer le second contrôleur de domaine, et lui remettre le service DNS.
- Créer une zone DNS. Intégrer la dans l’annuaire Active Directory et essayer de la faire répliquer dans la partition ForestDNSZones. Vous allez obtenir l’erreur ci-dessous :
<em>The replication scope could not be set. For more information, see Dns zone replication in Active Directory in Help and Support. The error was There was a server failure</em>.
Si on regarde dans la partition de configuration (ADSIEDIT) dans le nœud CN=Partitions, on voir toujours les partitions ForestDNSZones et DomainDNSZones.
On rencontre généralement ce problème dans les environnements où les contrôleurs de domaine ne sont pas serveur DNS car le service DNS est géré par des équipements tiers comme les solutions d’EFFICIENTIP (http://www.efficientip.com/fr/).
Comment corriger ce problème ?
Vous devez disposer d’un PRA Active Directory (Forest Recovery) avant d’effectuer cette action.
Attention toute procédure réalisée ici peut avoir des conséquences ! Je vous invite à ouvrir un incident chez Microsoft avant d’effectuer ces actions pour au moins valider la procédure.
Pour corriger le problème, il faut supprimer manuellement les partitions ForestDnsZones / DomainDnsZones et utiliser un l’outil DNSCMD pour les recréer.
Pour supprimer les partitions ForestDNSZones et DomainDNSZones (exemple avec le domaine msreport.intra) :
- Ouvrir une session avec un compte membre du groupe « Enterprise admins ».
- Ouvrir l’invite de commande et taper les commandes suivantes sur le contrôleur de domaine Windows 2003 avec les rôles FSMO :
<em>ntdsutil</em><br><em> metadata cleanup</em><br><em> connections</em><br><em> connect to server localhost</em><br><em> q</em><br><em> Select operation target</em><br><em> List Naming Contexts</em><br><em> select naming context 4</em><br><em> Q</em><br><em> remove selected naming context</em>
- Cliquer sur « Yes » pour supprimer la ForestDNSZones (dans notre cas, 4 correspond à la partition ForestDNSZones).
- Faire la même chose pour la DomainDNSZones.
<em>Select operation target</em><br><em> List Naming Contexts</em><br><em> select naming context 3</em><br><em> Q</em><br><em> remove selected naming context</em>
Dans notre cas, 3 correspond à la partition DomainDnsZones (domaine metsys.intra).
Sous Windows 2008 R1 et versions ultérieures, cette méthode fonctionne aussi :
<em>Partition management</em><br><em> Connections</em><br><em> Connect to server localhost</em><br><em> Q</em><br><em> Delete NC DC=DomainDnsZones,DC=metsys,DC=intra</em><br><em> Delete NC DC=ForestDnsZones,DC=metsys,DC=intra</em>
- Retourner dans la console ADSIEDIT dans le conteneur CN=Partitions.
Maintenant, votre annuaire n’a plus que 3 partitions (dans mon cas metsys.intra est un domaine unique dans une forêt).
- Forcer des réplications pour que tous vos contrôleurs disposent plus que de 3 partitions. Je vous invite à attendre quelques heures.
- Nous allons maintenant recréer les partitions (contextes de nommage) ForestDnsZones à l’aide de la commande suivante :
<em>Dnscmd /createbuiltindirectorypartitions /Forest</em><br><em> Dnscmd /createbuiltindirectorypartitions /Domain</em>
- Retourner dans ASIEDIT au niveau du conteneur CN=Partitions.
Vous devriez maintenant voir de nouveau 5 partitions.
- Et enfin vous devriez pouvoir maintenant déplacer votre zone DNS dans la ForestDnsZones ou dans la DomainDnsZones.
Pour plus d’informations :