dnspick:一句话选出最适合你的 DNS 服务器


项目概述

dnspick 是由开发者 palemoky 创建的一个跨平台命令行 DNS 性能测试工具。它并发基准测试一批主流及自定义 DNS 服务器,涵盖 UDPDNS-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

1
curl -fsSL https://raw.githubusercontent.com/palemoky/dnspick/main/install.sh | sh

Windows(PowerShell)

1
irm https://raw.githubusercontent.com/palemoky/dnspick/main/install.ps1 | iex

💡 macOS 用户无需手动处理 Gatekeeper 拦截,脚本会自动解除隔离标记。

手动安装

你也可以从 GitHub Releases 页面下载预编译版本。

  1. 前往最新 Release 页面。
  2. 根据你的操作系统和 CPU 架构下载对应压缩包(如 dnspick-windows-amd64.zipdnspick-linux-arm64.tar.gz)。
  3. 解压后即可在终端中使用。

建议将可执行文件移动到系统 PATH 包含的目录中:

1
2
3
4
5
# Linux / macOS
sudo mv dnspick /usr/local/bin/

# Windows(PowerShell,以管理员权限运行)
Move-Item dnspick.exe C:\Windows\System32\

更新 dnspick

随时原地升级到最新版本:

1
dnspick update

dnspick 运行时会在后台检查新版本。在交互式终端中发现新版本会自动原地更新;输出被管道接管或在 CI 中则只打印提示(不会自我修改)。该检查不阻塞主流程,离线时静默跳过。

macOS 提示「已损坏 / 移动到垃圾桶」

由于 dnspick 未经过 Apple 付费公证,macOS Gatekeeper 会拦截从网络下载的程序,出现「无法验证开发者」「已损坏,应移到废纸篓」等提示。文件并非真正损坏,任选以下方式解除即可:

1
2
# 推荐:解除下载隔离标记(一行搞定)
xattr -dr com.apple.quarantine ./dnspick
  • 图形界面方式:在访达中右键点击 → 选择「打开」→ 弹窗中再次确认「打开」
  • 较新 macOS:双击运行一次(会被拦截),然后到 系统设置 → 隐私与安全性,点击底部「仍要打开」

快速开始

直接运行即可开始测试:

1
dnspick

输出示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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%

高级用法

自定义测试参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有可用参数
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-q3每个域名的查询次数
--timeout-t2s单次查询超时
--concurrency-c16同时测试的服务器数量上限
--no-system-dnsfalse不检测系统默认 DNS
--lang$LANG界面语言:enzh
--jsonfalse输出 JSON 到 stdout(不显示进度界面)

JSON 输出(用于自动化)

1
dnspick --json | jq '.recommendation.top'

JSON 输出的关键字段:

字段描述
results[]所有被测服务器,按综合评分降序排列
results[].avg_latency_ms平均延迟(毫秒,微秒精度)
results[].success_rate成功率,范围 0.01.0
recommendation.top[]成功率超过 98% 的 Top 3 推荐
recommendation.system_dns.verdictbest(已最优)/ 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 值得一试。

项目地址: https://github.com/palemoky/dnspick


文章作者: ZeroXin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZeroXin !
评论
  目录