854· 27 forks· Rust· MIT开发工具

DNSGlobe - 终端里的全球 DNS 传播检查器

514-labs/dnsglobe

Rust 编写的 TUI 工具,并行查询 34 个全球公共 DNS 解析器,在终端世界地图上实时监控 DNS 记录的传播状态

成熟度维护活跃,最近提交 2 天前,仅 1 个 open issue,项目新(创建 6 天)但迭代快

GitHub 仓库 → HN 讨论 · 83 点 · 70 评论对标:dnschecker.org / whatsmydns.net

项目体检

技术 · 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 模式部分满足脚本需求

已知坑

  1. 国内 DNS 覆盖不足:默认 34 个解析器均为海外节点,中国大陆用户需手动添加阿里/腾讯/百度 DNS 到配置文件,否则无法反映国内用户实际解析情况
  2. 部分解析器需梯子:Google 8.8.8.8、Cloudflare 1.1.1.1 等在部分地区可能被墙,导致查询超时或失败
  3. Anycast 节点探测局限:只支持少数公开探测接口的 anycast 网络(Quad9/Cloudflare/Google 等),其他解析器的地图位置为静态配置,可能不准确
  4. TTL 不可控:工具只能观察缓存过期,无法加速传播;若权威 DNS 的 TTL 设置过长(如 86400 秒),传播可能需要 24 小时
  5. 终端宽度要求:地图模式至少需 131 列宽度,窄终端只能看表格;旋转地球仪动画在 SSH 会话中可能卡顿
  6. ECS 支持有限:Cloudflare/Quad9 等隐私优先的解析器故意忽略 ECS,标记为 NO ECS 后排除在传播百分比外,可能导致统计偏差

来源:GitHub 仓库 + Hacker News 社区讨论

安装方式:cargo install / brew / AUR / Nix