newsence
Show HN:我用 Rust 從零開始打造了一個 DNS 解析器——完全不使用 DNS 函式庫

Show HN:我用 Rust 從零開始打造了一個 DNS 解析器——完全不使用 DNS 函式庫

Hacker News·3 天前

Numa 是一款用 Rust 從零開始打造的便攜式高效能 DNS 解析器,具備廣告攔截、本地服務命名以及完整的 DNSSEC 驗證功能,且完全不依賴外部 DNS 函式庫。

背景

這篇文章介紹了一款名為 Numa 的開源專案,作者使用 Rust 語言從零開始開發了一個不依賴任何現成 DNS 函式庫的 DNS 解析器。Numa 旨在解決開發者在本地環境配置服務時的痛點,提供自動化的 TLS 憑證生成、廣告攔截以及跨裝置的區域網路服務發現功能,讓使用者能以自定義的域名取代傳統的 IP 與連接埠組合。

社群觀點

在 Hacker News 的討論中,社群對 Numa 展現了高度的興趣,特別是針對其解決本地開發環境配置複雜度的能力。許多開發者表示,過去為了在本地達成 HTTPS 支援,往往需要耗費大量時間調整 mkcert、Nginx 或手動修改 hosts 檔案,而 Numa 整合了自動生成本地 CA 並將其存入系統信任清單的功能,這種一站式的解決方案被視為該專案的殺手級應用。此外,Numa 在資源消耗上的表現也引起了討論,作者指出在加載超過 39 萬條廣告攔截規則的情況下,整體記憶體佔用僅約 31MB,這讓不少原本使用 Pi-hole 的使用者考慮將其作為更輕量化的替代方案,部署在記憶體受限的單板電腦或筆記型電腦上。

然而,討論中也出現了一些技術細節與命名上的爭議。有使用者反映在瀏覽器中使用自定義域名時,若未加上結尾斜線,瀏覽器常會將其誤判為搜尋關鍵字而非網址,這引發了關於瀏覽器如何識別非標準頂級域名(TLD)的技術討論。針對命名,部分技術背景深厚的網友指出 Numa 與計算機架構中的非統一記憶體存取(Non-Uniform Memory Access)縮寫相同,容易造成混淆,但作者解釋其命名靈感來自羅馬國王、羅馬尼亞語中的名字一詞,甚至帶有流行歌曲的趣味諧音。

在功能擴展方面,社群提出了多樣化的建議,例如希望 Numa 能以函式庫的形式提供程式化配置,或進一步支援 Docker 容器網路的服務名稱解析。作者對此持開放態度,並透露目前已能透過將容器 DNS 指向主機來達成基本相容。儘管討論中偶爾出現對專案行銷語氣的零星批評,但整體共識仍肯定該專案在效能優化上的努力,特別是其在熱點路徑上達成零堆積分配以及極低的 DNSSEC 驗證延遲,展現了 Rust 在系統編程上的優勢。

延伸閱讀

  • Numa 官方網站與部落格:提供關於如何從零開始實作 DNSSEC 鏈結信任驗證的技術細節。
  • Hagezi Pro 阻擋清單:Numa 預設使用的廣告過濾來源。
  • 專案原始碼:託管於 GitHub,包含 numa.toml 配置範例與解析器實作邏輯。
https://github.com/razvandimescu/numa