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