Scopriamo un nuovo mistero del “Secure Channel”

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