Nützliche Optionen von NLTEST

Nützliche Optionen von NLTEST

  • Comments 7
  • Likes

Hi, Fabian hier. Heute mal mit einem recht kurzen Artikel zu „NLTEST“.

Das Kommandozeilenprogramm „NLTEST“ führt oftmals ein Schattendasein und wird nicht weiter beachtet, außer wenn es um Fragen rund um den secure channel geht. Wie so oft filtert man die „nicht gewünschten“ Schalter, die bei dem Ausführen von „NLTEST /?“ aufgelistet werden, gewohnheitsgemäß aus.

Das Programm bietet jedoch das ein oder andere nützliche Kommando, welches einem so manche Frage schnell beantworten kann oder auch sinnvolle Aktionen ausführen kann. Daher folgt hier ein kurzer Abriß von einigen nützlichen Schaltern, die wir oftmals nutzen – ohne, daß alle NLTEST-Optionen besprochen werden sollen. „NLTEST /?“ oder auch http://technet.microsoft.com/en-us/library/cc786478.aspx zeigen weitere Schalter und Funktionen.

DNS-Aufräumvorgang:
Je nachdem wie man einen DC aus der Active Directory Umgebung entfernt, können DNS-Einträge bestehen bleiben. Im Normalfall wird der DNS-Aufräumvorgang („DNS scavenging“) - sofern aktiviert – nach einiger Zeit die Säuberung der DNS-Zone vornehmen. Der Zeitwert für die Alterung kann manuell pro Zone angepaßt werden. Bis dahin kann es jedoch zu merkwürdigen DNS Abfrageergebnissen kommen bzw. kann es andere Probleme in Bezug auf den nun nicht mehr vorhandenen DC geben. Gerade die Einträge der "_msdcs"-Zone bieten hier einen großen Fehlerpool. Auch für diverse Tests kann es sinnvoll sein, temporär die SRV-Einträge eines DCs zu entfernen.

Möchte man nun nicht manuell die Einträge eines DCs aus der "_msdcs"-Zone entfernen, nutzt man einfach das folgende NLTEST-Kommando:

C:\> nltest /DSDEREGDNS:server01.domain.tld

Damit werden die DC-spezifischen SRV-Einträge entfernt. Möchte man auch die GUID-Einträge des DCs entfernen, können weiterhin die Optionen „/DOMGUID“ bzw. „/DSAGUID“ helfen.

Möchte man die Einträge wieder registrieren, reicht ein auf dem entsprechenden DC ausgeführtes

C:\> nltest /DSREGDNS

