Directorio Activo, RPC, puertos efímeros y firewalls
Hola de nuevo. Soy Paula del equipo de Directorio Activo.
Hoy hablaremos sobre el funcionamiento básico de RPC que afecta a diferentes operaciones de Directorio Activo. Como seguramente la mayor parte de vosotros ya sabe, la comunicación utilizada para múltiples operaciones en Directorio Activo es RPC. Estas operaciones incluyen, por ejemplo, la replicación de DA, la replicación FRS, la promoción de un nuevo Controlador de Dominio, etc. También realizan conexiones RPC a los DCs la ejecución del comando dcdiag /v o incluso consultar qué DCs son los maestros de operaciones (mediante el comando netdom query fsmo). También es muy común que tratemos casos con problemas de conectividad RPC en que la replicación de DA y/o FRS no se lleva a cabo de manera satisfactoria o incluso que la replicación de DA funcione perfectamente pero los Controladores de Domino no puedan replicar SysVol por FRS.
En una comunicación RPC, el cliente se conecta al puerto TCP 135 del servidor y solicita un puerto al End Point Mapper (EPM) para comenzar la conversación RPC. El EPM del servidor reserva un puerto (llamado puerto dinámico) para este cliente y se lo envía. A partir de este punto, el cliente abre una nueva conexión TCP a dicho puerto del servidor y comienza la comunicación.
Los puertos dinámicos RPC (o puertos efímeros) que puede utilizar el EPM de RPC (o RPCSS) van del 1025 hasta el 65535, aunque Windows 2000/XP/2003 por defecto utilizan puertos que están comprendidos en el rango 1025-5000 (en total 3976 puertos). En Windows Vista y Windows Server 2008, el rango de puertos por defecto es 49152-65535 (un total de 16384 puertos).
Puede encontrarse más información en el siguiente artículo (muy recomendable para identificar y entender los pasos a seguir cuando nos encontramos ante un problema con el RPC Endpoint Mapper):
Cuando no se puede establecer la conexión por estos puertos efímeros, al realizar las operaciones que hemos comentado anteriormente podemos recibir errores como el siguiente:
There are no more endpoints available from the endpoint mapper.
Vamos a ver unas trazas de red de ejemplo de un establecimiento de una comunicación RPC fallida debido a que el cliente no puede establecer la sesión al puerto dinámico que le indica el EPM del servidor.
Las trazas de red las podéis capturar con cualquier sniffer, por ejemplo en este caso nosotros hemos utilizado Microsoft Network Monitor 3.2 .
Esta es la conversación inicial RPC entre un DC y una máquina desde la que se ejecuta la operación netdom query fsmo:
Fuente |
Destino |
Protocolo |
Descripción |
cliente |
dc |
TCP |
TCP:Flags=......S., SrcPort=1687, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=721180773, Ack=0, Win=65535 ( ) = 65535 |
dc |
cliente |
TCP |
TCP:Flags=...A..S., SrcPort=DCE endpoint resolution(135), DstPort=1687, PayloadLen=0, Seq=3452375582, Ack=721180774, Win=16384 ( Scale factor not supported ) = 16384 |
cliente |
dc |
TCP |
TCP: [Bad CheckSum]Flags=...A...., SrcPort=1687, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=721180774, Ack=3452375583, Win=65535 (scale factor 0x0) = 65535 |
cliente |
dc |
MSRPC |
MSRPC:c/o Bind: UUID{E1AF8308-5D1F-11C9-91A4-08002B14A0FA} EPT Call=0x1 Assoc Grp=0x0 Xmit=0x16D0 Recv=0x16D0 |
dc |
cliente |
MSRPC |
MSRPC:c/o Bind Ack: Call=0x1 Assoc Grp=0x14EE2 Xmit=0x16D0 Recv=0x16D0 |
cliente |
dc |
EPM |
EPM:Request: ept_map: NDR, DRSR {E3514235-4B06-11D1-AB04-00C04FC2DCD2} v4.0, RPC v5, 0.0.0.0:135 (0x87) [DCE endpoint resolution(135)] |
dc |
cliente |
EPM |
EPM:Response: ept_map: NDR, DRSR {E3514235-4B06-11D1-AB04-00C04FC2DCD2} v4.0, RPC v5, 10.200.8.59:1025 (0x401) [1025] |
cliente |
dc |
TCP |
TCP: [Bad CheckSum]Flags=...A...F, SrcPort=1687, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=721181002, Ack=3452375795, Win=65323 (scale factor 0x0) = 65323 |
dc |
cliente |
TCP |
TCP:Flags=...A...., SrcPort=DCE endpoint resolution(135), DstPort=1687, PayloadLen=0, Seq=3452375795, Ack=721181003, Win=65307 (scale factor 0x0) = 65307 |
dc |
cliente |
TCP |
TCP:Flags=...A...F, SrcPort=DCE endpoint resolution(135), DstPort=1687, PayloadLen=0, Seq=3452375795, Ack=721181003, Win=65307 (scale factor 0x0) = 65307 |
cliente |
dc |
TCP |
TCP: [Bad CheckSum]Flags=...A...., SrcPort=1687, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=721181003, Ack=3452375796, Win=65323 (scale factor 0x0) = 65323 |
En la respuesta del End Point Mapper (EPM) del DC ante la solicitud de conexión del cliente (trazas en rojo), el DC indica que van a continuar hablando por el puerto TCP 1025. Si filtramos el tráfico generado en el cliente con destino el DC y puerto 1025, vemos los siguientes intentos de conexión al mismo:
Fuente |
Destino |
Protocolo |
Descripción |
cliente |
dc |
TCP |
TCP:Flags=......S., SrcPort=1688, DstPort=1025, PayloadLen=0, Seq=570735085, Ack=0, Win=65535 ( ) = 65535 |
cliente |
dc |
TCP |
TCP:[SynReTransmit #63]Flags=......S., SrcPort=1688, DstPort=1025, PayloadLen=0, Seq=570735085, Ack=0, Win=65535 ( ) = 65535 |
cliente |
dc |
TCP |
TCP:[SynReTransmit #63]Flags=......S., SrcPort=1688, DstPort=1025, PayloadLen=0, Seq=570735085, Ack=0, Win=65535 ( ) = 65535 |
cliente |
dc |
TCP |
TCP:[SynReTransmit #63]Flags=......S., SrcPort=1688, DstPort=1025, PayloadLen=0, Seq=570735085, Ack=0, Win=65535 ( ) = 65535 |
Como podemos ver claramente en las trazas de red, el cliente trata de conectarse varias veces a dicho puerto en el DC y no recibe respuesta (ver retransmisiones). Si observamos unas trazas de red simultáneas a las anteriores pero obtenidas en el DC (capturar el tráfico en ambos extremos es muy recomendable en este tipo de situaciones), únicamente se observa la conversación inicialmente descrita en la primera tabla. Es decir, el DC no llega a recibir los paquetes que el cliente le envía por el puerto 1025.
Lo más probable en este caso es que haya un firewall que esté bloqueando las comunicaciones. Puede ser un firewall hardware/software, el firewall integrado de Windows o incluso un antivirus con funcionalidad de firewall. (Tened también en cuenta que no todos los problemas relacionados con conectividad RPC se deben a la configuración de los firewalls!!!)
Ante esta situación tenemos dos opciones para evitar el bloqueo:
- Abrir los puertos comprendidos entre el 1025 y el 5000 en el firewall para permitir la negociación/tráfico RPC entre las máquinas implicadas
- Configurar RPC en el DC para utilizar un rango de puertos específicos y abrir dichos puertos en el firewall para permitir la negociación/tráfico RPC entre dichas máquinas
- La desventaja que hay que tener en cuenta es la posibilidad de que en determinados momentos no haya puertos disponibles al estar todos en uso, por lo que habrá que realizar pruebas y verificar cuál es el número de puertos adecuado para el entorno. Hay que tener en cuenta que los DCs utilizan RPC para multitud de funcionalidades, como puede ser la replicación de DA o FRS.
- El mecanismo para Windows 2000/XP/2003 se define en el siguiente artículo: 154596 How to configure RPC dynamic port allocation to work with firewalls
- El artículo anterior también apunta a mecanismos para configurar si se prefiere, por ejemplo, un único puerto concreto para la replicación FRS en lugar de un rango de puertos.
- El mecanismo para Windows Vista/2008 se define en el siguiente artículo: 929851 The default dynamic port range for TCP/IP has changed in Windows Vista and in Windows Server 2008
Si queréis obtener una lista completa de los puertos necesarios para el correcto funcionamiento de un entorno de Directorio Activo, echadle un vistazo a los siguientes artículos:
- 179442 How to configure a firewall for domains and trusts
- 832017 Service overview and network port requirements for the Windows Server system
Espero que esta información os sirva de utilidad, ya que es uno de los problemas que tratamos más frecuentemente y su detección es relativamente sencilla a partir de unas trazas de red.
- Paula Tomás Galed
Comments
Anonymous
April 02, 2010
Muchas gracias por la informacion fue de gran ayuda. Gracias y sigue asi. Un saludo desde Medellin - ColombiaAnonymous
October 14, 2015
please, update this for Windows Server 2012 / 2012 R2