阻止Windows NLA反复将本地网络检测为新的未标识网络


14

我正在管理带有许多Windows 10和7 PC的小型企业网络。用户间歇性但非常频繁地抱怨他们无法再与其他同事访问共享文件夹。快速故障排除可以确定问题是由于臭名昭著的“检测到未识别的网络”造成的,然后使用“公共”网络配置文件而不是“私人”网络配置文件,因此家庭组/文件共享等不起作用。从我的搜索来看,这是许多用户的常见问题。我看不到任何可行的建议解决方案。

环境:

  • 所有Windows PC均通过有线以太网连接(尽管它们可能具有Wifi NIC)
  • 它们都连接到一个48端口Avaya L2受管交换机,都在同一10.10.10.x子网中
  • 交换机已连接至华硕RTN-66U家庭路由器
  • 华硕路由器连接到电缆调制解调器
  • 华硕路由器为Windows计算机提供DHCP
  • 我已经为每台Windows PC配置了带有DHCP预留功能的路由器,即PC总是在启动时获得相同的IP地址。
  • 没有域控制器

问题:

即使我已将所有Windows计算机的活动网络配置文件都配置为“私有”,它们仍经常(每两周左右)恢复为“公共”状态,这会阻止文件共享等。

尝试的修复:

在每台Windows PC上,我都修改了本地组策略Computer Configuration->Security Settings->Network List Manager Policies

  • 身份不明的网络=专用
  • 识别网络=专用

观察结果:

我认为问题在于Windows网络位置感知(NLA)服务正在检测到一个新网络,该网络会导致创建一个新的网络配置文件,然后默认将其设置为“公共”(即使上面我已将“本地组策略”配置为默认为“私有”) 。许多计算机显示Windows已多次检测到新的未识别网络,即它们显示“网络14”,即存在14个不同的网络配置文件。在注册表中查看配置文件时,我会看到这些多个配置文件 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles

所有14个配置文件都是在计算机实际连接到上述相同网络时。

我找不到能准确描述NLA如何为网络生成唯一标识符的资源,以及为什么它可能检测到发现新网络的资源。

题:

如何防止Windows将我的本地网络错误地识别为新网络?如果我知道NLA遵循什么步骤来生成网络的唯一标识符,这可能会有所帮助?


1
我对您的问题进行了一些编辑,以帮助您将重点放在询问解决实际问题上。参见XY问题
我说恢复莫妮卡

NLA根据为该网络适配器指定的默认网关的MAC地址来识别网络。这些计算机可能无法访问您的路由器吗?该问题似乎会在很短的时间内影响多台计算机,还是一天只有一个用户,而另一天又是另一个用户?
我说恢复莫妮卡

也许看看Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkList \ Signatures \ Unmanaged或至少在注册表中的该位置附近-看看DefaultGatewayMAC和DNSSuffix是否符合您的期望
Ross

PaulH-有空时请查看我的答案,这是我在生产环境中取得的相当成功的方法,正如我在方法1部分中所述,但在方法2部分中也提供了更多详细信息。希望您发现这些解决方案中的任何一个对我解决这个问题都很有帮助。
Pimp Juice IT

Answers:


5

方法1

我在一个环境中在关键Windows Server系统上处理此问题的一种方法是使用批处理脚本,该脚本使用Set-NetConnectionProfilenetsh,并在系统启动时将计算机上的每个受信任的NIC / adapter显式设置为privateTask Scheduler使用 和选项。Run whether user is logged on or notRun with highest privileges

在此处输入图片说明 在此处输入图片说明

注意:尽管悬赏单指出“ 该解决方案一定不能造成网络连接中断”,但我想提一提,由于发生此问题时,无论如何您都会遇到网络中断的情况,因此,如果问题是随机发生的,则在系统运行时运行此脚本无需重新启动,只需运行相同的脚本即可快速解决问题,并以正常工作和预期的顺序恢复对OS机器的网络访问。

此外,您可以使用Get-NetConnectionProfile获取NIC别名和索引号,以将它们放入下面的示例批处理脚本中,以满足您的需求和/或系统。

批处理脚本

@ECHO ON

::: The below PowerShell will set all the nework adapters to private rather than public and unknown as happens.
:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 12 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 20 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 22 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 24 -NetworkCategory Private>>"%PSScript%"

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

:: The below will disable and then re-enable each NIC one-by-one so the unidentfied goes away after set to "private" above
:ResetNICs
SET Array="Ethernet", "Ethernet 2", "Ethernet 3", "Ethernet 4"
FOR %%A IN (%Array%) DO (
    netsh int set int "%%~A" admin=disable
    netsh int set int "%%~A" admin=enable
)
EXIT

以下是其他几种方法,其中一种是您尝试过的方法,但我留在这里供其他人参考,以防万一它对他们有所帮助,但这是一些完全防止这种情况的方法,但是您选择使用的任何方法总是会有弊端,因此请选择毒药并进行相应的测试。

方法2(多种方法)

身份不明的网络-从公共网络转到私有网络或域网

如果NLA无法确定连接位置,则将其命名为“ Unidentified”,并将该位置标记为Public。它选择“公共”是因为这是最安全的,如果连接位于DMZ上,您将一无所获。

有两种简单的方法可以解决此问题。一种使用本地安全策略来更改未标识网络的默认位置。第二种方法使用对网络连接属性的更改,为NLA提供正确放置位置所需的信息。

使用本地安全策略

