覆盖网络方案深度对比
Codex 核验(2026-10-09):Yggdrasil是实验性加密 IPv6 overlay,仍需既有 IP 链路和可达 peer,并不提供 ISP 接入、匿名性或不可封锁保证;局域网发现不能保证跨 NAT 自动入站。AllowedPublicKeys 可限制入站 peer,但不把所有互联网业务自动变成私密群。cjdns 的 admin 接口以 UDP/bencode 为基础,正文将其描述为普遍 REST/HTTP API 无直接依据。Mycelium/cjdns/Yggdrasil 的 CPU、内存、延迟及“唯一”能力对比没有同条件实测;示例安装命令只是历史资料,本次未执行。
三种真正不依赖 DNS/ICANN 的去中心化覆盖网络
一、cjdns 深度研究
基本信息
| 项目 | 值 |
|---|---|
| GitHub | cjdelisle/cjdns |
| ⭐ | 5,394 |
| 语言 | C(核心)+ Rust(密码学)+ NodeJS(构建) |
| 许可 | GPLv3 |
| 状态 | 稳定版(非 alpha) |
| 平台 | Linux/macOS/Windows/FreeBSD/OpenWrt |
| 首次提交 | 2011 年(15 年历史) |
核心设计理念
“Networking Reinvented” — 从头重新设计网络协议栈。
cjdns 不是 VPN,不是代理,也不是 Tor——它是一个完整的独立 IPv6 网络实现:
- 地址 = 公钥指纹 —
fc00::/8地址空间,无需 DNS/ICANN - 路由 = DHT — 分布式哈希表,无中心路由表
- 加密 = 强制 — 所有包端到端加密,无例外
- 转发 = 源路由 — 数据包携带完整路径,中间节点无查表开销
- 发现 = 自动 — 节点自动发现和连接
三层架构
物理层: UDP/TCP 隧道连接同行节点
网络层: IPv6 + 源路由 + DHT 寻址
加密层: 端到端加密(NaCl 加密盒)
安装
# 方式一:预编译二进制
curl -L https://github.com/cjdelisle/cjdns.sh/raw/main/cjdns.sh | bash
# 方式二:源码构建
git clone https://github.com/cjdelisle/cjdns
cd cjdns
./do项目目标
从白皮书直接引用:
- 安全 — 所有包加密认证,无中间人攻击可能
- 简洁 — 零配置,节点自动生成地址,自动发现
- 可扩展 — DHT 路由,无需全局路由表
- 去中心化 — 无 ICANN、无 ISP、无中心
二、三强对比
基础对比
| 维度 | cjdns | Yggdrasil | Mycelium |
|---|---|---|---|
| ⭐ | 5,394 | 5,275 | 199 |
| 语言 | C | Go | Rust |
| 状态 | ✅ 稳定版 | ⚠️ alpha | ⚠️ alpha |
| 首次发布 | 2011(15年) | 2017 | 2023 |
| 地址空间 | fc00::/8 | 200::/7 | 400::/7 |
| 路由算法 | DHT + 源路由 | DHT + 最短路径 | DHT + 局部感知 |
| RAM | ~20MB | ~30MB | ~20MB |
| 构建依赖 | Rust + Node + C | Go | Rust |
| 二进制大小 | ~5MB | ~10MB | ~8MB |
架构对比
| 维度 | cjdns | Yggdrasil | Mycelium |
|---|---|---|---|
| 加密 | ✅ NaCl 加密盒 | ✅ TLS | ✅ 端到端 |
| 自动发现 | ✅ 多播 | ✅ 多播 | ✅ 多播 |
| NAT 穿透 | ✅ | ✅ | ✅ |
| 自愈合 | ✅ | ✅ | ✅ |
| 退出节点 | ❌ 无 | ❌ 无 | ✅ 内置 SOCKS5 |
| 消息总线 | ❌ | ❌ | ✅ 主题发布/订阅 |
| HTTP API | ❌ | ❌ | ✅ RESTful API |
| 私有网络 | ❌ | ❌ | ✅ PSK 加密 |
| 匿名性 | ❌ | ❌ | ❌ |
关键差异点
| 特性 | cjdns | Yggdrasil | Mycelium |
|---|---|---|---|
| 是否生产就绪 | ✅ 是 | ❌ alpha | ❌ alpha |
| 配置复杂度 | 中等(需编译/配置 peer) | 简单(单二进制) | 简单(单二进制) |
| 生态/社区 | ⭐⭐⭐⭐⭐ 最大最老 | ⭐⭐⭐⭐ 活跃 | ⭐ 很小 |
| 速度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 安装简便性 | ⭐⭐(需编译) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 文档完善度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
抗审查能力对比
| 攻击方式 | cjdns | Yggdrasil | Mycelium |
|---|---|---|---|
| DNS 污染 | ✅ 免疫 | ✅ 免疫 | ✅ 免疫 |
| IP 封锁 | ✅ 免疫(地址=密钥) | ✅ 免疫 | ✅ 免疫 |
| DPI 识别 | ✅ 全加密无特征 | ✅ 全加密 | ✅ 全加密 |
| 协议特征 | ⚠️ UDP 可能被识别 | ⚠️ TCP/UDP | ⚠️ UDP |
| 节点封锁 | ✅ 自愈合绕路 | ✅ 自愈合 | ✅ 自愈合 |
| 全网封锁 | ❌ 需要至少一个出口 peer | ❌ 同左 | ❌ 同左 |
三、详细对比:cjdns vs Yggdrasil
cjdns 的优势
- 15 年稳定性 — 非 alpha,已在真实网络中长时间运行
- C 语言实现 — 性能最优,资源消耗最低(~20MB)
- 源路由创新 — 数据包携带路径,中间节点零查表
- 最大社区 — 文档最全(白皮书、架构文档、FAQ 等)
- 中文支持 — README 有简体中文版
cjdns 的劣势
- 构建复杂 — 需要 Rust + NodeJS + C 编译工具链
- 配置繁琐 — 需要手动编辑配置文件添加 peer
- 密码学依赖 — 使用 NaCl,无后量子密码学准备
- 非匿名 — 路由可追踪
Yggdrasil 的优势
- 最简单部署 — 单二进制下载即用
- Go 语言 — 跨平台构建简单
- 自组织最强 — 多播自动发现,几乎零配置
- 活跃开发 — GitHub 活动频繁
Yggdrasil 的劣势
- alpha 阶段 — 不保证稳定性
- 相对年轻 — 2017 年开始
- 社区较小 — 文档和用户少于 cjdns
四、推荐方案
首选:cjdns(生产就绪,最成熟)
理由:15 年稳定版,C 语言高性能,最大社区,最完善文档
适用:长期生产环境部署
次选:Yggdrasil(最易部署,入门体验)
理由:单二进制即用,零配置,适合先体验覆盖网络概念
适用:快速测试、学习、非关键场景
备选:Mycelium(Rust 实现,功能最丰富)
理由:唯一内置 SOCKS5 退出 + 消息总线 + HTTP API + 私有网络
适用:需要这些额外功能的场景(但生态太小)
共存方案
cjdns (主要覆盖网络,稳定)
│
├── Conduit (人类聊天) ← Element 客户端
├── NATS (Agent 总线)
└── Yggdrasil (测试/备用)
│
Mihomo (公共互联网 fallback)