Comment résoudre l’erreur DHCID not mine avec la commande DNSCMD.

Dans notre infrastructure réseau nous utilisons une Appliance Infoblox en haute disponibilité qui délivre les IP et qui doit mettre à jour un DNS Microsoft. Lors de la migration de notre service DHCP, nous avons rencontrer l’erreur Forward map from XXX to XXX FAILED : Has an address record but no DHCID, not mine.

Infoblox propose des appliances physiques et virtuelles qui permettent d’offrir des services DNS, DHCP et IPAM. Ces appliances sont particulièrement robustes et adaptées pour des gros réseaux.

Erreur_DHCID_1

Infoblox propose aussi d’autres services comme la protection du DNS, l’automatisation du réseau, … .

Dans notre cas nous n’avons que les services DHCP et IPAM d’activés. Pour certains scopes nous devons mettre à jour le DNS de Windows.

Vous trouverez, la dernière version du script sur mon dépôt Github pour récupérer le script, à cette adresse : https://github.com/quick-tutoriel (n’hésitez pas à vous abonner).

Pour certaines machines, lors de la migration du service DHCP, qui ont déjà été enregistrées, vous pourriez avoir cette erreur dans les logs :

Forward map from XXX to XXX FAILED : Has an address record but no DHCID, not mine.

Erreur_DHCID_2

C’est une erreur non bloquante (elle n’empêche pas le renouvellement des IP, mais les DNS ne sont pas mis à jour) lors de la mise à jour de l’enregistrement DNS de la machine sur le serveur. Le serveur DNS a essayé de mettre à jour l’enregistrement mais il a découvert un enregistrement identique avec un identifiant différent.
DHCID est un enregistrement de ressource (RR) stocké dans le DNS qui mappe les noms afin d’éviter la duplication des inscriptions.
Cet enregistrement de ressource est utilisé par le protocole DHCP pour stocker un identifiant pour l’ordinateur, ainsi que d’autres informations pour le nom telles que les enregistrements A/AAAA de l’ordinateur.

La position unique de DHCP dans le processus d’inscription des noms lui permet de demander cette correspondance, puis de refuser l’inscription d’un ordinateur, possédant une adresse différente, qui essaie d’inscrire un nom comportant un enregistrement DHCID existant.

L’enregistrement DHCID empêche les situations d’occupation de nom suivantes :

  • Occupation d’un nom de serveur par un client,
  • Occupation d’un nom de serveur par un autre serveur,
  • Occupation d’un nom de client par un autre client,
  • Occupation d’un nom de client par un serveur.

Pour corriger cette erreur, il suffit de purger manuellement l’enregistrement sur le serveur DNS grâce aux outils d’administrations DNS.

Erreur_DHCID_3

Cette méthode peu vite devenir rébarbative, je vais donc vous montrer l’utilisation de l’utilitaire DNSCMD dans un script PowerShell, pour faire votre administration DNS. Dans un premier temps jetons un coup d’oeil sur quelques fonctionnalités de cet outils.

  • Récupérer des informations sur un serveur DNS :
#dnscmd ip-srv-dns /Info

Erreur_DHCID_4

  • Récupérer les différentes zones d’un serveur DNS :
#dnscmd ip-srv-dns /EnumZone

Erreur_DHCID_5

  • Récupérer les informations d’un enregistrement particulier :
#dnscmd ip-srv-dns /EnumRecords zone enregistrement
#dnscmd 10.120.0.11 /EnumRecords chu.fr CGR4

Erreur_DHCID_6

Nous avons ici l’adresse IP de l’enregistrement CGR4. Mais celle-ci a été créée avant la migration du serveur DHCP. Il faut donc la supprimer.

  • Supprimer un enregistrement particulier :
#dnscmd ip-srv-dns /RecordDelete zone enregistrement type-enregistrement ip-enregistrement
#dnscmd ip-srv-dns /RecordDelete chu.fr A CGR4 10.205.1.38

