又是一次自己坑自己。
¶问题背景
某天登录gitlab,卡在检查站点连接是否安全,不断的循环,怎么都无法进入到登录界面。经过一番搜索,也没有太多的帖子,没有找到解决方案。
既然如此,那就进开发者模式,看看网络请求。经过一番观察,发现challenges.cloudflare.com的请求总是返回400。无意之间,发现远程地址竟然是127.0.0.1:443!!!用nslookup challenges.cloudflare.com查询DNS解析,确实是127.0.0.1。
1 | 服务器: ax86u.inc |
¶尝试1:更换DNS服务器
既然DNS解析错误,那就更换DNS服务器。在本机和路由器,把常见的DNS服务器试了一遍,解析结果一直都是127.0.0.1。在nslookup命令行参数指定DNS服务器,也都尝试了一遍,依旧没用。但是其他的域名没有问题。
1 | C:\Users\pk>nslookup challenges.cloudflare.com 8.8.8.8 |
¶尝试2:其他设备对比
既然在本机和路由器修改DNS服务器没用,那就可能是ISP有问题?看看其他设备啥情况。结果如下表所示,看来不是ISP的问题。有问题的机器,要么是我的主机,要么主机的虚拟机。
| No | 设备 | 网络 | 结果 |
|---|---|---|---|
| 1 | 手机 | 流量 | OK |
| 2 | 手机 | 局域网 | OK |
| 3 | 其他笔记本(物理机) | 局域网 | OK |
| 4 | Ubuntu虚拟机 | 局域网 | NG |
| 5 | Win7 虚拟机 | 局域网 | NG |
| 6 | 有问题的主机 | 局域网 | NG |
我的虚拟机都配置了两张网卡,一张桥接,直连路由器,一张NAT;并且NAT网卡的优先级高于桥接网卡。当停用桥接网卡后,依旧NG;当停用NAT网卡后,好了!!!看来问题在我的主机,应该是某个后台软件或服务在捣鬼。
¶尝试3:抓包
既然有东西在捣鬼,那就抓包看看。打开Wireshark,选好网卡,过滤DNS包,在cmd多敲几次nslookup challenges.cloudflare.com,没有抓到。但是换个域名,就能看到DNS的数据包。看来还没走到网卡,DNS数据包就被劫持了。
¶尝试4:procexp和tcpview
procexp可以查看进程的详细信息,tcpview可以查看TCP和UDP连接信息。尝试通过这两个工具,来找出可疑的进程。可惜没有看到可疑的进程,也没有进程监听53端口。这个方法不行。
¶尝试5:FastGithub
使用工具无法定位到可疑进程,那就只好回忆,自己安装了什么和DNS有关系的软件或服务。还真想到了一个:FastGithub。在FastGihub的软件目录用grep搜索,发现了如下异常log。把FastGithub服务关闭后,果然challenges.cloudflare.com的DNS解析就正常了。仔细看log文件,也没发现把challenges.cloudflare.com解析为127.0.0.1的原因。
1 | logs/log20230707.txt:11391:challenges.cloudflare.com->127.0.0.1 |
经过一番探索,在appsettings/appsettings.dnspollution.json发现了如下配置。把其他正常解析的域名加上类似的配置,重启服务后,也会解析为127.0.0.1。
1 | "*.cloudflare.com": { |
在issue列表搜索,有发现类似的问题,软件导致api.nuget.org 解析为127.0.0.1,可能影响托管在Cloudflare DNS的域名。解决方法就是删除相关节点。
¶总结
停止FastGithub服务后,访问github会很慢,甚至无响应。所以最终选择运行FastGithub服务,删除cloudflare.com的配置。