Numa:用 Rust 编写的便携式 DNS 解析器

2026-10-23 23:34:00 2 408

Numa

Github:https://github.com/razvandimescu/numa

Numa-demo.webp

一个便携式 DNS 解析器,集成在单个二进制文件中。它可以屏蔽任何网络上的广告,命名您的本地服务(frontend.numa),自动恢复任何主机名,并使用ODoH(RFC 9230)加密每个出站查询,确保没有任何一方能够同时看到您的身份和查询内容——所有操作都可以在您的笔记本电脑上完成,无需云账户或 Raspberry Pi。

完全用 Rust 从零开始构建。零 DNS 库。开箱即用缓存、广告拦截和本地服务域名。可选的从根名称服务器递归解析,并带有完整的 DNSSEC 信任链验证,此外还包含一个用于加密客户端连接的 DNS-over-TLS 监听器(iOS 私有 DNS、systemd-resolved 等)。运行后numa relay,同一个二进制文件也会成为一个公共的 ODoH 端点——目前精心维护的 DNSCrypt 列表中只有一个可用的中继,因此每次 Numa 部署都会显著扩展生态系统。一个约 8MB 的二进制文件,所有功能都已嵌入。网络协议解析器是作为学习项目手工编写的;后续功能(递归解析器、DNSSEC、仪表板)是在 AI 辅助下构建的。

介绍

一个 ~8MB 的二进制文件,干的事不少:

  • 本地开发爽了:服务不用记端口号,frontend . numa 直接在浏览器打开,自带 HTTPS 绿锁,WebSocket 热更新也透传。不用 mkcert、不用 nginx、不用改 /etc/hosts。
  • 去广告:Hagezi Pro 规则每天更新,咖啡馆、酒店、机场,走到哪挡到哪,不用再搭树莓派。
  • 隐私拉满:支持 ODoH(Oblivious DoH),查询加密后经中继转发——中继知道你是谁但看不到你问了啥,目标知道问了啥但不知道你是谁。
  • 还能当递归解析器用,直接从根域名服务器查,带 DNSSEC 全链验证;手机也好接,一行命令出二维码,扫一下手机的 DNS 就切过来了。
  • MIT 开源,1.5k star,macOS/Linux/Windows 都能装。

快速入门

三种接入方式,从最少到最多。只有第三种方式会修改你的系统 DNS。

1. 在 Docker 中尝试(主机上不安装任何软件)

docker run -d --name numa -p 127.0.0.1:5553:53/udp -p 127.0.0.1:5553:53/tcp \
  -p 127.0.0.1:5380:5380 ghcr.io/razvandimescu/numa
dig @127.0.0.1 -p 5553 example.com
docker exec numa numa token            # dashboard password

打开http://localhost:5380并使用任意用户名和该令牌登录。端口 5553 会绕过主机上已占用的 53 端口。numa.numa此处无法解析,因为主机未使用 Numa 进行 DNS 解析。使用 . 进行清理docker rm -f numa。

2. 在前台运行(系统 DNS 不受影响)

安装二进制文件:

# macOS
brew install razvandimescu/tap/numa

# Linux
curl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh

# Arch Linux
pacman -S numa

# Windows — download from GitHub Releases
# All platforms
cargo install numa

# Nix
nix profile install github:razvandimescu/numa
sudo numa                              # Ctrl-C to stop (port 53 requires root/admin)

NUMA 监听 53 端口,但您的系统会保留当前的解析器,直到您运行 numa --help numa install,因此请使用 numa --help 进行测试dig @127.0.0.1 example.com。控制面板位于 /etc/numa/dashboard/ http://localhost:5380。如果 53 端口已被占用(在 Ubuntu/Mint 上由 systemd 解析),请bind_addr在/etc/numa/dashboard/ 中设置 numa --helpnuma.toml或使用 Docker。

关于作者

whoami128篇文章212篇回复

勤快的搬运工。

评论2次