Informationen zu Sites:
Gerade wenn Sites ohne DCs existieren, möchte (oder muß) man ab und an prüfen, wo ein DC die sogenannte „Site-Coverage“ (siehe http://technet.microsoft.com/en-us/library/cc759550.aspx) durchführt. Dabei registriert ein DC seine SRV-Einträge für eine Site, in der kein DC eingetragen bzw. vorhanden ist. Möchte man nun prüfen, welche Sites ein bestimmter DC zusätzlich mit abdeckt, setzt man folgendes Kommando ab:

C:\> nltest /DSGETSITECOV

Möchte man dann „nebenbei“ noch über die Kommandozeile herausfinden, welcher Site der DC selbst zugewiesen ist, reicht ein:

C:\> nltest /DSGETSITE

Eine Liste mit allen DCs einer Domäne und der Site, der sie zugeordnet sind, sowie einigen Zusatzinformationen liefert:

C:\> nltest /DCLIST:domain.tld

Informationen zu Domänencontrollern:
Das Kommando

C:\> nltest /DNSGETDC:domain.tld

gibt die DCs der angegebenen Domäne mit Ihren IP-Adressen zurück.

Möchte man einen Aufruf der internen Funktion "DsGetDcName" durchführen / simulieren, so wie ihn auch eine beliebige Applikation bzw. der Client selbst absenden würde, verwendet man beispielsweise:

C:\> nltest /DSGETDC:domain.tld /force

Das interessante an der Rückgabe sind die zusätzlichen Informationen, die zum DC bzw. damit indirekt auch zur DC-Wahl angegeben werden.

Zusätzliche Schalter für „DSGETDC“ und „DNSGETDC“ liefern noch weitere Optionen, um die Auswahl einzugrenzen, etwa um nur Globale Kataloge oder schreibbare DCs anzuzeigen. Dies kann neben der Ausführung auf DCs insbesondere auch für ein schnelles Troubleshooting auf den Clients sehr nützlich sein.

Clientoptionen:
Möchte man manuell ein Computerkennwort (genutzt etwa für den secure channel zwischen Client und DC) zurücksetzen, kann auf auf Memberservern oder Clients das Kommando

C:\> nltest /SC_CHANGE_PWD

eingesetzt werden.

Domänenclients führen beim Betriebssystemstart ein "discovery" nach einem für sie "geeigneten" DC aus. Nachdem dieser DC gewählt wurde und ein sicherer Kanal zu diesem DC aufgebaut wurde, versucht der Client mittels sogenannter "DC stickyness" auch diesen DC während der gesamten Session zu behalten - und damit ist nicht etwa die Logon Session eines Benutzers gemeint, sondern die Session des Betriebssystems (also etwa bis zum Neustart des Clients). Möchte man nun ein erneutes discovery des Clients erzwingen (sei es, weil es Probleme mit einem DC gibt, Site-Änderungen stattgefunden haben oder etwa DNS Prioritäten geändert wurden), kann man diesen discovery Prozess mit dem folgenden Befehl anstoßen, denn nach dem zurücksetzen des sicheren Kanals sucht sich der Client einen (ggf. neuen) DC, mit dem er für die neue Sitzung diesen sicheren Kanal aufbauen kann:

C:\> nltest /SC_RESET

Trusts:
Zu guter Letzt soll noch ein Kommando genannt werden, welches für ein Trust-Troubleshooting nützlich sein kann:

C:\> nltest /DOMAIN_TRUSTS

Hierbei werden neben den Trusts selbst auch einige Informationen zum Status bzw. den Optionen des Trusts angezeigt.

Wie angesprochen liefert NLTEST viele weitere Optionen, die man in einer ruhigen Minute einmal erkunden kann. Natürlich lassen sich die Informationen auch mit anderen Programmen (grafisch als auch auf der Kommandozeile) sammeln – einige Optionen liefert NLTEST jedoch in sehr nützlicher Form, so daß ein Blick in jedem Fall lohnt.

Hinweis: Aufgrund einiger Änderungen im AD-Bereich seit Windows Server 2008 (etwa dem RODC) ist es sinnvoll, bei vorhandenen Windows Server 2008 DCs in der Umgebung, auch die Windows Server 2008 Version von NLTEST zu verwenden, da dieses die neuen „Spezialitäten“ kennt. Das Programm ist hier auf DVD mit dabei und muß nicht über Support Tools nachinstalliert werden, wie es unter Windows Server 2003 der Fall ist. Für Vista steht NLTEST in den RSAT Tools zur Verfügung oder man kopiert sich die NLTEST.EXE von einem Windows Server 2008 System auf den Client.

Viele Grüße
Fabian

Comments
  • Hallo Fabian,

    eine Frage zu dem Thema "Secure Channel":

    Der Client baut beim Start einen SecChannel zu einem DC auf und cacht den Eintrag. In meinem Verständnis wird dies durch den DC Locator Prozess durchgeführt. Demzufolge müsste "sc_reset:domain" und "/DSGETDC:domain /force" doch das gleiche Ergebnis liefern.

    Bei meinem Test zeigt sich, dass das nicht so ist.

    Gruß   Nick

  • Hi Nick,

    wie hast Du das Vorgehen denn getestet? Unter Umständen wurde schlichtweg der selbe DC nach dem SC_RESET verwendet wie davor?

    Grundsätzlich wird bei einem SC_RESET der DC Locator neu initiiert, von daher findet die Auswahl eines DCs nach den bekannten Faktoren statt (site-specific records, DNS priorities, DNS weights etc.).

    Testweise kannst Du auch einen konkreten DC bestimmen, der bei einem NLTEST /SC_RESET zum Aufbau des secure channel verwendet werden soll. Dazu nutzt Du folgendes Kommando: NLTEST /SC_RESET:DOMAIN\DC_NAME .

    Wenn es hier Probleme gibt, kannst Du mit einem Netzwerktrace + Netlogon.log prüfen, woran es liegt.

    Viele Grüße
    Fabian

  • Hallo Fabian,

    sorry, es war wohl nicht klar genug: es geht mir um den Unterschied zwischen "sc_reset" und "dsgetdc".

    Mein Test in Kurzform:

    1) "sc_query" => Trusted DC: DC1

    2) "dsgetdc /force" => DC: DC2

    3) "sc_query" => Trusted DC: DC1

    ? sollte jetzt doch DC2 sein ?

    4) "sc_reset" => Trusted DC: DC3

    5) "sc_query" => Trusted DC: DC3

    Gruß   Nick

  • Hallo Nick,

    Dein Test sieht doch gut aus - DNS round robin funktioniert und Du hast eine Lastverteilung auf die verschiedenen DCs.

    Ein DSGETDC erneuert nicht den sicheren Kanal - es macht lediglich einen API-Call, der z.B. auch durch das Zurücksetzen des secure channels durchgeführt werden würde. Es ändert aber nichts am bestehenden secure channel und damit auch nichts am LOGONSERVER etc.

    Viele Grüße
    Fabian

  • Hallo Fabian,

    nach diesen Artikeln hatte ich das anders verstanden:

    http://support.microsoft.com/kb/939252:

    "Update the cache on each client. To do this, run the following command at a command prompt:

    nltest /dsgetdc:DomainName /force"

    http://blogs.dirteam.com/blogs/sanderberkouwer/archive/2008/06/24/domain-controller-stickiness-prevention.aspx

    "True hard core Systems Administrators used the command line to fix this problem on their Active Directory clients by emptying the DC Locator cache:

    nltest /dsgetdc:DomainName /force"

    Gruß  Nick

  • Hallo Nick,

    ich hoffe, daß wir nicht aneinander vorbeireden - aber den "DC locator cache zu löschen" ist nicht gleichbedeutend mit "den sicheren Kanal zurückzusetzen". Dieser bleibt während einer Session (sollten alle dafür notwendigen Faktoren stimmen) bestehen.

    Viele Grüße

    Fabian

  • Hallo Nick,

    ein DSGETDC Cache Reset hat für den Netlogon SC keine direkte Auswirkung, erst bei der nächsten DC discovery.

    Zudem macht SC_RESET selbst auch wieder ein DSGETDC /FORCE. Daher bringt ein vorangestelltes DSGETDC /FORCE nicht wirklich etwas, man kann dadurch den DC für SC_RESET nicht beeinflussen. Umgekehrt kann am aber feststellen, daß SC_RESET den Cache von DSGETDC verändert haben kann.

    Grüße, Roland

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment