Windows: … und ewig schleicht die Netzwerkkategorie

Ein bombiger Titel, ich weiß 😛 Schätzungsweise nahezu jeder Windows-Administrator hat sich schon einmal damit herumschlagen dürfen, das nach einem Neustart, meist nach den aktuellen Windows Updates, als Netzwerkkategorie “Öffentliches Netzwerk” statt “Privates Netzwerk” oder “Domänennetzwerk” angezeigt bzw. angewendet wird.

Im Domänennetzwerk sieht man des Öfteren auch “Privates Netzwerk” statt eben “Domänennetzwerk”. Dieses Verhalten tritt nicht überall auf und die Server-Version oder -Edition spielt ebenfalls keine Rolle. Auf Clients habe ich dieses “Fehlverhalten” nicht allzu oft bislang gesehen.

Im Laufe der Jahre gab es zu diesem Thema bereits mehrere Beiträge in diesem Blog, unter anderem wie man die Netzwerkkategorie via Powershell ändert. An der zugrundeliegenden Problematik hat sich (leider) selbst unter Windows Server 2019 nichts geändert.

In der Regel reicht es aus den Dienst

NLA (Network Location Awareness)“ (Dienstname: "NlaSvc")

neu zu starten. Damit man dies nicht immer manuell tun muss, kann man das Ganze als Aufgabe hinterlegen. Es hat sich bis hierhin gezeigt, das eine Verzögerung bevor die Aufgabe “Beim Start” ausgeführt wird nicht verkehrt ist:

Zudem ist eine kurze Pause zwischen Dienst-Stopp und -Start hilfreich um erfolgreich ans Ziel zu gelangen. Die notwendigen Befehle packt man in ein simples Batch-Skript, das die Aufgabe dann ausführt:

@echo off

rem Netzwerklistendienst und NLA beenden

 net stop netprofm
 net stop NlaSvc

rem Kurze Pause

 ping 127.0.0.1 -n 10 > nul

rem Dienste erneut starten

 net start netprofm
 net start NlaSvc

Als neues Phänomen ist unter Windows Server 2019 hinzugekommen, das ein installierter DHCP-Server nach dem Wechsel der Netzwerkkategorie von “Öffentlich” oder “Privat” zu “Domänennetzwerk” dennoch nicht erreichbar ist und folglich keine IP-Adressen verteilen kann. Hier hilft ebenfalls ein Dienst-Neustart. Als Gesamtkunstwerk kann das so aussehen:

@echo off

rem DHCP-Server, Netzwerklistendienst und NLA beenden

 net stop DHCPServer
 net stop netprofm
 net stop NlaSvc

rem Kurze Pause

 ping 127.0.0.1 -n 10 > nul

rem Dienste erneut starten

 net start netprofm
 net start NlaSvc
 net start DHCPServer

Hinweis: Auf “timeout” wurde bewusst verzichtet und stattdessen der klassische Trick mit “ping” als Pause verwendet, da der erstgenannte Befehl in Aufgaben oder Skripten ohne angemeldeten Benutzer und aktiver Sitzung nicht funktioniert.

Update 03.02.2023

In den Kommentaren (Vielen Dank dafür) zu diesem und dem Beitrag

Windows: Nach Neustart bei Netzwerkkategorie kein Domänennetzwerk mehr

wurde vielfach vorgeschlagen eine Abhängigkeit vom DNS-Dienst zu erstellen. Dies geht in der Eingabeaufforderung wie folgt:

sc config nlasvc depend= NSI/RpcSs/TcpIp/Dhcp/Eventlog/DNS/NTDS

Update 11.08.2023

Scheinbar greift dieses Thema jetzt wie eine Seuche um sich. Mittlerweile haben wir das Problem bei sehr vielen Windows Server 2022 und leider lässt sich der NLA-Dienst nicht mehr manuell neu starten:

Eine Ursache hierfür kann sein, wenn man IPv6 deaktiviert hat. Aber selbst auf Systemen wo IPv6 aktiv ist funktioniert es nicht (mehr). Der Workaround besteht nun darin die Dienstabhängigkeit zu DNS herzustellen wie es im vorigen Update bereits genannt wurde und oft in den Kommentaren erwähnt wird. Es gibt zwei Wege das zu tun:

In der Registry unter

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc

beim Eintrag

DependOnService

die weiteren Dienste hinzufügen. Am einfachsten geht es über folgenden Befehl:

sc config nlasvc depend= NSI/RpcSs/TcpIp/Dhcp/Eventlog/DNS/NTDS

Achtung: “DNS” steht für den DNS-Dienst, den es nur auf Domänencontrollern und DNS-Servern gibt. “NTDS” steht für den Verzeichnisdienst, also Active Directory, den es nur auf Domänencontrollern gibt. Folglich darf man nicht auf Systemen die kein DC oder DNS-Server sind diese Abhängigkeit herstellen!

Das bedeutet: Auf Member-Servern und Clients lässt man “NTDS” weg und ersetzt “DNS” durch “Dnscache”:

sc config nlasvc depend= NSI/RpcSs/TcpIp/Dhcp/Eventlog/Dnscache

Diese Änderungen lassen sich wie folgt wieder rückgängig machen:

sc config nlasvc depend= NSI/RpcSs/TcpIp/Dhcp/Eventlog

Update 15.02.2024

Dieter hat mir folgende Info (Vielen Dank dafür) zukommen lassen:

"Und diese Registrierungseinträge setzte ich. Das habe ich aktuell mit einer Server 2022 Std. der PDC spielt getestet, der bei jedem Neustart das NLA-Problem hatte."

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters]
"MaxNegativeCacheTtl "=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
"NegativeCachePeriod "=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters]
"AlwaysExpectDomainController"=dword:00000001

Diese stammen aus folgenden Beitrag

Microsoft Learn – Questions – Network location awareness not detecting domain network from offsite location

Selbst getestet habe ich Sie noch nicht, aber es sieht vielversprechend aus.

8 Kommentare

  1. Peter Weigend

    Hallo Andy,

    ich habe es bei Windows Server 2022 mit einem einfachen PowerShell-Skript in der Aufgabenplanung geloest.
    Als Netzwerkprofil wurde immer privat angezeigt
    Auf meinem Mainboard X11SPM-F befinden sich 2 Netzwerkadapter, einer ist deaktiviert (Ethernet).

    Der deaktivierte Adapter wird 90 Sekunden nach dem Start aktiviert und nach 2 Sekunden wieder deaktiviert:

    Enable-Netadapter -Name “Ethernet”
    Start-Sleep -Seconds 2
    Disable-Netadapter -Name “Ethernet”

    Danach wird das Netzwerkprofil Domaene angezeigt (Adapter Ethernet2).

    Das hat den Vorteil, dass es zu keiner Netzwerkunterbrechung kommt und somit keinen Fehler in der Ereignisanzeige erzeugt (Anwendungs- und Dienstprotokolle / DNS-Server)

    Gruss
    Peter

  2. Peter Weigend

    Hallo,
    noch eine kurze Anmerkung zur Mail vom 26.08.2022:
    Damit das Skript immer fehlerfrei durchlaeuft, sollte es wie folgt ergaenzt werden:

    Enable-NetAdapter -Name “Ethernet” -Confirm:$false
    Start-Sleep -Seconds 2
    Disable-NetAdapter -Name “Ethernet” -Confirm:$false

    Gruss
    Peter

  3. Luca Steinke

    Einfachere Lösung als das Script:

    sc config nlasvc depend= NSI/RpcSs/TcpIp/Dhcp/Eventlog/DNS/NTDS

    das geht nur in der cmd.exe, nicht in Powershell, und setzt eine Dependency für den Network Location Awareness Service auf DNS und Domain Services, d.h. er wird erst gestartet, wenn eine Domain vorhanden ist.

  4. private.acount

    könnte das etwas für euch sein?
    >https://github.com/ElectronicElephant/NCSIOverride<

  5. private.acount

    könnte das etwas für euch sein?
    https://github.com/ElectronicElephant/NCSIOverride

  6. Andy

    Danke für dein Kommentar, aber das hat mit dem Thema nichts zu tun.

  7. Johannes

    Bei Member-Servern habe ich die Erfahrung gemacht, dass die Erkennung viel besser funktioniert, wenn man deren IP-Adresse via DHCP zuweist. Ich habe jeden betroffenen Server auf DHCP (mit Reservierung) umgestellt und seitdem ist Ruhe. Geht natürlich nicht bei DCs, aber da hatten wir das Problem zum Glück auch nie. Zu WS2K22 kann ich noch nichts sagen, aber bei WS2K12/16/19 hat das immer geklappt.

  8. GoaMetz

    … die Powershell-Version für das Setzen der Reg-Key wäre übrigends:

    Domaincontroller
    Set-ItemProperty -Path “HKLM:SYSTEMCurrentControlSetServicesNlaSvc” -Type MultiString -Name “DependOnService” -Value “NSI”, “RpcSs”, “TcpIp”, “Dhcp”, “Eventlog”, “DNS”, “NTDS”

    Non-Domaincontroller
    Set-ItemProperty -Path “HKLM:SYSTEMCurrentControlSetServicesNlaSvc” -Type MultiString -Name “DependOnService” -Value “NSI”, “RpcSs”, “TcpIp”, “Dhcp”, “Eventlog”, “Dnscache”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