ADUC se charge lentement lorsqu'il est connecté au client SDP de Cato

Prev Next

Problème

Les utilisateurs et ordinateurs Active Directory (ADUC) peuvent rencontrer des latences ou des lenteurs lorsqu'ils sont connectés au client SDP de Cato.

Environnement

  • Client SDP de Cato v4.2 et au-dessus

Résolution des problèmes

Pendant son exécution, ADUC effectue des requêtes DNS pour des enregistrements SRV non standards et inexistants. Ces requêtes ne sont pas nécessaires et on ne sait pas pourquoi ADUC les effectue. Pour plus d'informations, consultez Comportement du résolveur client DNS

Le client SDP de Cato bloque les requêtes DNS sur chaque interface réseau sauf pour l'interface VPN de Cato afin de diriger le DNS via le tunnel VPN. Cela fonctionne bien pour presque toutes les applications sauf ADUC à cause des requêtes SRV mentionnées ci-dessus.

Si ADUC ne reçoit pas de réponse positive aux requêtes des serveurs DNS configurés sur l'adaptateur VPN Cato, il envoie les requêtes aux serveurs DNS configurés sur l'adaptateur physique (WiFi, Ethernet). Ces requêtes sont bloquées par le client VPN Cato donc ADUC ne reçoit jamais de réponse. Bien que cela n'ait pas été reconnu ou confirmé par Microsoft, nous pensons qu'ADUC attend que les requêtes DNS expirent sur les adaptateurs physiques avant de continuer, ce qui explique les temps de chargement lents. Autant que nous sachions, ADUC est la seule application à présenter ce comportement et cela pourrait être un bogue de Microsoft.

Pour vérifier que le problème ci-dessus est rencontré, une capture PCAP peut être effectuée sur le tunnel. Filtrer pour DNS (port 53) pendant que l'utilisateur ouvre ADUC. Appliquer le filtre suivant dans Wireshark pour voir les requêtes SRV :

dns.qry.type == 33

ADUC effectue des requêtes pour des enregistrements SRV inexistants dans deux formats distincts :

  1. _ldap._tcp.DCName.Domaine.com

  2. _ldap._tcp.NomDeSite._sites.DCName.Domaine.com

