Perché il “Secure Channel” si sposta tra vari DC?

Prima di iniziare consiglio la lettura di un mio precedente post per avere maggior confidenza con l’argomento.

http://blogs.technet.com/itasupport/archive/2008/09/17/analisi-performance-autenticazione-ntlm.aspx

Il Netlogon ha un meccanismo per verificare che il DC con il quale ha instaurato il “Secure Channel” è attivo e veloce nel dare le risposte. Se una di queste condizioni non è soddisfatta il Netlogon cercherà un nuovo DC con cui creare il “Secure Channel”.

Facciamo un esempio per spiegare meglio il meccanismo:

Quando un richiesta di Logon NTLM viene processata in più di 45 secondi il sistema incrementa un contatore chiamato Count di 1. Se necessario è possibile aumentare i 45 secondi modificando la chiave di registro ExpectedDialupDelay.

La logica è:

    if LoginTime > 45sec + ExpectedDialupDelay value aumenta il contatore COUNT

Quando viene incrementato il contatore Count viene messo a zero un altro contatore chiamato FastCount

    09154 04/28 11:05:32 [CRITICAL] DOMAIN: NlFinishApiClientSession: timeout call to \\pippo.domain.it Count: 1

A questo punto abbiamo due possibilità:

1. LOGON VELOCE: Viene fatto un “logon veloce” che incrementa il contatore FastLogon di 1. Con logon veloce si intende un logon in meno di 1 secondo.

    09162 04/28 11:05:39 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 1
    09218 04/28 11:07:35 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 2
    09221 04/28 11:07:35 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 3
    09245 04/28 11:07:56 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 4

    Al quinto logon veloce non viene incrementato il contatore FastLogon ma decrementato il contatore Count e azzerato il valore di FastLogon

    09263 04/28 11:08:14 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call threshold to \\pippo.domain.it Count: 0

2. LOGON LENTO: Viene fatto un “Logon lento” e il contatore Count viene portato a 2 (solo se precedentemente non avvengono 5 “Logon veloci” che portano il contatore Count a zero).

    03462 04/28 11:15:32 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call threshold to \\pippo.domain.it  Count: 2

    Se il contatore Count arriva a 2 e l’ultimo cambio del “Secure Channel” non è avvenuto nei 5 minuti precedenti il Netlogon forza la “Rediscovery”.

    03055 04/28 10:13:47 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 1
    03060 04/28 10:13:49 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 2
    03066 04/28 10:14:06 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 3
    03070 04/28 10:14:11 [CRITICAL] DOMAIN: NlFinishApiClientSession: fast call to \\pippo.domain.it  FastCount: 4
    03074 04/28 10:14:11 [CRITICAL] DOMAIN: NlFinishApiClientSession: timeout call to \\pippo.domain.it  Count: 2
    03075 04/28 10:14:11 [CRITICAL] DOMAIN: NlFinishApiClientSession: dropping the session to \\pippo.domain.it

    Viene impostato lo stato della connessione a c000005e

c000005e = STATUS_NO_LOGON_SERVERS = There are currently no logon servers available to service the logon request.

    03076 04/28 10:14:11 [SESSION] DOMAIN: NlSetStatusClientSession: Set connection status to c000005e
    03077 04/28 10:14:11 [CRITICAL] DOMAIN: NlSetStatusClientSession: Start RpcCancelThread on \\pippo.domain.it
    03078 04/28 10:14:11 [CRITICAL] DOMAIN: NlSetStatusClientSession: Finish RpcCancelThread on \\pippo.domain.it 0
    03079 04/28 10:14:11 [SESSION] DOMAIN: NlSetStatusClientSession: Unbind from server \\pippo.domain.it (TCP) 2.

    Dopo la disconnessione parte il processo di ricerca del DC

    03082 04/28 10:14:11 [SESSION] DOMAIN: NlSessionSetup: Try Session setup
    03083 04/28 10:14:11 [SESSION] DOMAIN: NlDiscoverDc: Start Synchronous Discovery
    03084 04/28 10:14:11 [MAILSLOT] NetpDcPingListIp: domain.it: Sent UDP ping to 10.129.48.239

    Viene trovato il DC e impostato lo “Stato della connessione”  a 0 (Success)

    03086 04/28 10:14:11 [SESSION] DOMAIN: NlDiscoverDc: Found DC \\pluto.domain.it
    03087 04/28 10:14:11 [SESSION] DOMAIN: NlSetStatusClientSession: Set connection status to 0

A questo punto il server ha il “Secure Channel” attivo e può re-iniziare ad inviare le richieste di autenticazione al DC (pluto.domain.it)

Spero di aver chiarito questo argomento che tante volte è stato male interpretato.

Un saluto e arrivederci al prossimo post.

Matteo Belloni
Support Escalation Engineer
Microsoft Enterprise Platform Support