Linux下使用tcpdump监听DNS查询

准备在新服务器上部署一些镜像,便于提供workspace。这就难免要使用到docker pull来拉取镜像。
结果问题来了,需要用到的这个镜像不知道什么原因,各大镜像站中均无数据

起初不断配置registry mirrors来加速,但是始终没有效果

总是出现如下故障

read tcp 172.16.11.202:42874->104.18.125.25:443: read: connection reset by peer

解决过程

简单查询,发现104.18.125.25是Cloudflare的节点ip,于是想到能否查询一下docker的子域名,看看有没有指向cf的,如果有,直接hosts替换一下说不定就好了
结果通过itdog查询,发现docker.io所有子域名都没有指向Cloudflare服务的

这就奇了怪了

尝试先拉取一个镜像,另外一个shellsession使用ss查询一下连接是否来自dockerd进程

ss -tnp state connected | grep docker

Linux下使用tcpdump监听DNS查询

Linux下使用tcpdump监听DNS查询

看起来是的没错了,那我要怎么寻找这个被解析的未知域名呢

用tcpdump监听

 tcpdump -i ens17 -nt -s 500 port domain

ens17是网卡接口名称

port domain用来过滤数据包,表示只抓取使用domain(域名)服务的数据包,即DNS查询和应答报文。

那么,新开一个终端,尝试请求,并且开始监听

Linux下使用tcpdump监听DNS查询

Linux下使用tcpdump监听DNS查询

抓取到了

Linux下使用tcpdump监听DNS查询

Linux下使用tcpdump监听DNS查询

可以看到,docker在尝试请求mirrors gs9tpsud.mirror.aliyuncs.com,拉取失败了,然后开始进行auth请求,向官方库production.cloudflare.docker.com获取数据

Linux下使用tcpdump监听DNS查询

Linux下使用tcpdump监听DNS查询

两个数据包都是IP数据报,第一个数据报表示10.0.17.2(本地)向223.5.5.5(DNS服务器)查询production.cloudflare.docker.com的IP地址,53是DNS服务的端口号,“+”表示启用递归查询标志,“A?”表示使用A类型的查询方式,61是该报文的长度(字节)。

第二个数据报表示223.5.5.5向10.0.17.2发送DNS应答报文,2/0/0表示该报文中包含2个应答资源记录,0个授权资源记录和0个额外信息记录,A表示紧随其后的记录是IP地址。

同理,后面还有AAAA请求数据报

到此,查询到了未知的域名,进行hosts临时转发后,成功拉取镜像

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Linux下使用tcpdump监听DNS查询》
文章链接:https://www.xlin.cn/xlbk/22372.html
分享到: 更多 (0)

热门文章

评论 抢沙发

切换注册

登录

忘记密码 ?

切换登录

注册