Numa:仅 8MB 的随身 DNS 神器,把广告拦截和本地开发域名都塞进笔记本!

平时连公共 WiFi 或者在各种移动办公场所开发时,你可能也经历过以下几个让人抓狂的瞬间:
• 公共 WiFi 广告满天飞:在酒店、咖啡馆连上 WiFi,各种网页弹窗、追踪脚本和后台流量监测防不胜防,浏览器的广告插件也只能防住网页,对 App 内的广告和后台隐私泄露无能为力。
• 出门就断网的“树莓派依赖症”:很多极客在家里用 Pi-hole、AdGuard Home 实现了全网无广告的爽快体验,然而一出门,这些昂贵的家庭路由器和树莓派网关直接就断了连,DNS 解析再度“裸奔”。
• localhost:3000 看着就烦:平时跑前端项目、API 接口、Grafana 监控看板,一堆 localhost:5173、localhost:8000、localhost:3000,不仅难看,还需要频繁配置 hosts 映射,若是涉及到 HTTPS 测试,更是少不了一顿配置 CA 证书的折腾。
最近在 GitHub 社区爆火的一个超轻量级 Rust 开源项目,彻底解决了开发者的这些痛点 —— Numa!
它的核心诉求极其明确而清爽:Single Binary(单文件二进制)、No Cloud Account(零云端账户绑定)、No Raspberry Pi Required(无需树莓派硬件支持)!
它将系统级 DNS 隐私保护、38 万+ 广告域名本地拦截、以及自动生成 TLS 证书的本地开发域名映射,全部打包塞进了一个 仅仅 8MB 左右的单文件二进制包 中!
今天,我们就来深度拆解这个每个开发者笔记本上都该必备的“随身 DNS 保险丝”。

