1、解决的问题
处理DNS故障时需要模拟生产环境实际发生情况,能重放故障时的DNS请求能帮助快速地定位问题。另外,DNS发布新版本时候实验室测试没问题,但还需要现网验证,若能够模拟现网实际请求测试验证一下能在生产环境部署前提前发现问题。
2、数据和环境准备
2.1 抓取现场请求数据
在生产环境dns服务器上使用tcpdump抓取一段时间数据。
例如:
$tcpdump -i Bond0 -s0 -G 3600 -w %Y_%m%d_%H%M_%S.pcap dst host 1.1.1.1 and dst port 53 and udp
//抓取发向1.1.1.1的dns udp请求包, 1小时抓一个文件
2.2 实验室回放测试环境
回访测试环境要求:
- 测试机和DNS服务器不能共用一台物理机,必须通过真实网卡通信;
- 测试机和DNS服务器在一个局域网内
- 测试机linux系统,安装tcpreplay软件
3、编写回放脚本
输入参数:
- 抓包文件
- 目的ip: dns服务器地址
- 网卡:测试机出口网卡名称
初始化:
- 根据输入网卡名获取其对应mac地址及出口IP,作为源mac和源IP
- 根据目的ip获取目的mac地址
- 调用tcprewrite改写源IP、源mac、目的ip和目的mac
- 调用tcpreplay开始回放
- 回放完,打印回访统计信息
脚本如下:
4、 实际回放测试示例
测试机:10.10.10.11 网卡名:Bond0
DNS服务器:10.10.10.10$ sh dns_replay.sh 2024_0815_1619_03.pcap 10.10.10.10 Bond0
测试文件:2024_0815_1619_03.pcap (生产环境抓的1小时的dns数据)
运行:
$ sh dns_replay.sh 2024_0815_1619_03.pcap 10.10.10.10 Bond0
测试结果:
Actual: 430624 packets (38181843 bytes) sent in 3613.58 seconds
Rated: 10566.2 Bps,0.084 Mbps, 119.16 pps
Flows: 1511 flows, .4l fps, 430624 flow packets, 0 non-flow
Statistics for network device: Bond0
Successful packets: 430624
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets(EAGAIN): 0