![将未来的网络连接设置为私人位置,而不是默认为公共位置](https://linux22.com/image/1400183/%E5%B0%86%E6%9C%AA%E6%9D%A5%E7%9A%84%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%A7%81%E4%BA%BA%E4%BD%8D%E7%BD%AE%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E9%BB%98%E8%AE%A4%E4%B8%BA%E5%85%AC%E5%85%B1%E4%BD%8D%E7%BD%AE.png)
在 Windows Server 2012 和 2012R2 中,是否可以将未来的网络连接设置为使用私有防火墙配置文件,而不是默认使用公共防火墙配置文件?
我已尝试在“安全设置”->“网络列表管理器策略”中将所有网络项设置为“私有” secpol.msc
,但每当我连接新网络时,它总是默认为“公共”。
或者,有没有办法重新启用非服务器版本的 Windows 中显示的“设置网络位置”对话框。这至少有助于缓解这个问题。
答案1
此安全“功能”是设计使然。“新”或“无法识别”网络上的服务器将默认使用公共配置文件。由于它不在域配置文件上,不是 DC,并且 DNS 查找(用于识别网络)失败,因此它将您所在的网络定义为“未知”网络,因此默认使用“公共”配置文件。
您可以通过将服务器加入域来解决此问题,这样做会将网络位置设置为“域网络”。但是,如果您不断连接到“新”网络,此解决方案可能并不理想,甚至不可能。
如果您位于受信任的网络上并且发生这种情况或该服务器是 DC,则将服务“网络位置感知”设置为延迟启动将解决此问题。
如果您的服务器正在“旅行”到不同的网络或不存在 DC,则可以运行以下 powershell 脚本(从windows powershell 团队博客)将所有网络配置文件设置为“私有”:
# Skip network location setting for pre-Vista operating systems
if([environment]::OSVersion.version.Major -lt 6) { return }
# Skip network location setting if local machine is joined to a domain.
if(1,3,4,5 -contains (Get-WmiObject win32_computersystem).DomainRole) { return }
# Get network connections
$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
$connections = $networkListManager.GetNetworkConnections()
# Set network location to Private for all networks
$connections | % {$_.GetNetwork().SetCategory(1)}
如果您想创建一个计划任务来在启动时运行此脚本,这里有一个很好的教程:“使用 Windows 任务计划程序运行 Windows PowerShell 脚本”。