电脑显示无网络连接却可以上网,这到底是怎么回事?
最近在公司遇到一个奇怪的问题,不少用户电脑的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的重要更新也给一些个人用户带来了同样问题。大家可以收藏这一方案,以备无患啊。














聚灵阵主
校验提示文案
牛皮酱Monyo
校验提示文案
xshhome
校验提示文案
阿鹏哥林少
校验提示文案
值友5645070634
校验提示文案
77号
校验提示文案
GT_7
校验提示文案
尤呢呢
校验提示文案
mars208
校验提示文案
老房的老房
校验提示文案
LEO0574
校验提示文案
呆萌的呆呆
校验提示文案
把蜡笔小新收了
校验提示文案
老王加油
校验提示文案
fengpan584
校验提示文案
值友5645070634
校验提示文案
fengpan584
校验提示文案
老王加油
校验提示文案
把蜡笔小新收了
校验提示文案
呆萌的呆呆
校验提示文案
LEO0574
校验提示文案
老房的老房
校验提示文案
mars208
校验提示文案
尤呢呢
校验提示文案
GT_7
校验提示文案
77号
校验提示文案
阿鹏哥林少
校验提示文案
xshhome
校验提示文案
牛皮酱Monyo
校验提示文案
聚灵阵主
校验提示文案