La configuración de las nuevas sesiones para los servicios LDAP tarda más de lo esperado si los nombres de host de destino

En este artículo se describe un problema en el que una nueva configuración de sesión para los servicios LDAP tarda más de lo esperado si se dirige a nombres de host.

Versión original del producto:   Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10: todas las ediciones
Número KB original:   4559609

Síntomas

Las consultas del Protocolo ligero de acceso a directorios (LDAP) destinadas a nombres de host tardan aleatoriamente más de lo esperado en responder.

Además, es posible que se registren eventos de cliente DNS como los siguientes en el registro de eventos:

Nombre del registro: Sistema
Origen: Microsoft-Windows-DNS-Client
Identificador de evento: 1014
Nivel: advertencia
Usuario: SERVICIO DE RED
Descripción:
Resolución de nombres para el nombre _ldap._tcp. <site> . _sites.<name> tiempo de espera después de que ninguno de los servidores DNS configurados respondió.

Nota

En esta entrada de registro, <name> el parámetro puede ser cualquiera de los siguientes:

  • Nombre NETBIOS de dominio
  • Nombre de host del controlador de dominio
  • Nombre de host FQDN de DNS del controlador de dominio

Este problema causa varios problemas que afectan a los administradores, usuarios y aplicaciones. Estos problemas incluyen, entre otros, los siguientes:

  • Una conexión LDAP con controladores de dominio (DCs) de Windows Server 2008 R2 o una versión posterior tarda unos seis segundos. Las mismas conexiones con los equipos de escritorio de Windows Server 2003 o Windows Server 2008 normalmente tardan menos de un segundo. Cuando esto ocurre, las operaciones LDAP posteriores, como el enlace y las búsquedas LDAP, parecen no tener ningún retraso adicional después de la conexión ldap inicial.
  • El LDIFDE.EXE es lento independientemente de si se usa el parámetro/Sparameter.
  • El script de comprobación de estado de Microsoft System Center Active Directory Management Pack (SCOM ADMP) (AD_General_Response.vbs) experimenta tiempos de ejecución lentos.
  • Los usuarios y equipos de Microsoft Active Directory (ADUC) tardan en iniciarse o se ralentizan al abrir contenedores de unidades organizativas. Extensiones en el complemento Usuarios y equipos de Active Directory, DSA. MSC, usa el nombre de equipo FQDN de DC como nombre de dominio.
  • Las extensiones del Centro de administración de Microsoft Active Directory (ADAC) del Centro de administración de Active Directory usan el nombre de equipo FQDN de DC como nombre de dominio.
  • Microsoft Group Policy Management Console (GPMC) no usa de forma coherente las marcas de resolución de nombres.
  • Visual Basic secuencias de comandos (VBS) que hacen llamadas LDAP que hacen referencia al nombre DNS completo de DC son lentos de ejecutar.
  • Las aplicaciones de .NET Framework que usan System.DirectoryServices y System.DirectoryServices.Protocols pueden experimentar retrasos al crear sesiones de servidor.

Causa

A partir de Windows 7 y Windows Server 2008 R2, Windows introdujo un cambio en el comportamiento de búsqueda de nombres para corregir dos escenarios de problemas anteriores:

  • Los clientes LDAP volverán a NTLM siempre que el nombre de dominio NetBIOS se suministre como nombre de host en la conexión LDAP.
  • Los clientes LDAP no se conectan a un DC en el dominio si un cliente tiene el mismo nombre que el nombre de dominio NetBIOS de destino.

El retraso se produce porque se cumple una de las dos condiciones siguientes:

  • Se produce un tiempo de espera largo para una respuesta de difusión. No verá este retraso si la resolución de nombres NetBIOS sobre TCP/IP (NetBT) a través de difusiones está desactivada.
  • Los retrasos en la resolución de nombres DNS se producen cuando la aplicación consulta varios nombres DNS que no existen.

Los retrasos se pueden observar en un seguimiento de red que muestra los clientes LDAP que ejecutan búsquedas de nombres NetBIOS para un registro "[HOSTNAME]<0x1C>" antes de ejecutar una búsqueda DNS para localizar el equipo host de la aplicación (vea la figura A).

Figura A

Seguimiento de red del cliente de Windows 7 que realiza ldap_connect con ldp.exe

El seguimiento de red de un cliente LDAP de Windows Server 2003 o 2008 mostró que ejecutó directamente la búsqueda DNS para el equipo host sin realizar la búsqueda NetBIOS para el registro "<0x1C>".

Figura B

Seguimiento de red del cliente de Windows Server 2003 que realiza una ldap_connect mediante ldp.exe

En el caso de DNS, verá consultas de nombre para los nombres que terminan en un nombre de equipo DC, como los siguientes:

_ldap._tcp. Default-First-Site-Name._sites. ADDC01.contoso.com
_ldap._tcp. ADDC01.contoso.com
_ldap._tcp. Default-First-Site-Name._sites. ADDC01
_ldap._tcp. ADDC01

