dnspick:一句话选出最适合你的 DNS 服务器
dnspick 是一个跨平台 DNS 性能基准测试工具,支持 UDP、DoT、DoH、DoH3 四种协议,自动检测当前系统 DNS 并给出推荐。本文提供详细的安装教程与使用指南。
项目概述
dnspick 是由开发者 palemoky 创建的一个跨平台命令行 DNS 性能测试工具。它并发基准测试一批主流及自定义 DNS 服务器,涵盖 UDP、DNS-over-TLS (DoT)、DNS-over-HTTPS (DoH) 和 DNS-over-HTTP/3 (DoH3) 四种协议,对一组常用的国内/国外域名反复查询,结合平均延迟与成功率给出综合评分,同时自动检测当前系统默认 DNS 并纳入对比,最后推荐最优选择。
项目亮点
- 🌐 跨平台:完美运行于 Windows、macOS、Linux、Raspberry Pi (ARM/ARM64) 等主流平台
- 🔒 多协议:同时测试 UDP、DoT、DoH(RFC 8484)、DoH3(基于 QUIC)
- 📊 综合评分:不仅测速,还结合成功率智能打分,避免"虽快但不稳定"的 DNS 跻身前列
- 🔍 自动检测当前 DNS:自动探测系统默认 DNS 并参与对比,给出是否需要切换的建议
- 🔄 自更新:运行时自动检查新版本,交互式终端中可原地升级
- 🌏 中英双语界面:默认跟随系统
LANG,支持手动切换
安装教程
一键安装(推荐)
脚本会自动检测操作系统与 CPU 架构,下载对应版本并安装到 PATH。
Linux / macOS
curl -fsSL https://raw.githubusercontent.com/palemoky/dnspick/main/install.sh | sh
Windows(PowerShell)
irm https://raw.githubusercontent.com/palemoky/dnspick/main/install.ps1 | iex
💡 macOS 用户无需手动处理 Gatekeeper 拦截,脚本会自动解除隔离标记。
手动安装
你也可以从 GitHub Releases 页面下载预编译版本。
- 前往最新 Release 页面。
- 根据你的操作系统和 CPU 架构下载对应压缩包(如
dnspick-windows-amd64.zip、dnspick-linux-arm64.tar.gz)。 - 解压后即可在终端中使用。
建议将可执行文件移动到系统 PATH 包含的目录中:
# Linux / macOS
sudo mv dnspick /usr/local/bin/
# Windows(PowerShell,以管理员权限运行)
Move-Item dnspick.exe C:\Windows\System32\
更新 dnspick
随时原地升级到最新版本:
dnspick update
dnspick 运行时会在后台检查新版本。在交互式终端中发现新版本会自动原地更新;输出被管道接管或在 CI 中则只打印提示(不会自我修改)。该检查不阻塞主流程,离线时静默跳过。
macOS 提示「已损坏 / 移动到垃圾桶」
由于 dnspick 未经过 Apple 付费公证,macOS Gatekeeper 会拦截从网络下载的程序,出现「无法验证开发者」「已损坏,应移到废纸篓」等提示。文件并非真正损坏,任选以下方式解除即可:
# 推荐:解除下载隔离标记(一行搞定)
xattr -dr com.apple.quarantine ./dnspick
- 图形界面方式:在访达中右键点击 → 选择「打开」→ 弹窗中再次确认「打开」
- 较新 macOS:双击运行一次(会被拦截),然后到 系统设置 → 隐私与安全性,点击底部「仍要打开」
快速开始
直接运行即可开始测试:
dnspick
输出示例:
dnspick: benchmarking 33 DNS servers against 20 domains...
Progress: 45% (594/1320)
┌──────────────┬────────┬────────────────┬────────┐
│ Domestic │ Status │ Foreign │ Status │
├──────────────┼────────┼────────────────┼────────┤
│ baidu.com │ ✔ │ google.com │ ✔ │
│ qq.com │ ✔ │ youtube.com │ 60% │
│ taobao.com │ 60% │ github.com │ - │
└──────────────┴────────┴────────────────┴────────┘
--- Benchmark Results ---
┌────┬───────────────────────┬─────────────────┬─────────────┬────────────────┬────────┐
│ # │ DNS Server │ Address │ Avg Latency │ Success Rate │ Score │
├────┼───────────────────────┼─────────────────┼─────────────┼────────────────┼────────┤
│ 1 │ Freenom 2 (UDP) │ 80.80.81.81 │ 6.16ms │ 100.0% (40/40) │ 162.33 │
│ 2 │ Cloudflare 2 (UDP) │ 1.0.0.1 │ 6.227ms │ 100.0% (40/40) │ 160.58 │
│ 3 │ DNSPod 1 (UDP) │ 119.28.28.28 │ 6.337ms │ 100.0% (40/40) │ 157.80 │
└────┴───────────────────────┴─────────────────┴─────────────┴────────────────┴────────┘
--- Top 3 Recommendations ---
#1: Freenom 2 (UDP) (80.80.81.81)
Score: 162.33, avg latency: 6.16ms, success rate: 100.0%
#2: Cloudflare 2 (UDP) (1.0.0.1)
Score: 160.58, avg latency: 6.227ms, success rate: 100.0%
#3: DNSPod 1 (UDP) (119.28.28.28)
Score: 157.80, avg latency: 6.337ms, success rate: 100.0%
高级用法
自定义测试参数
# 查看所有可用参数
dnspick --help
# 每个域名查询 5 次,使用自定义域名列表
dnspick -q 5 -d "google.com,github.com,youtube.com"
# 单次查询超时 1 秒,并发数降到 8
dnspick -t 1s -c 8
# 强制使用英文界面
dnspick --lang en
# 输出机器可读 JSON(适合脚本和 CI)
dnspick --json | jq '.recommendation.top'
| 参数 | 简写 | 默认值 | 描述 |
|---|---|---|---|
--domains | -d | 内置列表 | 自定义测试域名(逗号分隔,自动去重) |
--servers | -s | 内置列表 | 自定义 DNS 服务器(协议按 scheme 自动推断:1.1.1.1 → UDP,tls://host → DoT,https://host/dns-query → DoH,h3://host/dns-query → DoH3) |
--queries | -q | 3 | 每个域名的查询次数 |
--timeout | -t | 2s | 单次查询超时 |
--concurrency | -c | 16 | 同时测试的服务器数量上限 |
--no-system-dns | false | 不检测系统默认 DNS | |
--lang | $LANG | 界面语言:en 或 zh | |
--json | false | 输出 JSON 到 stdout(不显示进度界面) |
JSON 输出(用于自动化)
dnspick --json | jq '.recommendation.top'
JSON 输出的关键字段:
| 字段 | 描述 |
|---|---|
results[] | 所有被测服务器,按综合评分降序排列 |
results[].avg_latency_ms | 平均延迟(毫秒,微秒精度) |
results[].success_rate | 成功率,范围 0.0–1.0 |
recommendation.top[] | 成功率超过 98% 的 Top 3 推荐 |
recommendation.system_dns.verdict | best(已最优)/ good_enough(无需更换)/ switch(建议切换)/ all_failed(全部失败) |
综合评分计算方式
综合评分 = (1 / 平均延迟秒数) × 成功率²
- 延迟项
1 / 平均延迟:延迟越低,分数越高,呈反比放大 - 可靠性权重
成功率²:成功率做平方惩罚,对丢包/超时非常敏感。100% 成功率乘以 1.0,90% 只剩 0.81,50% 直接砍到 0.25
这样可以避免"延迟很低但偶尔解析失败"的 DNS 排到前面。
技术细节
- 语言: Go 1.21+
- 许可证: MIT License
- 构建: GitHub Actions 跨平台自动构建,支持 Windows、macOS、Linux(含 ARM/ARM64)
- 当前版本: 持续更新中,266+ GitHub 星标
- 仓库: palemoky/dnspick
适用场景
- 🏠 家庭用户:检测 ISP 提供的 DNS 是否足够快,探索更快的公共 DNS
- 🏢 网络管理员:批量评估不同 DNS 解析器的性能,为企业网络选型
- 📊 开发者:在 CI/CD 中集成 DNS 性能监控,确保解析质量
- 🌍 跨境访问优化:对比国内外 DNS 对不同域名的解析延迟,找到最优搭配
总结
dnspick 是一个轻量但功能完整的 DNS 性能测试工具,支持四种主流 DNS 协议(UDP、DoT、DoH、DoH3),提供智能综合评分和自动当前 DNS 检测。其一键安装脚本大大降低了使用门槛,macOS 用户也不必担心 Gatekeeper 拦截(脚本自动处理)。如果你正在寻找一款能帮你选出最优 DNS 的工具,dnspick 值得一试。