Skip to content

kkkgo/PaoPao-Pref

Repository files navigation

PaoPao-Pref

简介

这是一个让DNS服务器预读取缓存或者压力测试的简单工具,配合PaoPaoDNS使用可以快速生成redis_dns.rdb缓存。从指定的文本读取域名列表并查询A/AAAA记录,docker镜像默认自带了全球前100万热门域名(经过无效域名筛选)。

警告

  • 测试可能会对你的网络造成负担,请避免在网络正常使用时段进行测试。
  • 若配合PaoPaoDNS使用,如果设置了CNAUTO=yes,测试前请务必设置PaoPaoDNS的docker镜像的环境变量CNAUTO=yesCNFALL=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 size
Docker Platforms

# 每次操作前先拉取最新镜像
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,sleeptimeout的值。
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