Esta semana he recibido varias consultas por este tema y generalmente es algo que siempre hay que chequear cuando uno tiene varias oficinas y por algun motivo no todas tienen una domain controller, ya que cuando tenemos algun problema de red, ya sea de un router, un firewall o incluso nuestro proveedor ISP, podemos tener problemas para validar nuestros usuarios y sus equipos en nuestra red.
Como sabemos la comunicación de Active Directory se lleva a cabo utilizando varios puertos. Estos puertos son requeridos tanto por las computadoras cliente como por los controladores de dominio. Como ejemplo, cuando una computadora cliente intenta encontrar un controlador de dominio, siempre envía una consulta DNS a través del puerto 53 para encontrar el nombre del controlador de dominio en el dominio.
La siguiente es la lista de servicios y sus puertos utilizados para la comunicación de Active Directory:
-
Puerto UDP 88 para autenticación Kerberos
-
Puerto UDP y TCP 135 para controladores de dominio a controlador de dominio y operaciones de controlador de dominio a cliente
-
Puerto TCP 139 y UDP 138 para el servicio de replicación de archivos entre los controladores de dominio
-
Puerto UDP 389 para que LDAP maneje las consultas normales desde las computadoras cliente a los controladores de dominio
-
Puerto TCP y UDP 445 para el servicio de replicación de archivos
-
Puerto TCP y UDP 464 para cambio de contraseña de Kerberos
-
Puerto TCP 3268 y 3269 para el Catálogo global del cliente al controlador de dominio.
Puerto TCP y UDP Puerto 53 para DNS del cliente al controlador de dominio y controlador de dominio a controlador de dominio.
Si se abren los puertos en Firewall entre las computadoras cliente y los controladores de dominio, o entre los controladores de dominio, Active Directory funcionará correctamente.
Tambien los podemos chequear por medio de un script. Para esto vamos a utilizar el PortQry Command Line Port Scanner Version 2.0 que podemos bajar del sitio de Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=17148
Espero les sea de interes y utilidad. Saludos, Roberto Di Lello
:::::::::::::::::::::::::::: BEGIN SCRIPT :::::::::::::::::::::::::
@ECHO OFF
:: NAME: DCPortTest.CMD v1.0
:: PURPOSE: Test connectivity from one DC to one or more remote DCs
:: using PORTQRY utility.
:: The SERVERS.TXT contains a list of servers (one server per line)
:: to check connectivity to.
ECHO DATE: %DATE% > DC_PORTQRY.TXT
ECHO TIME: %TIME% >> DC_PORTQRY.TXT
ECHO USER: %USERNAME% >> DC_PORTQRY.TXT
ECHO COMPUTER: %COMPUTERNAME% >> DC_PORTQRY.TXT
ECHO. >> DC_PORTQRY.TXT
ECHO. >> DC_PORTQRY.TXT
ECHO. >> DC_PORTQRY.TXT
FOR /F "tokens=1" %%i in (servers.txt) DO (
ECHO :::::::::::::::::::::: %%i :::::::::::::::::::::::::: >> DC_PORTQRY.TXT
ECHO Testing %%i
ECHO. >> DC_PORTQRY.TXT
PORTQRY -n %%i -e 88 -p TCP | findstr /i "88" >> DC_PORTQRY.TXT
PORTQRY -n %%i -e 445 -p TCP | findstr /i "445" >> DC_PORTQRY.TXT
PORTQRY -n %%i -e 389 -p TCP | findstr /i "389" >> DC_PORTQRY.TXT
PORTQRY -n %%i -e 3268 -p TCP | findstr /i "3268" >> DC_PORTQRY.TXT
PORTQRY -n %%i -e 135 -p TCP | findstr /i "135" >> DC_PORTQRY.TXT
ECHO. >> DC_PORTQRY.TXT
ECHO. >> DC_PORTQRY.TXT
)
:::::::::::::::::::::::: END SCRIPT :::::::::::::::::::::::::
Y la salida o el resultado seria un txt con esta informacion:
DATE: Mon 04/20/2018
TIME: 12:15:28.37
USER: a_robertoDL01
COMPUTER: RADWKS001
:::::::::::::::::::::: RADSRVDS001 ::::::::::::::::::::::::::
TCP port 88 (kerberos service): LISTENING
TCP port 445 (microsoft-ds service): LISTENING
TCP port 389 (ldap service): LISTENING
Sending LDAP query to TCP port 389…
TCP port 3268 (msft-gc service): LISTENING
Sending LDAP query to TCP port 3268…
TCP port 135 (epmap service): LISTENING
Necesito tu apoyo como te contacto, tema LDAP .-Active diretory
Hola Robert, al correr el script, esto es lo que obtengo:
DATE: 04/feb./2022
TIME: 11:03:41.79
USER: aposada
COMPUTER: INFRAESTRUCTURA
:::::::::::::::::::::: VMSRV13.crisa.local ::::::::::::::::::::::::::
Que problema hay?, Aun que esta mal dicho, solo tengo un PDC basado en Windows Server 2008 R2
Muchas gracias Luis por tu comentario. Mandame un mail si queres y vemos que problema tenes y como seguimos.
Te pido que me ayudes a difundir el blog! Y si tienes alguna consulta, no dudes en escribirme. Saludos.
Muchas gracias alfredo por tu comentario. No te da ningun error? tener el archivo servers.txt no? si ejecutar el portqry en un CMD te da algun error?
Te pido que me ayudes a difundir el blog! Si tienes alguna consulta, no dudes en escribirme. Saludos.
Muchas gracias por compartir este script, lo he adaptado para validar los RPC ports,
https://github.com/0zwald/AdaptedScripts/blob/880b35dc481cd466c7bce5687655a64a70422ec0/DCPortTest.CMD
Genial Oswaldo, muchas gracias por comentar y ayudar a difundir el blog. se vienen cambios importantes!
Saludos.