省流版:伪装域名不能再用www.microsoft.com,改用www.apple.com后修复
用香港的云服务器搭了个科学上网的机场节点,偶尔在付费节点不好使的时候用来应急(当然是用来访问外网的学术资源)。
今天发现这个稳定运行了半年多的节点挂掉了,于是开始排查修复。
现象
节点挂掉的表现为多个连接这个节点的clash客户端,在测速时显示“timeout”,也就无法通过其科学上网。
排查过程
1. 排除后台服务挂掉
有可能是因为某些因素,xray的后台服务挂掉了。于是用systemctl status xray查看服务状态,发现正常运行,然后用systemctl restart xray指令重启服务,依旧连不通。
排除。
2. 排除服务器IP被墙
机场节点被GFW发现然后封禁IP,是机场节点挂掉最常见的原因。
而我这个节点用的非常少,而且用的reality这种非常隐蔽的协议,出现这种情况的可能性比较小,但还是检查了一下。
因为服务器有两个IP,我日常远程连接服务器用的和机场用的不是同一个,于是我把机场IP换成了我日常用的IP(日常IP保证可用),发现情况不变。
排除。
3. 排除服务器IP变动
因为前段时间服务器发生过热迁移,有可能把机场对应的IP给改了(服务器商家偶尔会这么干),用ifconfig和ip addr指令看,发现IP没动。
排除。
4. 没招了
目前情况已经超出了我的知识范围,只能看看日志能不能发现点端倪。用journalctl -u xray -f指令查看xray的日志,发现全是握手失败:
13:47:19.861489 [Info] transport/internet/tcp: REALITY: processed invalid connection from 123.123.123.123:14532: handshake did not complete successfully
说明流量送到了服务器,端口也是通的,只能是客户端发送的请求不被服务端接受,这下可能性就太多了。
再接着分析
5. 问问AI
GPT告诉我可能是因为我这个xray用的VLESS Reality协议配置有点旧了,让我加个Vision flow。也就是分别在服务端和客户端的配置文件里加一行关于Vision flow的配置:
"flow": "xtls-rprx-vision"
重启服务再测试,依旧没好。
6. 关键转折-问题定位
在github中发现了这个issue:REALITY fails with www.microsoft.com target when Certificate TLS record is 8273 bytes
意思就是之前可以用www.microsoft.com作为Reality的伪装,现在不可用了,微软给自己的网站做了一些改动。
简单补充一下这里涉及的Reality协议原理:把原本翻墙的流量伪装成要访问dest网址的流量。客户端在连接的时候会真实地与这个dest网址进行数据交换,之前我把流量伪装成要访问微软官网的,结果微软给自家网站加了限制,所以节点就挂了。
7. 成功解决
把Xray配置文件中的dest网址从www.microsoft.com改成了www.bing.com,发现还是不行,应该是微软全家都加了限制。
最后把dest设为www.apple.com:
"dest": "www.apple.com:443",
"serverNames": [
"www.apple.com"
],
之后同步修改clash配置。
测速,成功!