注意: 仅当计算机在公共LAN上永远不会有任何连接时,才应使用此选项。否则,您将面临将不太安全的防火墙配置文件应用于您的公共连接的风险。

  1. 打开“ 本地安全策略 ”。

  2. 单击左窗格中的“ 网络列表管理器策略 ”。(此选择隐藏在旧版本的Windows中。)

  3. 双击右窗格中的“ Unidentified Networks ”。

  4. 对于仅存在于专用网络上的计算机,可以将“ 位置类型 ” 设置为“ 专用 ”。

    在此处输入图片说明

使用网络连接属性

这与添加网关IP无关,因为在多宿主服务器上无法正常工作。取而代之的是,我们将添加DNS后缀,以便NLA可以正确定位域控制器,这是将域控制器标记为“域网络”的方式。

  1. 转到网络连接(从网络和共享中心,单击“更改适配器设置”。)

  2. 转至标记为“ Unidentified ”但在专用LAN上的一个网络连接的属性

  3. 转到IPv4属性

  4. 单击“ 高级 ...”按钮。

  5. 选择“ DNS”选项卡。

  6. 在“ 此连接的DNS后缀: ” 文本框中输入您的域名。

禁用然后启用连接以使NLA重新标识位置。启用连接后,状态应更改为域名,网络类别更改为“域网络”。根据您的设置,可能您只需要“修复”一个连接即可获取所有相关的连接以查看域。

从私人到公共

强制NLA将连接标记为公共的方法有两种。一种是使用防火墙规则来阻止NLA,以便除了使用默认位置外别无选择。另一种是使用注册表禁用连接上的NLA。

使用防火墙

我还没有测试过,但是理论似乎是正确的。

  1. 打开“ 具有高级安全性的Windows防火墙 ”(即wf.msc)。

  2. 转到出站规则

  3. 单击“ 新规则 ...”。

  4. 使用以下设置:

    • 规则类型: 自定义
    • 程序:选择“所有程序”,然后单击“自定义...”。选择“网络位置感知”(简称为NlaSvc)。
    • 协议和端口: 协议类型=任何。
    • 范围: 本地IP =输入所有公共IP。仔细检查是否有多个IP连接。
    • 行动: 封锁
    • 简介:全部
  5. 启用规则后,请先禁用然后再启用网络连接以使NLA重新标识位置。

使用注册表

我没有这项工作,但我的情况可能与您的情况有所不同。找到正确的连接号可能会有些麻烦,因为输入的条目比您期望的要多得多。

  1. 运行regedit

  2. HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

  3. 在下面,您应该看到几个标记为0000,0001,0002等的键…浏览这些键,找到要禁用NLA的适配器。

  4. 对于每个适配器,添加一个名为“ * NdisDeviceType”的新DWORD值并将其设置为1(确保在名称的开头得到*)。

变得剧烈

位置配置文件位于注册表中,删除它们并让Windows重建它们似乎无害。您肯定要先备份注册表,并且可能需要通过KVM(而不是远程(RDP))连接到服务器。如果您选择此步骤,我将不承担任何责任,因为我主要将其放在此处以供参考。

配置文件的位置是:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles

资源


第一种方法看起来很有希望。我不确定涉及重新启动NLA服务的其他方法,因为无论如何总会解决问题,因此很难知道重新启动服务是解决方案还是其他措施。现在,我只需要一台执行此错误操作的计算机即可进行测试....
我说要恢复Monica

@TwistyImpersonator是的,方法1是我使用的方法,只是让它在启动时运行。在这种情况下,它是一台具有4个NIC的Hyper-V虚拟主机服务器,并确保它在启动时运行,到目前为止已经为我解决了该特定系统的问题。我认为这是由于网络交换机或路由器重新启动而发生的另一次,而不是重新启动虚拟主机服务器,我只是手动运行了脚本,它解决了问题。我注意到了这个问题,并张贴了我使用过的解决方案以及其他引用的资源,这些资源看起来很相关并且可能会有所帮助。
Pimp Juice IT

我注意到您提供了赏金,但我想我没有意识到这是您的需要,而不仅仅是试图让OP得到答案。也很高兴知道。
Pimp Juice IT

0

在一个特定的系统上,我无休止地遇到了这个问题。每次重新启动都会破坏一切。我尝试了您提到的所有解决方案。在用尽所有其他内容后,我求助于禁用“网络位置感知”服务。据我所知是不需要的。这已经永久解决了我的问题。我注意到的唯一副作用是“网络和共享中心”窗口看起来很有趣。该服务在Windows 7之前不存在,对我完全没有用。

Services.msc

“网络位置感知”,启动类型=“禁用”


嗯,不确定在域环境中还是在受信任和不受信任的网络之间携带便携式计算机时,这是一个好主意。对这两种情况有任何反馈吗?
我说恢复莫妮卡

我正在域环境中执行此操作。效果很好。如果您在不受信任的环境中使用笔记本电脑,则需要采取其他保护措施。NLA不会拯救您。它所能做的就是自动禁用共享。我建议不要在笔记本电脑上共享任何内容。
HackSlash

没有NLA,您的系统如何在域和私有配置文件之间切换,例如,当员工将笔记本电脑带回家时?
我说恢复莫妮卡

没有NLA,根本没有配置文件。您将这些配置文件用于什么?
HackSlash

我管理的许多系统在连接到域网络时都允许入站流量,但是当系统离开域时,此类流量将被阻止。这就是我们实施深度防御的方式...端口仅在需要的地方打开,而在其他地方关闭。
我说恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.