#性能测试 #dns #性能 #测试 #nailgun #dns-server

app naildns

(占位符) nailgun 是一个用 Rust 编写的支持基准测试和压力测试 DNS 服务器的轻量级工具。它支持 IPv4 & IPv6,UDP & TCP,并能生成不同类型的查询

1 个不稳定版本

0.1.0 2021 年 8 月 25 日

#4#nailgun

MIT 许可证

2KB

nailgun

nailgun 是一个使用 trust-dns-prototokio 编写的 Rust 语言 DNS 性能测试客户端。欢迎 PR、问题和评论!

nailgun 首先是一个兴趣爱好项目,它受到 flamethrower 的启发,并复制了一些它的参数。默认情况下它是单线程的,但可以配置使用多个线程。您可以指定流量生成器的数量(使用 tcount)和 tokio 工作线程的数量(使用 wcount),nailgun 将启动 tcount * wcount 生成器。大多数情况下,这并不必要,因为一个并发生成器和单个工作线程就足够了。针对配置为返回 NXDOMAIN 的本地 dnsdist 实例进行测试(是的,这不是真实的基准测试)nailgun 可以达到超过 250K QPS(1 个工作线程 & 生成器)。

nailgun 使用 tracing 进行日志记录,因此可以使用 RUST_LOG 来控制日志输出。

特性

速率限制

您可以使用 -Q 指定特定的 QPS,这允许您设置一个期望的 QPS 速率,该速率将在所有发送者之间分配。

输出

--output 允许您指定不同的日志格式,由 tracing 提供。目前支持 "pretty"、"json" 和 "debug",默认为 "pretty"。您可以使用 RUST_LOG 来过滤输出(例如,RUST_LOG="naildns=trace" 将仅从 naildns 二进制文件打印跟踪级别的日志)。默认情况下,nailgun 使用 stdout,但如果您使用 -o 标志和路径,它将记录到文件。

无论选择哪种选项,运行结束后都会打印一个摘要到标准输出,不带跟踪信息。

生成器

使用 -g 可用多种生成器类型,默认是 static,但您也可以从文件生成查询,或者随机生成部分查询。

DoH(新功能!)

nailgun 现在可以发送 DoH 消息了!

naildns dns.google -Q 2 -P doh

用法

naildns --help

默认情况下,nailgun 将启动一个单线程的 tokio 运行时和 1 个流量生成器

naildns 0.0.0.0 -p 1953

这可以扩展

naildns 0.0.0.0 -p 1953 -w 16 -t 1

将在 tokio 运行时启动 16 个操作系统线程(w/wcount)和每个线程 1 个流量生成器(t/tcount),总共 16*1 = 16 个流量生成器。

注意 如果您需要一个快速的服务器进行测试,我一直在启动 dnsdist 并将其配置中的 addAction(AllRule(), RCodeAction(3)) 设置为使其所有 DNS 消息立即返回 NXDomain

构建和安装

要本地构建

cargo build --release

naildns 二进制文件将位于 target/release/naildns

从 crates.io

本地

要本地安装

cargo install

TODO

  • 基于超时次数进行节流
  • 第一批消息似乎总是设置为 QPS 的两倍(例如,尝试 --limit-secs 5 -Q 10,它将发送 60 个查询)
  • 代码中还有一些 TODO 清理要处理
  • 生成器的参数解析与 flamethrower 非常不同,因为 clap 似乎不支持以相同的样式解析它--最好能解决这个问题
  • 将所有生成器的日志输出合并,而不是让它们单独运行
  • 更多生成器类型?
  • 也许可以利用 trustdns 的其他部分来为有趣的查询类型提供选项。DOT? DOH
  • 建议?错误?

无运行时依赖