¿Desbloqueas una cuenta en un DC y en otros sigue bloqueada? Aquí verás por qué ocurre en Active Directory, cómo confirmarlo con repadmin
y dcdiag
, el procedimiento correcto (PDC Emulator) para desbloquear de forma fiable y qué ajustes aplicar para que no vuelva a pasar.
Resumen del caso
El estado de bloqueo/desbloqueo de una cuenta no se replica a otros controladores de dominio (DC). Además, la fecha/hora del último intento de contraseña incorrecta no coincide con el día del bloqueo.
Qué está pasando (versión corta y accionable)
- Las operaciones de bloqueo/desbloqueo dependen de la salud de la replicación de Active Directory. Si hay retrasos o fallos, un DC puede quedar “desfasado”.
- Los atributos
badPwdCount
ybadPasswordTime
son contadores por DC (no se agregan ni replican globalmente). Por eso, el valor de “Última contraseña incorrecta” puede diferir según el DC en el que consultes y no coincidir con la fecha del bloqueo. - Para la visión más fiel del estado de bloqueo, consulta y actúa siempre contra el PDC Emulator.
Cómo funciona el bloqueo en Active Directory (lo esencial)
Cuando un usuario introduce una contraseña incorrecta, el controlador de dominio que valida esa autenticación incrementa su contador local badPwdCount
para esa cuenta y registra badPasswordTime
. Si la cuenta alcanza el umbral de bloqueo definido por la política, el DC establece el estado de bloqueo (p. ej., escribiendo un lockoutTime
no nulo) y coordina con el PDC Emulator. El resto de DCs actualizan su copia del atributo de bloqueo mediante replicación. Si la replicación está lenta o con errores, distintos DCs pueden mostrar estados diferentes durante un tiempo.
Atributos clave y su comportamiento
Atributo | Qué indica | ¿Se replica? | Observaciones |
---|---|---|---|
badPwdCount | Número de intentos fallidos vistos por ese DC | No (por DC) | Puede ser 0 en un DC y >0 en otro a la vez. |
badPasswordTime | Última hora de intento fallido en ese DC | No (por DC) | No es “global”. Útil para localizar el DC que vio el fallo. |
lockoutTime | Marca de tiempo de bloqueo | Sí | Al desbloquear, vuelve a 0. Puede tardar si hay latencia. |
pwdLastSet | Último cambio de contraseña | Sí | Se replica normalmente; útil para descartar contraseñas obsoletas. |
lastLogon | Último inicio de sesión visto por ese DC | No (por DC) | No usarlo como “último logon global”. |
lastLogonTimestamp | Último inicio de sesión “aproximado” global | Sí (con tolerancia) | Puede replicar con retraso controlado (ventana de convergencia). |
Diagnóstico prioritario para este problema
Empieza por confirmar que la infraestructura está sana. Estas comprobaciones te dan la causa en la mayoría de casos.
Comprobar replicación de Active Directory
repadmin /replsummary
repadmin /showrepl * /csv
dcdiag /e /test:Replications /test:Connectivity
- Busca errores, DCs que no reciben notificaciones, colas elevadas o enlaces de sitio saturados.
- Si ves errores de DNS o RPC, corrígelos antes de cualquier otra cosa.
Verificar qué servidor es el PDC Emulator
netdom query fsmo
- Confirma que el PDC está en línea, alcanzable y sin eventos críticos en System/Security/Directory Service.
- Para la lectura más fiable, consulta atributos y desbloquea desde el PDC.
Rastrear el origen del bloqueo
En el PDC, abre el registro Security y filtra el evento 4740 (Account locked out). Ese evento indica la cuenta bloqueada y el equipo/origen que está generando intentos erróneos.
# Ejemplo con PowerShell (en el PDC)
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4740; StartTime=(Get-Date).AddDays(-3)} |
Select-Object TimeCreated,
@{Name='Cuenta';Expression={$_.Properties[0].Value}},
@{Name='Origen';Expression={$_.Properties[1].Value}},
MachineName
Sincronización de tiempo y red
- Tiempo: verifica NTP en todos los DC. Un desfase > 5 min rompe Kerberos y puede causar fallos extraños.
w32tm /query /status
w32tm /query /peers
- Red y firewall: confirma conectividad bidireccional RPC/DNS entre DCs y con el PDC. Los bloqueos de puertos causan latencia o fallos de replicación.
Puertos y servicios que deben estar abiertos
Protocolo/Servicio | Puerto | Uso |
---|---|---|
RPC Endpoint Mapper | TCP 135 | Negociación de RPC para replicación |
RPC dinámico (AD DS) | TCP 49152–65535 | Canales de replicación y MMC |
LDAP | TCP/UDP 389 | Consultas y binds |
LDAPS | TCP 636 | LDAP sobre TLS |
Kerberos | TCP/UDP 88 | Autenticación |
SMB | TCP 445 | SYSVOL/NETLOGON |
DNS | TCP/UDP 53 | Resolución, registros SRV |
Global Catalog | TCP 3268/3269 | GC/GC sobre TLS |
Acciones inmediatas para “desatascar” hoy
- Desbloquea en el PDC Emulator (o especifica el servidor en el cmdlet):
$pdc = (Get-ADDomain).PDCEmulator Unlock-ADAccount -Identity <Usuario> -Server $pdc
- Fuerza replicación tras desbloquear:
repadmin /syncall /AdeP
- Valida la convergencia consultando varios DC:
Get-ADUser <Usuario> -Server $pdc -Properties lockoutTime | fl Name,lockoutTime Get-ADUser <Usuario> -Server <OtroDC> -Properties lockoutTime | fl Name,lockoutTime
El valorlockoutTime
debe ser0
en todos los DCs una vez convergido.
Correcciones de fondo para evitar que vuelva a ocurrir
Arregla la replicación
- Revisa y corrige errores que arrojaron
repadmin
/dcdiag
(DNS, conectividad RPC, autenticación entre DCs). - Optimiza la topología de sitios y enlaces. Enlaces con coste alto o ventanas de replicación muy restringidas introducen latencias innecesarias.
- Asegura la disponibilidad del PDC (hardware, red, monitorización). Considera ubicarlo en un sitio con buena conectividad “hub”.
Uniformidad de políticas
- Confirma que la Account Lockout Policy aplicada a los usuarios es la esperada.
- Si usas políticas de contraseña de granularidad fina (FGPP), verifica conflictos o solapamientos (quién gana, a qué grupos se aplica).
Elimina fuentes de credenciales obsoletas
- Tareas programadas y servicios ejecutándose con contraseñas antiguas.
- Credenciales guardadas en Windows (Credential Manager), mapeos de unidades, aplicaciones de correo en móviles, sesiones RDP persistentes.
- Equipos que quedaron encendidos con la sesión del usuario y vuelven a intentar autenticarse.
Permisos de replicación y seguridad
- Si ves errores de acceso, revisa que las cuentas de equipo de los DCs tengan los permisos estándar en particiones de dominio/configuración.
- Comprueba que no haya GPO o hardening que rompa RPC/DCE (por ejemplo, restricciones de cifrado sin coordinar).
Monitorización y alertas recomendadas
- Eventos de bloqueo: 4740 (bloqueo), 4767 (desbloqueo).
- Intentos fallidos: 4625 (logon fallido), 4771 (Kerberos pre-auth fallida).
- Replicación/DNS: eventos de Directory Service (p. ej., 1311, 1566) y DNS (registro SRV, fallos de actualización).
Comprobaciones útiles (lecturas exactas en el PDC)
$pdc = (Get-ADDomain).PDCEmulator
Get-ADUser <Usuario> -Server $pdc `
-Properties badPwdCount,badPasswordTime,lockoutTime,pwdLastSet `
| Format-List Name,badPwdCount,badPasswordTime,lockoutTime,pwdLastSet
Para ver de un vistazo en qué DC está bloqueada la cuenta y desde dónde se originó, la utilidad LockoutStatus (ALTools) es muy práctica.
Por qué “Última contraseña incorrecta” no coincide con el día del bloqueo
Ese dato proviene de badPasswordTime
, que es local a cada DC y no se replica. Si observas ese atributo en un DC distinto del que procesó el intento fallido (o distinto del PDC), verás una fecha distinta del “momento real” del bloqueo. Por eso, durante la investigación:
- Valida siempre en el PDC.
- Cuando compares DCs, ten claro que
badPwdCount
/badPasswordTime
varían por DC;lockoutTime
sí converge por replicación.
Matriz de síntomas, causa y acción
Síntoma | Causa probable | Cómo confirmo | Acción recomendada |
---|---|---|---|
Desbloqueo en un DC, pero en otro sigue bloqueado | Latencia/errores de replicación | repadmin /replsummary , eventos 1311/1566 | Corregir red/DNS/RPC, repadmin /syncall , operar contra PDC |
Fechas de “Último intento fallido” distintas por DC | Atributos por DC (badPwdCount /badPasswordTime ) | Comparar Get-ADUser -Server <DC> | Usar PDC como referencia; correlacionar con 4740 |
Bloqueos recurrentes tras desbloquear | Credenciales obsoletas en servicios/tareas/móviles | Evento 4740: equipo de origen; revisar servicios | Actualizar contraseñas; limpiar credenciales guardadas |
Usuarios de un sitio se bloquean “a destiempo” | Enlace de sitio con ventana de replicación restringida | Revisar configuración de Site Links | Abrir ventanas/usar notificación inmediata entre sitios críticos |
Fallos de autenticación “aleatorios” | Skew de tiempo, NTP mal configurado | w32tm /query /status | Corregir jerarquía NTP; asegurar < 5 min de diferencia |
Procedimiento de investigación recomendado (runbook)
- Identifica el PDC Emulator
netdom query fsmo
- En el PDC, localiza el origen del bloqueo (evento 4740) y anota equipo/IP.
- Confirma estado de la cuenta y atributos en el PDC:
$pdc = (Get-ADDomain).PDCEmulator Get-ADUser <Usuario> -Server $pdc -Properties badPwdCount,badPasswordTime,lockoutTime | fl *
- Comprueba replicación y corrige:
repadmin /replsummary repadmin /showrepl * /csv > C:\Temp\repl.csv dcdiag /e /test:Replications /test:Connectivity
- Desbloquea en el PDC y fuerza replicación:
Unlock-ADAccount -Identity <Usuario> -Server $pdc repadmin /syncall /AdeP
- Elimina la causa raíz (credenciales antiguas en origen del 4740, servicios, tareas, etc.).
- Valida convergencia consultando 2–3 DCs de sitios distintos.
Comandos y pruebas adicionales útiles
# Ver DC preferido por un equipo
nltest /dsgetdc:<tu-dominio>
Probar puertos clave hacia un DC
Test-NetConnection -ComputerName \ -Port 135
Test-NetConnection -ComputerName \ -Port 389
Test-NetConnection -ComputerName \ -Port 445
Replicar un único objeto si hace falta
repadmin /replsingleobj \ \ \
Lista de sitios/enlaces (desde un DC con RSAT)
(Get-ADReplicationSite -Filter \*).Name
(Get-ADReplicationSiteLink -Filter \* | Select Name,Cost,ReplicationFrequencyInMinutes)
Buenas prácticas para minimizar bloqueos “fantasma”
- Coloca el PDC en un sitio bien conectado y estable; evita que comparta recursos con roles o servicios ruidosos.
- Notificación de cambios entre sitios críticos (si tu diseño lo permite) para reducir latencia perceptible en operaciones sensibles.
- Supervisa el backlog de replicación y latencias por sitio; establece umbrales y alertas.
- Higiene de contraseñas: fuerza rotación en cuentas de servicio; documenta dónde se usan; emplea gMSA cuando sea viable.
- Capacita al Service Desk con este runbook para actuar directamente contra el PDC y evitar desbloqueos “a medias”.
FAQ rápidas
¿Cuál es el DC “fuente de verdad” para bloqueos?
Operativamente, el PDC Emulator. Consulta y desbloquea ahí para obtener el estado más consistente.
¿Por qué tras desbloquear vuelve a bloquearse al instante?
Porque un equipo/servicio sigue intentando con una credencial antigua. Identifícalo con el 4740 y corrige en el origen.
¿Puedo fiarme del “Último intento fallido” en cualquier DC?
No. Es un contador por DC. Úsalo para localizar dónde ocurrieron los fallos, no como tiempo “global”.
¿Es suficiente con reiniciar Netlogon o el DC?
No arregla la causa raíz. Primero corrige replicación/red y credenciales erróneas. Reiniciar puede enmascarar el problema unas horas.
Plantilla de checklist imprimible
- ✔ PDC Emulator identificado y en línea.
- ✔ Eventos 4740/4767 revisados en el PDC; origen identificado.
- ✔
repadmin /replsummary
sin errores críticos. - ✔ NTP correcto en todos los DC (
w32tm
OK). - ✔ Puertos RPC/DNS/Kerberos accesibles entre DCs.
- ✔ Desbloqueo ejecutado en el PDC y
repadmin /syncall
disparado. - ✔
lockoutTime
= 0 en varios DCs tras replicar. - ✔ Origen con credencial obsoleta corregido.
- ✔ Políticas de bloqueo y FGPP revisadas por coherencia.
Ejemplo de guion unificado (copiar/pegar)
# 1) Identificar PDC
$pdc = (Get-ADDomain).PDCEmulator; $pdc
2) Ver estado de la cuenta en el PDC
\$user = '\'
Get-ADUser \$user -Server \$pdc -Properties badPwdCount,badPasswordTime,lockoutTime,pwdLastSet |
fl Name,badPwdCount,badPasswordTime,lockoutTime,pwdLastSet
3) Desbloquear en el PDC
Unlock-ADAccount -Identity \$user -Server \$pdc
4) Forzar replicación y validar
repadmin /syncall /AdeP
Get-ADUser \$user -Server \$pdc -Properties lockoutTime | fl Name,lockoutTime
5) Buscar el origen del bloqueo (en el PDC)
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4740; StartTime=(Get-Date).AddDays(-2)} |
Where-Object {\$.Properties\[0].Value -like "\$user*"} |
Select-Object TimeCreated,
@{Name='Cuenta';Expression={\$*.Properties\[0].Value}},
@{Name='Origen';Expression={$\_.Properties\[1].Value}},
MachineName
Conclusión
Si un desbloqueo no “aparece” en todos los DC, el motivo casi siempre es una combinación de latencia/errores de replicación y el hecho de que ciertos atributos son por DC (badPwdCount
, badPasswordTime
). Estandariza el procedimiento: investiga y opera contra el PDC Emulator, fuerza replicación, corrige el origen de intentos fallidos y mantén sana la topología de AD. Con estas prácticas, los bloqueos y desbloqueos serán coherentes en toda la infraestructura.