开启代理后 msftconnecttest.com 无法跳转

Northword2021年3月7日大约 2 分钟

开启代理后校园网认证无法跳转

连接一个无线网络后,如果该网络需要认证(登录)(常见于开放网络或校园网),系统会访问 http://www.msftconnecttest.com/redirect,该网址会自动重定向到需要进行认证的地址。

但如果爬了梯,且代理的规则将 msftconnecttest.com 判断为走代理时,该页面无法正常跳转。这种情况常见于 SSR 的 PAC 模式、Clash 的规则中将微软策略匹配为 proxy 等。

由于我是用 Clash For Windows ,以下内容也针对 CFW ,但其他应当同理。

解决方法蛮多,比如:

  • 关闭 clash 的开机自启 / system proxy 。
  • 需要认证时关闭 system proxy 。
  • 记下认证页面的真实地址直接访问。
  • 策略组 微软 选择直链。
  • 在 rule 里添加关键词匹配规则使 msftconnecttest 被 direct 。

上述方法治标不治本,添加 rule 虽然是个不错的方法(事实上这可能是多数人首先想到的方法),但是如果你用的是机场的订阅,那换个订阅/升级订阅后自己加的规则就没了。查阅 CFW 文档后发现了 绕过系统代理 | Clash for Windows open in new window

bypass:
  - "*msftconnecttest.com"
  - "*c-msedge.net"
  - "edge.microsoft.com"
  - localhost
  - 127.*
  - 10.*
  - 172.16.*
  - 172.17.*
  - 172.18.*
  - 172.19.*
  - 172.20.*
  - 172.21.*
  - 172.22.*
  - 172.23.*
  - 172.24.*
  - 172.25.*
  - 172.26.*
  - 172.27.*
  - 172.28.*
  - 172.29.*
  - 172.30.*
  - 172.31.*
  - 192.168.*
  - <local>

终于是实现效果了,也没啥大问题。

但后来有一天我发现在命令提示符里进行 pip install 以及 npm install 的时候提示 SSL 错误 ,换源已无法解决,于是找到了 issue : 下载文件遇到 SSL 错误 · Issue #1568 · Fndroid/clash_for_windows_pkg (github.com)open in new window 后被建议使用PAC mode,于是有了 PAC 版本的 Bypass :

function FindProxyForURL(url, host) {
  if (isPlainHostName(host) || dnsDomainIs(host, ".msftconnecttest.com")) {
    return "DIRECT";
  } else {
  return "PROXY 127.0.0.1:%mixed-port%; SOCKS5 127.0.0.1:%mixed-port%; DIRECT;"
  }
}

PAC 概念及其写法可参考: 代理自动配置文件(PAC)文件 - HTTP | MDN (mozilla.org)open in new window

另发现了配置文件预处理,或许也可以用:更新某个订阅后 CFW 自动对该配置文件追加规则。参考 配置文件预处理 | Clash for Windowsopen in new window

Clash 的几种模式介绍: 一个困扰已久的问题 · Discussion #1532 · Fndroid/clash_for_windows_pkg (github.com)open in new window