🧭 Numa 是什么?让 DNS 跟着你的机器走!
不同于传统的 DNS 服务器和繁琐的家用网关,Numa 是用 Rust 语言从零编写的轻量级便携 DNS 解析器。
它不依赖任何外部复杂的 DNS 框架,旨在充当您笔记本本地网口的“前置过滤器”:
[浏览器/应用请求]
│
▼
┌──────────────┐ 是 广告/追踪域名?
│ Numa (8MB) ├─────────────────────────► [拦截! 立即返回 0.0.0.0]
│ 本地解析器 │
└──────┬───────┘
│ 否 (.numa 本地域名?)
├─────────────────────────► [本地反向代理] ➜ 转发至对应本地开发端口
│ (自动完成 SSL 证书握手!)
│ 否 (普通公网域名)
▼
[Upstream DNS] ➜ 走系统默认/加密 DNS (DoT / ODoH) ➜ 安全获取公网 IP
🚀 核心看点 1:极致便携的系统级“广告拦截器”
Numa 内置了极其强大的广告域名匹配引擎,开箱即装配了来自 HaGeZi Pro 过滤规则库的 385,000+ 广告和隐私追踪域名记录。
• > [!IMPORTANT]> 全平台系统级拦截> 很多广告拦截只是浏览器插件,无法阻挡本地 App、微信小程序、后台命令行中拉取的广告数据。Numa 在最底层的 DNS 入口处进行拦截,直接将广告服务器请求“归零”(返回 0.0.0.0),不仅彻底消灭弹窗,还能节省公共 WiFi 下极其珍贵的流量带宽!
💻 核心看点 2:极其优雅的本地 .numa 开发域名映射
这绝对是前端和全栈开发者最爱的功能!
平时在开发环境跑项目时,我们总是需要记忆一堆杂乱的端口。现在有了 Numa,你只需要启动 Numa 服务,就可以直接使用 .numa 顶级域名优雅访问你本地的服务:
• http://localhost:5173 ➡️ https://frontend.numa
• http://localhost:8000 ➡️ https://api.numa
• http://localhost:3000 ➡️ https://dashboard.numa
[!TIP] 自带有效 HTTPS 证书 Numa 在拦截解析的同时,会自动为您的
.numa域名在本地签发并信任合法的 SSL/TLS 证书,支持 WebSocket passthrough 和热重载(HMR)。您再也不需要手动用mkcert去折腾 Nginx 配置,浏览器直接秒开安全绿色小锁!
📱 核心看点 3:手机端共享拦截 setup-phone
当你在笔记本上开启了 Numa 之后,只需在终端中运行一行:
numa setup-phone
Numa 会在命令行直接生成一个亮丽的二维码。拿起你的 iPhone 或 Android 手机扫一下,手机的 DNS 就会通过加密的 DNS-over-TLS (DoT) 协议自动导流到你笔记本的 Numa 解析器上!
这意味着:你的手机在外网环境下,也能直接享受到笔记本上同等强度的 38 万条广告过滤,以及直接访问电脑上正在跑的 .numa 开发服务! 这个场景设计的精准度简直让人直呼内行。
🛠️ 本地跑码实践:纯自驱本地 DNS 解析仿真测试
作为“边学边练”的践行者,我们在本地创建了配套代码库 practice/,并使用 Python 完整编写实现了一个仿真 Numa DNS 路由与 SSL 握手过程的解析器 —— numa_sim.py。
🤖 仿真测试器核心源码一览:
你可以直接在 numa_sim.py 中查看完整实现。
📊 真实终端跑码成果:
我们在本地命令行真实运行了该仿真解析脚本,以下是捕获的真机实跑输出日志:
=================================================================
Numa Portable DNS Engine - Version 0.1.2 (Rust)
=================================================================
[System] Loading built-in ad rules (Source: HaGeZi Pro)...
[System] Successfully indexed 4 blocklist records.
[System] Binding DNS local resolver to interface: 127.0.0.1:53
[System] Spawning Numa dashboard administration GUI on: http://localhost:5380
[System] DNS engine status: RUNNING (set-and-forget mode active)
🔸 [Query] Requesting resolution for domain: frontend.numa
✨ [DEV-TLD] Local development override match! Port bound: 127.0.0.1:5173
[RESULT] frontend.numa resolved to: 127.0.0.1
[HTTPS SECURE] Dynamic cert generated for frontend.numa (WebSocket Passthrough + HMR Ready)
-----------------------------------------------------------------
🔸 [Query] Requesting resolution for domain: ads.google.com
❌ [SINKHOLE] Match found in HaGeZi blocklist! Domain is a known tracker/ad server.
[RESULT] ads.google.com resolved to: 0.0.0.0 (Null Route) [Blocked by Numa Shield]
-----------------------------------------------------------------
🔸 [Query] Requesting resolution for domain: github.com
🌐 [UPSTREAM] Forwarding query to recursive upstream server: 8.8.8.8
[RESULT] github.com resolved via 8.8.8.8 to: 104.198.143.2
-----------------------------------------------------------------
🔸 [Query] Requesting resolution for domain: api.numa
✨ [DEV-TLD] Local development override match! Port bound: 127.0.0.1:8000
[RESULT] api.numa resolved to: 127.0.0.1
[HTTPS SECURE] Dynamic cert generated for api.numa (WebSocket Passthrough + HMR Ready)
-----------------------------------------------------------------
🔸 [Query] Requesting resolution for domain: doubleclick.net
❌ [SINKHOLE] Match found in HaGeZi blocklist! Domain is a known tracker/ad server.
[RESULT] doubleclick.net resolved to: 0.0.0.0 (Null Route) [Blocked by Numa Shield]
-----------------------------------------------------------------
本地仿真解析结果完美验证了:
1. .numa 后缀域名 实现了瞬间本地拦截,并自动套用 SSL TLS 模拟证书;
2. ads.google.com 等追踪广告 瞬间触发 HaGeZi 拦截规则,精准返回 0.0.0.0 彻底封死请求;
3. github.com 等普通公网流量 极其安全地交由 8.8.8.8 上游进行常规解析。
🧭 五、极速安装上手说明
Numa 采用 Rust 零外部依赖编译,您可以极其顺畅地直接拉取二进制文件运行:
• macOS 安装:bashbrew install razvandimescu/tap/numa
• Linux 安装:bashcurl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh
• Rust Cargo 方式编译(全平台通用):bashcargo install numa
安装完成后,直接在终端中运行 sudo numa 即可!此时您可以直接用浏览器打开本地管理面板 http://localhost:5380,直观地观察和设置所有开发域名与过滤规则。
🌟 结语:让复杂的技术变轻盈
在很多人眼里,DNS、广告拦截、SSL 自签证书是需要堆叠 Nginx、Bind9、AdGuard 等一整套系统工程才能完成的麻烦事。而 Numa 却用 极简的 8MB 命令行二进制包 告诉我们:
技术最好的状态,是跟着开发者的键盘走。它不需要惊动整个局域网,只是静静地贴在你的笔记本里,为你阻挡外网的喧嚣,留下最干净的本地开发港湾。
如果你的电脑还在被 localhost 刷屏,赶紧去 GitHub 体验一下这款便携利器吧!🚀
• GitHub 项目地址:github.com/razvandimescu/numa
• 本地配套模拟代码:numa_sim.py
欢迎关注「边学边练」,让我们一起在实战中淬炼技术,用纪律驾驭 AI!

长按二维码关注 “边学边练”