最近,访问外网出现不稳定的频率有所提升,随之而来的是 Windows 10 客户端 和 Office 365 客户端也出现了奇奇怪怪的问题:
Windows 10 检测是否有互联网访问,通过一种叫做 NCSI (Network Connection Status Indicator) 的检测机制,当网卡连接后,会发起“主动”检测,检测该URL的可访问性:
如果该文件无法获得,则认定为“无Internet”。此时,如果用户手动访问以下地址,则有机率被检测到,并认为网络恢复。这种方式称为“被动”检测机制。
该链接会重定向到MSN网站。
如果出现“地球”图标后,你可以手动访问这个链接:http://www.msftconnecttest.com/connecttest.txt
目前,我的测试结果是,WebKit内核的浏览器,大约5次中有一次可以访问;IE浏览器,可能因为缓存的原因,始终无法访问。
这意味着,Windows判断是否有外网,成为了概率问题。
有趣的是,无法访问connecttest.txt
时,出现了”Connection RESET”的提示,说到这里,大家应该清楚是什么原因了。
既然知道了工作原理,那么就好解决了。
一句话,自己架设一台web服务器,托管connecttest.txt
文件,并将域名 www.msftconnecttest.com 重定向到该服务器IP。
我已经完成了,这里公布下我的IP,修改hosts如下即可:
13.94.56.171 www.msftconnecttest.com
如果有条件的话,可以在自己的DNS服务器上建A记录,一次性解决所有客户端的问题。
如果错误地设置connecttest.txt
文件可以导致 WIN10 无法进行“主动”验证,从而自动转为“被动”认证,这种情况下,在网络连接图标附近会弹出用户点击验证,一旦用户点击,将会打开浏览器,进行“被动”验证。
黑客可以利用这一特性,将 redirect 设置为一个精心设计的网址,如果浏览器存在 0-day 漏洞,则可能产生安全问题。
如果使用本人托管的验证服务,redirect页面是一个404页面。
本应该微软通过CDN或者架设冗余服务器解决的问题,却要用户来解决。