Solución

Cuando se selecciona un servidor LDAP por nombre de host en lugar de por nombre de dominio, debe usar la opción de sesión LDAP_OPT_AREC_EXCLUSIVE para indicar que el destino es un nombre de host en lugar de un nombre de dominio.

Esta opción se establece de forma diferente en función de la interfaz de programación que se usa. Use la siguiente información como referencia.

Wldap32

Si se pasa un nombre de servidor DNS de Active Directory parahostNameparameter, se debe llamar ldap_set_option para establecer la marca LDAP_OPT_AREC_EXCLUSIVE antes de llamar a cualquier función LDAP que cree la conexión real.

Esto fuerza una búsqueda de registro A y omite cualquier búsqueda de registros SRV cuando el equipo resuelve el nombre de host. En algunos escenarios, mejora el rendimiento de la red. Por ejemplo, en una sucursal que usa una conexión de acceso telefónico, el uso de la búsqueda A-Record puede evitar forzar la marcación para consultar registros SRV en un servidor DNS remoto cuando resuelve nombres.

ADSI

Si debe especificar un servidor, use la marca ADS_SERVER_BIND para evitar consultas innecesarias o incorrectas en el servidor DNS. Para obtener más información, vea esta documentación de ADsOpenObject() y funciones relacionadas.

System.DirectoryServices

Si ADsPath incluye un nombre de servidor, especifique la marca AuthenticationTypes.ServerBind cuando use el proveedor LDAP. No use esta marca para rutas de acceso que incluyan un nombre de dominio o para rutas de acceso sin servidor. Especificar un nombre de servidor sin especificar también esta marca provoca tráfico de red innecesario.

Por ejemplo:

DirectoryEntry ent = new DirectoryEntry("LDAP://server01",null,null,AuthenticationTypes.ServerBind);

System.DirectoryServices.Protocols

Cuando prepare una nueva conexión LDAP, incluya un objeto LdapDirectoryIdentifier que se construye mediante un nombre de host y un puerto opcional con el que desea ponerse en contacto, y también incluye un parámetro que se establece en <fullyQualifiedDnsHostName> True.

El nuevo comportamiento predeterminado en Windows 7, Windows Server 2008 R2 y versiones posteriores se puede revertir al comportamiento anterior a Windows 7. Esto puede reactivar problemas que afectan a los nombres NetBIOS, tal como se describe en la sección "Causa". Sin embargo, también hay escenarios en los que el comportamiento anterior a Windows 7 proporciona mejores resultados. Por lo tanto, la configuración que produce mejores resultados depende del escenario principal de uso del cliente LDAP.

La solución a largo plazo siempre debe ser hacer que la aplicación use nombres de servidor y dominio que tengan los indicadores adecuados al llamar a interfaces LDAP, ADSI o .NET. Debe usar las marcas correctas para que la aplicación sea independiente de las dependencias del escenario cuando el código de cliente de servicios de directorio tenga que decidir el método de resolución en situaciones ambiguas.

Puedes revertir al comportamiento anterior a Windows 7 estableciendo el siguiente valor del Registro:

Subclave: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LDAP
Entrada: UseOldHostResolutionOrder
Tipo: REG_DWORD
Datos de valor: 1

Como método adicional, puede desactivar la resolución de nombres mediante la difusión de NetBt. Vea configuración 819108 para minimizar el tráfico WAN periódico para configurar NodeType como "modo p".

Configuración de nodos

  • Usar 0x00000008 para nodo híbrido o nodo h
  • Usar 0x00000004 para nodo mixto o nodo m
  • Usar 0x00000002 para WINS de punto a punto o nodo p
  • Usar 0x00000001 para nodo de difusión o nodo b

Tipos de nodo de resolución de nombres

  • Nodo B (difusión): usa difusiones para resolver nombres. (No se recomienda para redes más grandes).
  • Nodo P (punto a punto): usa WINS solo, sin difusiones. Sin servidor WINS, sin resolución.
  • Nodo M (mixto): Difusione primero y, a continuación, WINS. (No se recomienda porque desea minimizar las difusiones).
  • Nodo H (híbrido): usa WINS primero y luego difusiones. (Se recomienda porque reduce el número de difusiones intentando WINS primero y recurriendo a la difusión solo como último recurso).

Referencias

Para más información, consulte los siguientes artículos:

Ldap_init función

Opciones de sesión LDAP (vea LDAP_OPT_AREC_EXCLUSIVE, 0x98)

Función ADSI AdsopenObject

AuthenticationEnum ADSI con el ADS_SERVER_BIND de autenticación

Enumeración S.DS AuthenticationTypes con el valor ServerBind

S.DS. P Constructor LdapDirectoryIdentifier con la marca fullyQualifiedDnsHostName