Erreur_DHCID_7

Pour résumer lorsque vous avez l’erreur Forward map from XXX to XXX FAILED : Has an address record but no DHCID, not mine sur votre serveur DHCP et que vous possédez un serveur DNS Windows :

  • 1°) Vérifier l’enregistrement existant avec la commande : dnscmd ip-srv-dns /EnumRecords
  • 2°) Suppression de l’enregistrement dans le DNS avec la commande : dnscmd ip-srv-dns /RecordDelete
  • 3°) Soit vous attendez le renouvellement du bail DHCP, soit vous créer une nouvelle entrée avec la commande dnscmd ip-srv-dns /RecordAdd

Maintenant dans les logs de votre serveur DHCP vous devriez avoir ces messages lors du renouvellement du bail de la machine :

Erreur_DHCID_8

Pour aller plus loin !!!
Si vous avez plusieurs équipements à traiter, vous pouvez créer un script powershell qui supprime et recréer un enregistrement. Voici un exemple de script que vous pourrez adapter à vos besoins. Par exemple, en supprimant uniquement les enregistrements sans les recréer.

Script UpdateDNSRecords.ps1
 # Environment Setup
 $DNSServer = "adresse-ip-serveur"
 $DNSZone = "zone-de-votre-serveur"
 $InputFile = "chemin-de-votre-fichier-csv"

# Read the input file which is formatted as name,type,address with a header row
 $records = Import-CSV $InputFile

# Now we loop through the file to delete and re-create records
 # DNSCMD does not have a modify option so we must use /RecordDelete first followed by a /RecordAdd

ForEach ($record in $records) {

# Capture the record contents as variables
 $recordName = $record.name
 $recordType = $record.type
 $recordAddress = $record.address

# Build our DNSCMD DELETE command syntax
 $cmdDelete = "dnscmd $DNSServer /RecordDelete $DNSZone $recordName $recordType /f"

# Build our DNSCMD ADD command syntax
 $cmdAdd = "dnscmd $DNSServer /RecordAdd $DNSZone $recordName $recordType $recordAddress"

# Now we execute the command
 Write-Host "Running the following command: $cmdDelete"
 Invoke-Expression $cmdDelete

Write-Host "Running the following command: $cmdAdd"
 Invoke-Expression $cmdAdd
 }

Ce script prend en entrée 1 fichiers csv avec en colonne (et dans cet ordre) :

  • Hostname (nom de l’enregistrement DNS)
  • Type d’enregistrement (A : Adresse Hôte, CNAME : Alias, PTR, NS, MX, …)
  • Adresse IP (Adresse IP de l’enregistrement)

Exemple de fichier .csv :

Erreur_DHCID_12

Lors de l’exécution du script si vous avez cette erreur :

Erreur_DHCID_9

Vous devez autoriser à exécuter des scripts PowerShell sur votre ordinateur. Pour cela dans un shell PowerShell taper les commandes suivantes :

#Get-ExecutionPolicy
#Set-ExecutionPolicy Unrestricted

Erreur_DHCID_10

Ensuite vous pourrez exécuter le script.

Erreur_DHCID_11

Astuce !!!
Avant de lancer le script, assurez-vous que le fichier .csv soit bien reconnu par le script. Pour vérifier le fichier csv, vous pouvez utiliser la commande :

#Import-csv nom-du-fichier-csv

Si les colonnes sont affichées, votre fichier est bon, sinon remplacer les ; par des , erreur classique.

Erreur_DHCID_13

  • 1 : Le fichier csv est mal configuré, aucune colonne n’apparait.
  • 2 : le fichier csv est bien configuré toutes les colonnes apparaissent distinctement avec les valeurs idoines.
Vous trouverez, la dernière version du script sur mon dépôt Github pour récupérer le script, à cette adresse : https://github.com/quick-tutoriel (n’hésitez pas à vous abonner).

That’s All.

1 potin

  1. super tuto, très complet !!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *