电脑显示无网络连接却可以上网,这到底是怎么回事?
最近在公司遇到一个奇怪的问题,不少用户电脑的Windows10操作系统右下角显示无网络连接(地球标志),但是基本的Internet访问却是正常的(比如浏览器访问Internet)。如果仅仅是如此,那也无妨。但是一些涉及网络的应用程序却出现了访问受限,或者验证未通过的情况(比如Outlook Exchange Online)。
自己从网络的角度研究了半天都没有头绪,不得已求助了微软Premier Support,最后终于把问题解决了。这里将解决方法分享给各位值友,供大家参考。
原来微软操作系统中判断网络是否连通是通过一个简单的URL实现的。
从Windows 10 1607版本之后,这个URL是http://www.msftconnecttest.com/connecttest.txt。
大家可以试一下,网络连通情况下,浏览器访问这个URL返回的结果是文本Microsoft Connect Test。
而当时,我们公司电脑返回的却是如下结果,404无法找到主机的错误。
用Network Monitor抓包时,可以看到以下情况。http://www.msftconnecttest.com/connecttest.txt这个链接对应的IP地址是13.107.4.52,用它作为筛选条件,可以注意到网络包频繁出现被重置的情况。
咨询了微软技术支持,才知道已经有不少公司都遇到了类似的问题,而问题的来源出自我国的几大网络运营商(ISP)。ISP们针对一些外国的IP地址做了一些限制,可能是特殊时期的一些特殊举措,真是让人大跌眼镜。
如果你和ISP们打过交道就知道,让它们短期内修改网络限制是不太可能的,只能使用一些变通的方法。首先我们要知道微软是如何让操作系统知道访问那个URL来判断网络是否连通的。
我们知道,操作系统里不少配置都是在注册表中定义的,而这一服务在注册表中的路径为:
HKLMSYSTEMCurrentControlSetServicesNlaSvcParametersInternet
所有的信息都在上图标黄的部分中。
第一个Workaround就是更换微软认证的地址。Windows 10 1607之前的版本确实是通过一个不同的URL来完成认证的,而这个URL目前依然有效,且未被ISP屏蔽。
具体方法为回到注册表同一路径,将对应信息更换为www.msftncsi.com等,具体参见下图标黄位置。
修改完成后,重启电脑,就会发现问题已经解决。
如果要批量修改,可以将其写到脚本中。比如下面就是用PowerShell写的脚本,将下面所有内容拷贝至记事本,并保存为.ps1文件运行即可。也可以通过组策略或者SCCM等方式推送到对应的客户端上。
$registryPath = "HKLM:SYSTEMCurrentControlSetServicesNlaSvcParametersInternet"
$Name1 = "ActiveWebProbeContent"
$Name2 = "ActiveWebProbeContentV6"
$Name3 = "ActiveWebProbeHost"
$Name4 = "ActiveWebProbeHostV6"
$Name5 = "ActiveWebProbePath"
$Name6 = "ActiveWebProbePathV6"
$value1 = "Microsoft NCSI"
$value2 = "Microsoft NCSI"
$value3 = "www.msftncsi.com"
$value4 = "ipv6.msftncsi.com"
$value5 = "ncsi.txt"
$value6 = "ncsi.txt"
New-ItemProperty -Path $registryPath -Name $name1 -Value $value1 `
-PropertyType ExpandString -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name2 -Value $value2 `
-PropertyType ExpandString -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name3 -Value $value3 `
-PropertyType ExpandString -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name4 -Value $value4 `
-PropertyType ExpandString -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name5 -Value $value5 `
-PropertyType ExpandString -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name6 -Value $value6 `
-PropertyType ExpandString -Force | Out-Null
还有一种方式是在企业内部环境中搭建NCSI网站,欺骗客户端认为网络是连通状态的。
具体方法如下:
内网一台服务器(需要确保客户端能够连接到该server的80端口)安装IIS角色,在IIS控制台>Sites>Default Web Site,右击属性选择Edit Site Binding,添加server的ip地址和80端口,host name为www.msftconnecttest.com
找到网站的Physical Path, 默认为 %SystemDrive%inetpubwwwroot
用管理员运行notepad,填写 Microsoft Connect Test
保存到wwwroot路径,命名为 connecttest.txt
下面开始配置DNS,在内网DNS server上添加两个primaryzone,
msftconnecttest.com
msftncsi.com
在 msftconnecttest.com这个zone添加A记录 名称为www,指向第一步配置的IIS server的ip (和Site binding里的ip一致)
在 msftncsi.com 这个zone添加A记录 名称为 dns,ip指向131.107.255.255
完成配置,测试NCSI是否能通过internalIIS server完成探测。
这一方法的局限性在于会修改DNS会导致所有局域网内电脑的设置被修改,可能会造成其他网络问题。
这里总结了两个临时的解决方案,不过在写这篇文章的时候,微软已经自行解决了这一问题,产品组修改了中国大陆解析NCSI探测的ip地址。
测试nslookup解析 www.msftconnecttest.com
修改后的结果是会显示akamai的IP,问题彻底解决。
不过其实这个问题也不是第一次出现了,之前Win10的重要更新也给一些个人用户带来了同样问题。大家可以收藏这一方案,以备无患啊。














校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案