0%

记一次解决域名解析为127.0.0.1

又是一次自己坑自己。

问题背景

某天登录gitlab,卡在检查站点连接是否安全,不断的循环,怎么都无法进入到登录界面。经过一番搜索,也没有太多的帖子,没有找到解决方案。

既然如此,那就进开发者模式,看看网络请求。经过一番观察,发现challenges.cloudflare.com的请求总是返回400。无意之间,发现远程地址竟然是127.0.0.1:443!!!用nslookup challenges.cloudflare.com查询DNS解析,确实是127.0.0.1。

1
2
3
4
5
6
7
服务器:  ax86u.inc
Address: 192.168.50.1

非权威应答:
名称: challenges.cloudflare.com
Addresses: ::1
127.0.0.1

尝试1:更换DNS服务器

既然DNS解析错误,那就更换DNS服务器。在本机和路由器,把常见的DNS服务器试了一遍,解析结果一直都是127.0.0.1。在nslookup命令行参数指定DNS服务器,也都尝试了一遍,依旧没用。但是其他的域名没有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\Users\pk>nslookup challenges.cloudflare.com 8.8.8.8
服务器: dns.google
Address: 8.8.8.8

非权威应答:
名称: challenges.cloudflare.com
Addresses: ::1
127.0.0.1

C:\Users\pk>nslookup baidu.com 8.8.8.8
服务器: dns.google
Address: 8.8.8.8

非权威应答:
名称: baidu.com
Addresses: 110.242.68.66
39.156.66.10

尝试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
2
logs/log20230707.txt:11391:challenges.cloudflare.com->127.0.0.1
logs/log20230707.txt:11395:challenges.cloudflare.com->::1

经过一番探索,在appsettings/appsettings.dnspollution.json发现了如下配置。把其他正常解析的域名加上类似的配置,重启服务后,也会解析为127.0.0.1。

1
2
3
"*.cloudflare.com": {
"TlsSni": true
},

在issue列表搜索,有发现类似的问题,软件导致api.nuget.org 解析为127.0.0.1可能影响托管在Cloudflare DNS的域名。解决方法就是删除相关节点。

总结

停止FastGithub服务后,访问github会很慢,甚至无响应。所以最终选择运行FastGithub服务,删除cloudflare.com的配置。