要评论?请先  登录  或  注册
  • 2楼
    2026-10-25 15:39

    有点高端,感觉这个DNS列表真的做全了是很帅。就是没用过Hagezi Pro不知道他这个列表和规则更新的咋样。会不会有误报或者漏解析的情况。

  • 1楼
    2026-10-23 23:50

    结论

    Numa 本质上是一个把本地 DNS 缓存、广告过滤、递归解析、DNSSEC 验证、DoT 服务端和 ODoH 客户端/中继整合进单个 Rust 二进制的便携式 DNS 基础设施。从攻击分析角度看,它的价值主要是充当红队侦察链中的统一解析与流量出口层,而不是子域名扫描器或真实 IP 查找工具:它能稳定解析候选域名、观察 CNAME 链并减少权威 DNS 侧对客户端 IP 的直接暴露,但候选域名和历史解析记录仍需通过 CT、被动 DNS、搜索引擎及字典爆破获得。

    攻击链中的实际用途

    可以按下面的流程把它接入子域名和源站发现流程:

    # 启动容器docker run -d --name numa \  -p 127.0.0.1:5553:53/udp \  -p 127.0.0.1:5553:53/tcp \  -p 127.0.0.1:5380:5380 \  ghcr.io/razvandimescu/numa# 分别检查地址、别名和文本记录dig @127.0.0.1 -p 5553 api.example.com A +noall +answerdig @127.0.0.1 -p 5553 api.example.com CNAME +noall +answerdig @127.0.0.1 -p 5553 example.com TXT +noall +answer

    具体价值包括:

    • 统一解析视角:缓存、递归解析和 DoT 入口可让笔记本、手机及局域网设备使用同一套解析结果,便于横向比较不同子域名的 A、AAAA、CNAME、MX、NS、TXT 记录。
    • 发现 CDN 与源站线索:若主站使用 CDN,而某些小众子域仍返回相同网段、可信 ASN 或内部命名规律,可结合历史 DNS、邮件记录和证书透明度结果筛选候选源站。
    • 减少权威侧归因:ODoH 模式下,中继节点知道客户端地址,权威 DNS 服务器通常看到的是中继地址,而不是直接看到查询终端。这能降低被动 DNS 日志直接关联扫描源的概率。
    • 本地命名空间:.numa 可用于搭建内部服务命名、测试环境和临时多服务环境,不影响公网真实 DNS。

    不过,ODoH 不等于完全匿名:中继仍能获得客户端 IP 和连接时间,目标服务器通常看到中继 IP,流量大小与时序仍可能暴露关联信息;浏览器等其他应用产生的 DNS 或连接泄漏也不受 Numa 控制。DNSSEC同样只验证已签名区域的答案真实性,不会自动发现 CDN 后面的源站或历史地址。

    值得关注的攻击面

    1. DNS 监听端口 如果 bind_addr 监听所有接口,TCP/UDP 53 会成为局域网中的高价值服务,可被用于开放递归、DNS amplification、缓存投毒测试和恶意重绑定。是否允许递归、是否绑定公网地址以及响应来源校验方式决定了实际暴露程度。

    2. ODoH 公共中继 numa relay 将中继端暴露到网络。中继可能被用于连接洪泛、带宽消耗或充当流量掩护。ODoH 隐藏的是“客户端—目标”之间的身份关联,不代表中继没有滥用价值。

    3. 控制面板与 WebSocket 5380 端口的令牌认证、热更新和配置写入属于控制面。值得重点审计令牌强度、认证绕过、路径处理、配置反序列化、命令调用及 WebSocket 鉴权。Rust 能降低内存破坏风险,但不能消除业务逻辑漏洞。

    4. 手写 DNS 协议解析器 项目强调“零 DNS 库、从零手写解析”,因此值得检查报文长度边界、压缩指针循环、事务 ID 与端口随机化、CNAME 链、缓存键规范化及异常响应处理。内存安全明显优于 C 实现,但解析状态机和边界条件仍可能出错。

    5. 递归解析与 DNSSEC 风险集中在根信任锚、DS/NSEC 验证、委派切换、CNAME 跟随、算法降级和异常委派处理。签名链验证成功不代表返回的 CDN 地址就是源站地址。

    6. 广告规则供应链 Hagezi 规则会直接影响侦察结果。被广告规则覆盖的域名可能返回 NXDOMAIN 或空结果,在批量枚举时容易被误判为目标不存在,因此应把 Numa 结果与另一套解析器或权威查询交叉验证。

    综合来看,Numa 更适合作为子域名枚举、历史 DNS 检索、真实 IP 猜测之后的解析验证层。它能改善隐私和解析一致性,但不会取代 CT 日志、被动 DNS、字典爆破、ASN/WHOIS、证书关联以及直接使用目标 Host/SNI 的源站验证。帖子未给出明确版本号,因此目前无法据此关联具体 CVE;是否存在可远程触发或已认证利用的缺陷,需要结合对应发布版本及实际监听配置验证。