Où DCName est le nom NetBIOS (nom d'hôte) d'un contrôleur de domaine (DC), SiteName est le nom du site dans lequel se trouve le DC, et Domain.com est le domaine.

ADUC peut potentiellement interroger les enregistrements SRV pour chaque DC dans un domaine. Le problème mentionné dans cet article existe si vous voyez l'une des requêtes SRV et une réponse "Aucun nom de ce type" dans le PCAP.

mceclip0.png

Solutions

Créer manuellement des enregistrements SRV

  1. Ouvrir le gestionnaire DNS sur le serveur DNS.

  2. Développez les zones de recherche directe.

    mceclip2.png

  3. Cliquez droit sur votre domaine et cliquez sur « Nouveau domaine… ».

    mceclip3.png

  4. Entrez le nom d'hôte du DC comme nom de domaine.

    mceclip4.png

  5. Cliquez droit sur le sous-domaine créé à l'étape précédente et sélectionnez « Autres nouveaux enregistrements… ».

    mceclip5.png

  6. Sélectionnez emplacement de service (SRV) et cliquez sur « Créer un enregistrement… ».

    mceclip6.png

  7. Entrez les paramètres suivants dans la fenêtre pop-up :

    • Service : _ldap

    • Protocole : _tcp

    • Hôte offrant ce service : le FQDN du DC avec un point à la fin.

    mceclip7.png

  8. Cliquer sur "OK". Un enregistrement SRV sera créé.

    mceclip8.png

  9. Cliquez droit sur le sous-domaine nommé d'après le DC que vous avez créé à l'étape 4 et sélectionnez « Nouveau domaine… »

    mceclip9.png

  10. Nommez le domaine « _sites » et cliquez sur "OK".

    mceclip10.png

  11. Cliquez droit sur le domaine _sites et sélectionnez « Nouveau domaine... ».

    mceclip11.png

  12. Nommez le sous-domaine créé à l'étape précédente d'après le site dans lequel réside le DC et cliquez "OK".

    mceclip12.png

  13. Cliquez droit sur le sous-domaine créé à l'étape précédente et sélectionnez "Autres nouveaux enregistrements...".

    mceclip13.png

  14. Sélectionnez l'emplacement du service (SRV) et cliquez sur "Créer un enregistrement...".

    mceclip14.png

  15. Entrez les paramètres suivants dans la fenêtre pop-up :

    • Service : _ldap

    • Protocole : _tcp

    • Hôte offrant ce service : le FQDN du DC avec un point à la fin.

    mceclip15.png

  16. Cliquer sur "OK". Un nouvel enregistrement SRV sera créé.

    mceclip16.png

  17. Répétez les étapes 3 à 16 pour chaque DC dans votre domaine.

Créer automatiquement des enregistrements SRV à l'aide de PowerShell

Le script PowerShell ci-dessous peut être exécuté sur un DC pour créer tous les enregistrements SRV nécessaires pour un domaine tant que les serveurs DNS sont également des contrôleurs de domaine. Veuillez noter que ce script peut devoir être modifié pour fonctionner dans l'environnement du client et le support Cato n'est pas responsable des modifications apportées à ce script. Les clients doivent utiliser ce script à leurs propres risques.

Utilisation recommandée :

  1. Enregistrez le script dans un fichier avec l'extension .ps1 et copiez-le sur un DC.

  2. Sur le DC, ouvrez PowerShell avec des privilèges d'administrateur et exécutez le script :

    path_to_script.ps1
  3. Vérifiez que le script a détecté le bon domaine et un serveur DNS et que la liste de tous les DCs dans le domaine est correcte.

  4. Par défaut, le script demande confirmation avant de créer des enregistrements SRV pour chaque DC. Nous recommandons d'utiliser cette méthode au moins pour le premier DC et de vérifier que les enregistrements SRV ont été créés avec succès avant de continuer.

  5. Si les enregistrements SRV pour le premier DC ont été créés avec succès, vous pouvez exécuter à nouveau le script mais choisir l'option "Création en masse" [B] pour créer tous les enregistrements SRV à la fois sans avertissement.

Exemple de sortie :

mceclip1.png

Script : 

$allDCs = (Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ } | Select-Object -Property Name, HostName, Domain, Site
$Domain = (Get-ADForest).Name
Write-Host ""
Write-Host "Domaine :"
Write-Host " $Domain"
$DNSstring = nslookup -type=ns $Domain | Select-String -Pattern 'nameserver'
$DNSstring -match '(?<=nameserver = )(.*)' > $null
$DNSserver = $Matches[1]

Write-Host ""
Write-Host "Serveur DNS trouvé :"
Write-Host " $DNSserver"
Write-Host ""
Write-Host "Contrôleurs de domaine trouvés :"
Foreach ($DC in $allDCs) {
 Write-Host " $($DC.HostName)"
}

$title = 'Créer des enregistrements SRV'
$question = 'Comment souhaitez-vous créer des enregistrements SRV ?'

$bulk = New-Object System.Management.Automation.Host.ChoiceDescription "&Création en masse", "Crée tous les enregistrements SRV à la fois."
$prompt = New-Object System.Management.Automation.Host.ChoiceDescription "&Inviter pour chaque", "Invites avant de créer chaque enregistrement SRV."
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($bulk, $prompt)

$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
 Foreach ($DC in $allDCs) {
 Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
 Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Site)._sites.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
 }
 Write-Host ""
 Write-Host "Enregistrements SRV créés pour tous les DC."
} elseif ($decision -eq 1) {
 Foreach ($DC in $allDCs) {
 Write-Host ""
 Write-Host "Créer des enregistrements SRV pour $($DC.HostName) ?" -ForegroundColor Yellow 
 $Readhost = Read-Host " ( y / n ) "
 if ($Readhost -eq 'y') { 
 Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
 Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Site)._sites.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
 }
 }
 Write-Host ""
 Write-Host "Terminé la création des enregistrements SRV."
} else {
 Write-Host 'Annulé'
}