DNSGlobe - 终端里的全球 DNS 传播检查器
514-labs/dnsglobe
Rust 编写的 TUI 工具,并行查询 34 个全球公共 DNS 解析器,在终端世界地图上实时监控 DNS 记录的传播状态
成熟度:维护活跃,最近提交 2 天前,仅 1 个 open issue,项目新(创建 6 天)但迭代快
项目体检
技术 · Rust + ratatui(TUI框架) + hickory-resolver(DNS查询) + tokio(异步运行时)
许可 · MIT 协议,可自由商用无需开源衍生代码
活跃 · 高活跃度:v0.4.0 发布于 2 天前,3 名贡献者,项目创建仅 6 天已获 854 stars
解决什么
DNS 记录修改后,全球各地的 DNS 解析器因缓存过期时间不同,看到新记录的时间点各异。开发者和运维人员需要确认域名解析是否已在全球范围生效,传统方式是手动访问多个在线 DNS 检查网站,或用 dig 逐个查询不同解析器。DNSGlobe 将这个过程自动化到终端:一条命令并行查询 34 个分布在北美、欧洲、俄罗斯、中东、东亚和南半球的公共 DNS 解析器,直接连接每台服务器(绕过缓存),在终端里用世界地图可视化展示哪些节点已返回新记录、哪些还在返回旧值,并提供 watch 模式每 30 秒自动重查直到 100% 传播完成。
为何火
项目上线 6 天即获 854 stars,在 Hacker News 引发 70 条评论热议。核心吸引力在于三点:1) 终端原生体验 - 用 Rust + ratatui 构建的 TUI 界面,宽屏终端显示平面世界地图,窄屏自动切换为旋转 3D 地球仪,每个解析器用彩色圆点标注状态(绿色一致/洋红不同/红色错误/黄色查询中);2) 真实网络视角 - 直接查询 anycast 网络(Google/Cloudflare/Quad9)的实际服务节点,通过 TXT 记录探测具体 POP 位置(如 →YUL 表示蒙特利尔节点),并支持 EDNS Client Subnet 模拟不同地区用户看到的 GeoDNS 结果;3) 自动化监控 - watch 模式解放双手,适合 DNS 切换时挂在后台等待全球生效。HN 讨论虽有争议(见下文),但工具本身的实用性和终端美学获得广泛认可。
核心功能
- 34 个全球解析器并行查询:覆盖 Google Public DNS、Cloudflare 1.1.1.1、Quad9、OpenDNS、Neustar UltraDNS、俄罗斯 Yandex、澳洲 Telstra、新西兰 SafeSurfer、巴西 UOL 等,每个直连查询(启用 EDNS0,TCP 回退处理截断响应)
- 智能答案分组:轮询 DNS(round-robin)场景下,不同解析器缓存不同 IP 子集视为同一答案组,避免误判为"不一致";传播进度按多数派答案占比计算,少数派标记
≠ DIFFERS - Anycast 节点探测:自动查询 Quad9/Cloudflare/Google 等 anycast 网络的实际服务节点,地图圆点动态移动到真实 POP 位置
- EDNS Client Subnet 支持:通过
--ecs 203.0.113.0/24模拟特定客户端网络查询 GeoDNS,Ctrl+N 循环切换多个子网;不支持 ECS 的解析器(Cloudflare/Quad9)标记NO ECS并排除在传播百分比外 - 自适应世界视图:终端宽度 ≥157 列显示平面地图,≥131 列显示旋转地球仪,窄于 131 列仅显示表格;Ctrl+O 手动切换或配置文件强制指定
- Watch 模式与脚本输出:
dnsglobe example.com启动后每 30 秒自动重查直到 100% 传播;--once模式打印结果后退出,适合脚本集成
安装
# macOS/Linux Homebrew
brew install 514-labs/tap/dnsglobe
# Rust 用户(需 Rust 1.85+)
cargo install dnsglobe
# Arch Linux AUR
yay -S dnsglobe # 从源码编译
yay -S dnsglobe-bin # 预编译二进制
# Nix flakes
nix run github:514-labs/dnsglobe
# 或从 GitHub Releases 下载预编译二进制
基本用法:
dnsglobe # 交互式启动,输入域名
dnsglobe example.com # 立即查询 A 记录并 watch
dnsglobe example.com TXT # 查询 TXT 记录
dnsglobe --once example.com # 单次查询后退出(脚本模式)
dnsglobe example.com --ecs 203.0.113.0/24 # 模拟该客户端网络查询
配置文件 ~/.config/dnsglobe/config.toml 可添加自定义解析器或设置 ECS 默认值。
适合谁
- 运维工程师:域名迁移、CDN 切换后需验证全球 DNS 生效情况,watch 模式可挂后台等待传播完成
- 开发者:调试 GeoDNS 配置时用 EDNS Client Subnet 模拟不同地区用户视角,快速发现配置错误
- 网络工程师:排查 DNS 解析异常时,一次性查看全球主流公共解析器的返回结果,定位问题节点
- 终端爱好者:欣赏精美 TUI 设计,地图/地球仪动画在宽屏终端效果惊艳
中国大陆用户注意:工具查询的 34 个解析器均为海外公共 DNS(Google 8.8.8.8、Cloudflare 1.1.1.1 等),部分可能需要梯子访问;若需监控国内 DNS(如阿里 223.5.5.5、腾讯 119.29.29.29),需通过配置文件手动添加。
社区评价
HN 讨论热度高(83 点,70 评论),但核心争议集中在 "DNS 传播"这个术语的准确性。多位网络工程师指出:DNS 记录变更并非像病毒一样"传播",而是各解析器的缓存独立过期后重新查询权威服务器,过期顺序随机且与地理位置无关。批评者认为工具名称"DNSGlobe"和世界地图展示强化了"地理传播"的误解,实际上 anycast 网络的同一 IP 在不同地区可能路由到不同服务器,地图上的点并不代表真实用户查询的节点。
支持者反驳称:1) 工具确实在查询分布全球的公共解析器,由于终端用户通常使用地理位置接近的 DNS 服务器,地图能直观展示"全球各地用户看到什么";2) README 明确说明是查询解析器列表,并探测 anycast 实际服务节点,不存在技术误导;3) "传播"只是增量扩散的通俗说法,不必拘泥于物理拓扑。
正面观点包括:终端 UI 设计精美,watch 模式实用,EDNS Client Subnet 支持是亮点,适合快速验证 DNS 变更。负面观点:地理展示可能误导非专业用户,且工具无法解决 DNS 缓存的根本问题(如用户本地 ISP 递归解析器的长 TTL)。
整体而言,社区认可工具的技术实现和实用价值,但建议作者在文档中更清晰地解释 DNS 缓存机制,避免"传播"一词引发误解。
选型对比
vs dnschecker.org / whatsmydns.net(商业 Web 服务):
- DNSGlobe 优势:终端原生,无需浏览器;watch 模式自动重查;开源可自定义解析器列表;EDNS Client Subnet 支持更强
- 商业工具优势:Web 界面更直观,非技术用户友好;解析器节点可能更多(dnschecker.org 声称 100+ 节点);无需本地安装
vs dig / nslookup(传统命令行工具):
- DNSGlobe 优势:并行查询 34 个解析器,自动分组和对比;可视化地图;watch 模式
- dig 优势:更底层,可查看完整 DNS 响应细节(DNSSEC、EDNS 选项等);所有系统预装
vs 自建监控脚本:
- DNSGlobe 优势:开箱即用,UI 精美;anycast 节点探测等高级功能已实现
- 自建脚本优势:可集成到 CI/CD 或监控系统;
--once模式部分满足脚本需求
已知坑
- 国内 DNS 覆盖不足:默认 34 个解析器均为海外节点,中国大陆用户需手动添加阿里/腾讯/百度 DNS 到配置文件,否则无法反映国内用户实际解析情况
- 部分解析器需梯子:Google 8.8.8.8、Cloudflare 1.1.1.1 等在部分地区可能被墙,导致查询超时或失败
- Anycast 节点探测局限:只支持少数公开探测接口的 anycast 网络(Quad9/Cloudflare/Google 等),其他解析器的地图位置为静态配置,可能不准确
- TTL 不可控:工具只能观察缓存过期,无法加速传播;若权威 DNS 的 TTL 设置过长(如 86400 秒),传播可能需要 24 小时
- 终端宽度要求:地图模式至少需 131 列宽度,窄终端只能看表格;旋转地球仪动画在 SSH 会话中可能卡顿
- ECS 支持有限:Cloudflare/Quad9 等隐私优先的解析器故意忽略 ECS,标记为
NO ECS后排除在传播百分比外,可能导致统计偏差
来源:GitHub 仓库 + Hacker News 社区讨论
安装方式:cargo install / brew / AUR / Nix