文章广告位
入驻说明

文章最后更新时间:2024-03-28 14:40:42

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查询

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

用tcpdump监听

 tcpdump -i ens17 -nt -s 500 port domain

ens17是网卡接口名称

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

那么,新开一个终端,尝试请求,并且开始监听
Linux下使用tcpdump监听DNS查询

抓取到了
Linux下使用tcpdump监听DNS查询

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

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临时转发后,成功拉取镜像

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
技术教程

在Centos7下安装AWVS扫描器

2024-3-24 2:48:09

技术教程

使用VPS的GRE隧道过滤DDoS

2024-3-28 14:41:47

0 条回复 A文章作者 M管理员
夸夸
夸夸
还有吗!没看够!
    暂无讨论,说说你的看法吧
个人中心
购物清单
优惠代劵
今日签到
有新私信 私信列表
快速搜索
关注我们
  • 扫码打开当前页

你已经到达了世界的尽头

  • 3350

    文章数目

  • 197

    注册用户

  • 1742

    总评论数

  • 251

    建站天数

  • 40027

    总访问量

  • 波浪
  • 波浪
  • 波浪
  • 波浪