这是一个让DNS服务器预读取缓存或者压力测试的简单工具,配合PaoPaoDNS使用可以快速生成redis_dns.rdb缓存。从指定的文本读取域名列表并查询A/AAAA记录,docker镜像默认自带了全球前100万热门域名(经过无效域名筛选)。
- 测试可能会对你的网络造成负担,请避免在网络正常使用时段进行测试。
- 若配合PaoPaoDNS使用,如果设置了
CNAUTO=yes,测试前请务必设置PaoPaoDNS的docker镜像的环境变量CNAUTO=yes和CNFALL=no。 - 不建议设置过高的并发,可能会导致你的服务器崩溃或者DNS无法被有效缓存。
- 若配合PaoPaoDNS使用,可以在PaoPaoDNS容器内使用
debug.sh或者查看容器启动日志,根据你内存环境,你会看到有一个prefPC: xx的值,该值为本工具-pc参数(测试xx%的域名)的推荐值,超过该值可能无法缓存。
| 参数选项 | 值 | 作用 |
|---|---|---|
| -file | 文件路径 | 指定域名列表,默认值为目录下的domains.txt. |
| -server | DNS服务器 | 指定DNS服务器,必需 |
| -port | 端口 | 指定DNS服务器端口,默认值为53. |
| -limit | 并发数 | 指定并发数,默认值为10. |
| -timeout | 5s | 指定DNS查询超时时间,默认值为5s.也可以指定单位为ms. |
| -sleep | 1500ms | 指定DNS查询间隔,默认值为1500ms.值越小请求越快,性能好的可以设置0ms. |
| -line | 行数 | 指定从第几行开始,可用于恢复进度. |
| -pc | 百分比 | 指定测试前%的域名,如域名列表总数为100万,指定-pc 50则测试前50万域名. |
| -v | 开关 | 输出域名的查询信息. |
| -h | 开关 | 显示帮助信息. |
可以从Release下载对应平台编译好的二进制文件,压缩包内已经附带最新热门100万域名列表。
你始终可以从此链接下载最新的热门100万域名列表:https://github.com/kkkgo/PaoPao-Pref/raw/main/domains.txt (经过无效域名筛选)
# 每次操作前先拉取最新镜像
docker pull sliamb/paopao-pref
# 指定DNS服务器为192.168.1.8
docker run --rm --net=host -it sliamb/paopao-pref -server 192.168.1.8
# 从第1000行开始
docker run --rm --net=host -it sliamb/paopao-pref -line 1000 -server 192.168.1.8
# 指定并发数为25, DNS查询间隔为0ms, 查询超时1s, 前1%的热门域名
docker run --rm --net=host -it sliamb/paopao-pref -server 10.10.10.8 -pc 1 -limit 25 -sleep 0ms -timeout 1s你也可以使用环境变量:
| 环境变量名 | 对应选项 |
|---|---|
| DNS_SERVER | -server |
| DNS_PORT | -port |
| DNS_LINE | -line |
| DNS_PC | -pc |
| DNS_LIMIT | -limit |
| DNS_TIMEOUT | -timeout |
| DNS_SLEEP | -sleep |
| DNS_LOG | -v,请设置为yes/no |
程序的默认值兼顾性能比较低的设备,你可以适当调高/调低limit,sleep和timeout的值。
Succ rate: 测试成功率。测试的域名在指定的timeout时间内无法解析或者解析错误(无有效A记录或者AAAA记录),会定义为失败。如果你把timeout定义的足够低,可以当缓存测试。limit和sleep的值也会影响成功率,过高的limit或者过低的sleep值也可能会导致服务器暂时无法及时处理(不代表结果没有在被缓存).
Avg time: 每个域名的查询平均处理时间。
Est time: 估计的剩余时间。
PaoPaoDNS:4核心8G内存/CNAUTO=yes/IPV6=yes/CNFALL=no
生成的redis_dns.rdb缓存文件大小:917 MB
used_memory_human:1.06G
该数据仅供大致参考.
Github Actions数据生成参数:
DNS_LIMIT=25
DNS_SLEEP=0ms
DNS_TIMEOUT=3s
成功率在80%欢迎在discussions分享你的测试参数和测试数据~!
域名数据来源(未处理): https://s3-us-west-1.amazonaws.com/umbrella-static/index.html
PaoPao DNS Docker: https://github.com/kkkgo/PaoPaoDNS
搭建属于自己的递归DNS: https://blog.03k.org/post/paopaodns.html