抓包能回答什么
用 tcpdump 直接看 53 端口上发生了什么:谁在问、问什么名字和类型、响应码是什么、延迟有多久。这是排查「解析慢、间歇失败、某台机器特别慢」的终极手段——应用日志通常只有结果,没有过程。
要覆盖两种传输
DNS 主要走 UDP 53;响应超过约定长度被截断时会改用 TCP 53 重试,区域传送也走 TCP。抓包时两个协议都要覆盖,否则会漏掉大响应和回退路径上的问题。
基本信息
| 关注端口 | UDP 53(常规查询)、TCP 53(截断回退与区域传送) |
|---|---|
| 关键选项 | -nn 不做名字与端口反解、-A 打印载荷、-w 存盘给 Wireshark |
| 常见用途 | 排查解析慢、统计重复查询、确认实际使用的解析器 |
| 配合工具 | Wireshark 的 dns 过滤器与服务响应时间统计 |
典型使用场景
- 应用报 DNS 超时但日志没有细节:抓包确认对端有没有回包
- 怀疑大量重复查询:按名字统计出现次数,找出没有缓存的那一类查询
- 确认容器实际用的是哪个解析器(很容易与宿主机不一致)
- 验证截断后的回退行为:看是否如期改用 TCP 重试
抓 DNS
抓 DNS
tcpdump -i any -nn port 53 -c 100 # 先看概况
tcpdump -i any -nn 'udp port 53' -A -c 20 # 直接看载荷,肉眼可读
tcpdump -i any -nn port 53 -w dns.pcap # 存盘交给 Wireshark
tcpdump -i eth0 -nn 'port 53 and host 10.0.0.9' # 只盯某一台解析器关注点
| 看什么 | 判断 |
|---|---|
| 查询名字与类型 | 业务是否在反复查同一个名字 |
| 响应码 | SERVFAIL、NXDOMAIN 的占比是否异常 |
| 响应延迟 | 超过一秒的对端就是问题源 |
| 重传与重复 | UDP 丢包,或上层在无脑重试 |
| 源与目的地址 | 实际用的是哪个解析器,是否符合预期 |
配合 Wireshark 的 DNS 服务响应时间统计,可以按解析器排序,直接找出哪一台最慢。
容器与虚拟化环境要在网桥或 veth 侧抓包:只抓物理网卡会漏掉容器发出的 DNS 流量,容易误判成「根本没有发起查询」。