我知道这个问题已被问过很多次但我还没有找到任何可以真正解决问题的方法。
我使用 VPN 访问国际互联网,信息自由是一项基本人权,不幸的是我住在中国,所以我必须使用 VPN 来行使这项权利。
现在,Windows 10 在 VPN 连接时错误地报告“无互联网”,尽管我可以正常访问任何被阻止的网站(例如www.google.com)。以前,当 VPN 处于活动状态时,Windows 可以正确报告“Internet 访问”,但现在却无法报告。
您可能认为这没什么大不了的,但我的 ISP 不断尝试断开我的 VPN,有时他们会成功,并且网络连接状态指示器无法告诉我何时真正断开连接。
我当然用 Google 搜索了这个问题,一些结果建议进行以下注册表编辑并重启路由器:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]
"ActiveDnsProbeContent"="8.8.8.8"
"ActiveDnsProbeContentV6"="2001:4860:4860::8844"
"ActiveDnsProbeHost"="dns.google"
"ActiveDnsProbeHostV6"="dns.google"
"ActiveWebProbeContent"="success"
"ActiveWebProbeContentV6"="success"
"ActiveWebProbeHost"="detectportal.firefox.com"
"ActiveWebProbeHostV6"="detectportal.firefox.com"
"ActiveWebProbePath"="success.txt"
"ActiveWebProbePathV6"="success.txt"
"CaptivePortalTimer"=dword:00000000
"CaptivePortalTimerBackOffIncrementsInSeconds"=dword:00000005
"CaptivePortalTimerMaxInSeconds"=dword:0000001e
"EnableActiveProbing"=dword:00000001
"PassivePollPeriod"=dword:0000000f
"StaleThreshold"=dword:0000001e
"WebTimeout"=dword:00000023
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies]
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\NetworkConnectivityStatusIndicator]
@=""
我试过了,但是没用。
我可以正常 ping 测试中使用的服务器:
PS C:\Users\Xeni> ping detectportal.firefox.com
Pinging prod.detectportal.prod.cloudops.mozgcp.net [34.107.221.82] with 32 bytes of data:
Reply from 34.107.221.82: bytes=32 time=203ms TTL=120
Reply from 34.107.221.82: bytes=32 time=203ms TTL=120
Reply from 34.107.221.82: bytes=32 time=203ms TTL=120
Reply from 34.107.221.82: bytes=32 time=204ms TTL=120
Ping statistics for 34.107.221.82:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 203ms, Maximum = 204ms, Average = 203ms
PS C:\Users\Xeni> ping 8.8.8.8
Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=203ms TTL=120
Reply from 8.8.8.8: bytes=32 time=203ms TTL=120
Reply from 8.8.8.8: bytes=32 time=203ms TTL=120
Reply from 8.8.8.8: bytes=32 time=200ms TTL=120
Ping statistics for 8.8.8.8:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 200ms, Maximum = 203ms, Average = 202ms
我已禁用并重新启用网络适配器...
什么都不起作用。
但是我知道如果我断开 VPN,NCSI 将立即正确报告我可以访问互联网,我已经成功重现了多次而没有失败,但当然这不是解决方案,原因很明显。
我的设置 -> 网络和 Internet -> 状态 -> 网络状态显示:
不能访问网络
您的设备已连接,但您可能无法访问
网络上的任何内容。如果您的数据套餐有限,您可以
将此网络设为计量连接或更改其他
特性。
我该如何解决这个问题?
PS 这些细节无关紧要,但如果有人提到它们,我会在这里添加它们:
我的操作系统是 Windows 10 Pro 22H2 x64,我正在使用有线以太网连接,但它们对问题的影响不大;不,dism /online /cleanup-image /restorehealth
绝对sfc scannow
无法解决这个问题,所以不能重新安装操作系统;而且我之前已经使用 Snappy Driver Installer 更新了网络驱动程序,并且我已经重新启动了我的计算机......
答案1
Windows 网络连接状态指示器 (ncsi) 至少会进行 DNS 和 HTTP 测试。您通常可以自行测试这些测试,以查看哪一个测试失败。默认情况下,它会检查:
nslookup dns.msftncsi.com
对于 DNS(应解析为131.107.255.255
)- 打开http://www.msftconnecttest.com/connecttest.txt在浏览器中,并验证内容是否准确
Microsoft Connect Test
如果 DNS 失败,您可以通过编辑hosts 文件
话虽如此,我相信这取决于您更改的注册表设置。您可能希望将它们重置为默认值,或者验证它们是否在您遇到问题时为上述测试提供了正确的响应。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]
"ActiveDnsProbeContent"="131.107.255.255"
"ActiveDnsProbeContentV6"="fd3e:4f5a:5b81::1"
"ActiveDnsProbeHost"="dns.msftncsi.com"
"ActiveDnsProbeHostV6"="dns.msftncsi.com"
"ActiveWebProbeContent"="Microsoft Connect Test"
"ActiveWebProbeContentV6"="Microsoft Connect Test"
"ActiveWebProbeHost"="www.msftconnecttest.com"
"ActiveWebProbeHostV6"="ipv6.msftconnecttest.com"
"ActiveWebProbePath"="connecttest.txt"
"ActiveWebProbePathV6"="connecttest.txt"
"CaptivePortalTimer"=dword:00000000
"CaptivePortalTimerBackOffIncrementsInSeconds"=dword:00000005
"CaptivePortalTimerMaxInSeconds"=dword:0000001e
"EnableActiveProbing"=dword:00000001
"PassivePollPeriod"=dword:0000000f
"StaleThreshold"=dword:0000001e
"WebTimeout"=dword:00000023
如果您的 VPN 涉及 Web 代理,则 ncsi 会尝试自动检测您的代理设置。如果失败,您可以尝试通过手动设置 winHTTP 代理设置来帮助 ncsi:
netsh winhttp set proxy [proxy-server=]<server name> [bypass-list=]<hosts list>
答案2
我已找出问题的根本原因。
显然,ISP 将 dns.msftncsi.com 劫持为 100.64.100.1,因此连接到 VPN 时 DNS 查询会失败,而 DNS 查询失败就是导致 NCSI 错误报告“无互联网”的原因。
然而,在 hosts 文件中进行设置131.107.255.255 dns.msftncsi.com
将导致相反的结果,当我的互联网被 ISP 切断时,它将使 NCSI 错误地报告“Internet 访问”。
两者都是不受欢迎的,我刚刚找到了一种让它正常工作的方法。
导致 DNS 查询失败的原因是我的 ISP 的 DNS 中毒,因此使用已知安全的 DNS 将使 DNS 查询在应该成功时成功。
我在控制面板->网络和 Internet->网络连接->以太网属性->IPv4 属性页面中将我的适配器更改为使用 8.8.8.8 DNS,这将绕过 GFW 导致的 DNS 中毒。
但VPN连接后NCSI仍然会报误报,可以通过以下命令解决:
devcon disable *dev_8168*
devcon enable *dev_8168*
devcon.exe
(如果您想尝试,您需要下载并将其放在 %windir%\system32 文件夹中)