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

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

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

Numa DNS 核心封面

平时连公共 WiFi 或者在各种移动办公场所开发时,你可能也经历过以下几个让人抓狂的瞬间:

公共 WiFi 广告满天飞:在酒店、咖啡馆连上 WiFi,各种网页弹窗、追踪脚本和后台流量监测防不胜防,浏览器的广告插件也只能防住网页,对 App 内的广告和后台隐私泄露无能为力。

出门就断网的“树莓派依赖症”:很多极客在家里用 Pi-hole、AdGuard Home 实现了全网无广告的爽快体验,然而一出门,这些昂贵的家庭路由器和树莓派网关直接就断了连,DNS 解析再度“裸奔”。

localhost:3000 看着就烦:平时跑前端项目、API 接口、Grafana 监控看板,一堆 localhost:5173localhost:8000localhost:3000,不仅难看,还需要频繁配置 hosts 映射,若是涉及到 HTTPS 测试,更是少不了一顿配置 CA 证书的折腾。

最近在 GitHub 社区爆火的一个超轻量级 Rust 开源项目,彻底解决了开发者的这些痛点 —— Numa

它的核心诉求极其明确而清爽:Single Binary(单文件二进制)、No Cloud Account(零云端账户绑定)、No Raspberry Pi Required(无需树莓派硬件支持)!

它将系统级 DNS 隐私保护、38 万+ 广告域名本地拦截、以及自动生成 TLS 证书的本地开发域名映射,全部打包塞进了一个 仅仅 8MB 左右的单文件二进制包 中!

今天,我们就来深度拆解这个每个开发者笔记本上都该必备的“随身 DNS 保险丝”。

Numa:仅 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!


公众号二维码

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

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章