Windows 的 VPN 适配器该设为专用还是公用?
用三项检验判断 Windows VPN 适配器是否应属于专用配置文件:可信路径、稳定分类,以及你真正需要的规则。
把 Windows VPN 适配器设为「专用」对企业隧道是正确的,对商业 VPN 客户端则是错误的,这种差别并非外观问题。网络类别会选择一个防火墙配置文件,因此一次改动就同时放行整套规则。我曾见过登录脚本把每个未识别的适配器都设为专用,结果悄悄暴露了酒店无线网络上的文件共享。答案取决于三个条件,而且在动这项设置之前,三者都必须成立。
类别实际决定的是什么
Network Location Awareness 会依据适配器能报告的信息为每个已连接的网络生成签名:网关地址与 MAC、DNS 后缀、域控制器是否有响应,以及网络能否到达互联网。Windows 为签名绑定一个配置文件,随后防火墙套用该配置文件的规则集。识别失败时回落到「公用」,所以一条能工作的隧道仍可能被标记为未识别的网络。
TUN 或 TAP 适配器通常给识别过程提供的信息极少。隧道对端往往不是一个网关,而是一个单独地址;DNS 可能只在隧道内部下发;适配器本身也没有默认路由。由此得到的标签描述的是防火墙的输入,而不是隧道的健康状况;这就是为什么 VPN 一连接,专用配置文件规则就不再匹配。
条件一:隧道是可信路径
选择「专用」等于声明:通过这个接口可达的一切,至少与自己的局域网同样可信,因为网络发现和入站规则会把该子网当作本地网络。对于通往受管子网、其中有文件服务器和打印机的企业隧道,这个声明通常成立。适配器是通往贵组织所控制网络的一扇门,对端机器也是由放行你这台机器的同一策略放行的。
商业 VPN 出口通不过这项检验。其他订阅者共享该出口子网,把它标为专用会把网络发现、LLMNR 和 NetBIOS 名称解析放到一个满是陌生人的网段上。拆分隧道也可能失败:当适配器只承载通往某个应用的单条主机路由时,就谈不上什么可信子网,改类别也不会带来任何好处。
条件二:分类能在重连后保持
新的网关或 DNS 后缀会产生新的签名,Windows 会据此重新做一次配置文件判断。因此一次性的 Set-NetConnectionProfile 只能维持到下次重连,而不是永久有效。请在重连后检查配置文件,而不是在首次连接后检查,因为设置正是在那时自行回退的。
有三种办法让它持久生效。最干净的是策略:打开 secpol.msc,进入 Network List Manager Policies,为网络设置位置类型,包括未识别网络的策略,让配置文件由策略而不是由命令来应用。第二种是按连接运行的脚本或计划任务,在隧道建立后执行该 PowerShell cmdlet。第三种是由来已久的添加路由技巧,它给识别过程提供一个可探测的网关:
route -p add 0.0.0.0 mask 0.0.0.0 10.8.0.1 metric 50 IF 24
Get-NetConnectionProfile
路由技巧只是权宜之计,不是分类。当度量关系改变或 VPN 客户端在重连时重写路由,它就会失效,而且它会悄悄改变所有回落到第二条默认路由的路径选择。
条件三:你确实需要专用规则集
「专用」通常包含文件和打印机共享、网络发现以及远程管理组。如果任务是通过隧道访问某个 SMB 共享或打印机,那才是改类别的真正理由。如果任务只是出站访问一个 Web 应用,类别就无关紧要:写好出站规则,保持「公用」,到此为止。
| Scenario | Category | Why |
|---|---|---|
| Corporate tunnel to a file server or printer | Private | Private rules carry the sharing you need |
| Commercial VPN for privacy | Public | The exit subnet is shared with strangers |
| Split tunnel with a single host route | Public | No trusted subnet and an unstable signature |
| Site-to-site tunnel to a branch LAN | Private | The far subnet is managed like the local one |
| Lab adapter you control end to end | Private | Discovery helps and nothing else is exposed |
把这张表当作起点,然后确认你的镜像上究竟启用了哪些专用规则。加固过的镜像可能已把文件共享从专用配置文件中完全移除,此时在重新加回规则之前,改类别毫无作用。这项检查只需一条命令,却能省下一个漫长的下午。
在改动时不要顺带放宽其他一切
以接口索引为目标,而不是通配符,并前后各读一次列表:
Get-NetConnectionProfile
Set-NetConnectionProfile -InterfaceIndex 24 -NetworkCategory Private
Get-NetFirewallProfile
已保存的配置文件位于注册表的 NetworkList 键下,其中 Category 值区分公用、专用和域网络。可以编辑,但很容易出错:必须修改与适配器当前签名匹配的那一项,而不是先前地址遗留的旧项。过期项在编辑器里看着正确,重连时却什么也不做。
无论做什么,都不要下发那种把每个未识别适配器都设为专用的脚本。那就是在不可信无线网络上开放发现功能的一行版做法。如果你只需要与隧道子网共享,那就保持「公用」,并添加限定到隧道远端地址范围的入站规则;防火墙规则比类别更窄。
验证共享本身,而不是标签
改动之后,直接测试资源本身,而不是相信标签:
Test-NetConnection files.corp.example -Port 445
Resolve-DnsName files.corp.example
如果适配器显示「专用」而共享仍然失败,问题就不在类别上了。名称解析、缺失的路由或共享权限都会造成同样的现象,再改一次配置文件也无法修复其中任何一项。重连一次并重新运行 Get-NetConnectionProfile 以确认设置确实保持,然后按普通 SMB 问题来处理剩下的故障。
检查清单:确认隧道是受管路径,确认配置文件能在重连后保持,确认镜像上存在你需要的专用规则,并确认共享能被解析且在 445 端口有响应。如果前三项中有任何一项不成立,就让适配器留在「公用」,改用限定范围的规则来解决访问问题。