一直用着某软件上网,配置从未变过,直到某一天,系统重装为Debian 12后,再次打开时,发现已经无法使用,拖出来日志一看,提示有这么显目的一段:
1 | 2024/07/30 21:26:20 [Warning] failed to handler mux client connection > proxy/vmess/outbound: failed to find an available destination > common/retry: [transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://test.com/): > write tcp 192.168.1.2:34042->8.8.8.8:443: i/o timeout transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://test.com/): > write tcp 192.168.1.2:52910->8.8.8.8:443: i/o timeout transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://test.com/): > write tcp 192.168.1.2:44276->8.8.8.8:443: i/o timeout transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://test.com/): > write tcp 192.168.1.2:52078->8.8.8.8:443: i/o timeout transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://test.com/): > write tcp 192.168.1.2:60686->8.8.8.8:443: i/o timeout] > common/retry: all retry attempts failed |
开始还想着是不是对系统的兼容性不是很好,但后来又想原系统是Ubuntu,和Debian 12区别不太大,运行时也没有提示什么lib不匹配的问题,就觉得不太可能。
本着快速解决问题的原则,在网上搜索并尝试了一堆的办法,包括但不限于如下,但都没有解决问题:
- 客户端和服务端时间不同步,需要同步
- 使用旧版本
- 不检测证书
- 关闭防火墙
在某个稍有空闲的时候,决定再来研究一下此问题。仔细观察了不同等级的日志后,i/o timeout
这条日志引起了我的注意,为什么会超时,哪里慢了,为什么其它的主机都没有问题?于是决定研究一下这个程序的行为,基于“一切皆文件”这条原则,那就先来看看它都操作了些什么,如同往常一样发起一次操作,然后使用如下命令观察其打开的文件资源:
1 | $ lsof -p XXX |
结果很意外地发现,在TYPE
为IPv4的一项记录里,结果赫然出现了一个不应该访问的DNS地址,访问此地址必然超时的,通过检查,最终确认是/etc/resolv.conf
里配置了这个DNS地址,导致了程序行为的异常,删除这个DNS地址后,一切又恢复正常了。
至于为什么其它的应用程序联网并没有出现问题,也许是其它程序在超时后又使用了别的DNS,限于时间就没再深究了。