覆盖网络方案深度对比

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 深度研究

基本信息

项目值
GitHubcjdelisle/cjdns
⭐5,394
语言C(核心)+ Rust(密码学)+ NodeJS(构建)
许可GPLv3
状态稳定版(非 alpha)
平台Linux/macOS/Windows/FreeBSD/OpenWrt
首次提交2011 年(15 年历史)

核心设计理念

“Networking Reinvented” — 从头重新设计网络协议栈。

cjdns 不是 VPN,不是代理,也不是 Tor——它是一个完整的独立 IPv6 网络实现:

  1. 地址 = 公钥指纹 — fc00::/8 地址空间,无需 DNS/ICANN
  2. 路由 = DHT — 分布式哈希表,无中心路由表
  3. 加密 = 强制 — 所有包端到端加密,无例外
  4. 转发 = 源路由 — 数据包携带完整路径,中间节点无查表开销
  5. 发现 = 自动 — 节点自动发现和连接

三层架构

物理层: 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

项目目标

从白皮书直接引用:

  1. 安全 — 所有包加密认证,无中间人攻击可能
  2. 简洁 — 零配置,节点自动生成地址,自动发现
  3. 可扩展 — DHT 路由,无需全局路由表
  4. 去中心化 — 无 ICANN、无 ISP、无中心

二、三强对比

基础对比

维度cjdnsYggdrasilMycelium
⭐5,3945,275199
语言CGoRust
状态✅ 稳定版⚠️ alpha⚠️ alpha
首次发布2011(15年)20172023
地址空间fc00::/8200::/7400::/7
路由算法DHT + 源路由DHT + 最短路径DHT + 局部感知
RAM~20MB~30MB~20MB
构建依赖Rust + Node + CGoRust
二进制大小~5MB~10MB~8MB

架构对比

维度cjdnsYggdrasilMycelium
加密✅ NaCl 加密盒✅ TLS✅ 端到端
自动发现✅ 多播✅ 多播✅ 多播
NAT 穿透✅✅✅
自愈合✅✅✅
退出节点❌ 无❌ 无✅ 内置 SOCKS5
消息总线❌❌✅ 主题发布/订阅
HTTP API❌❌✅ RESTful API
私有网络❌❌✅ PSK 加密
匿名性❌❌❌

关键差异点

特性cjdnsYggdrasilMycelium
是否生产就绪✅ 是❌ alpha❌ alpha
配置复杂度中等(需编译/配置 peer)简单(单二进制)简单(单二进制)
生态/社区⭐⭐⭐⭐⭐ 最大最老⭐⭐⭐⭐ 活跃⭐ 很小
速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
安装简便性⭐⭐(需编译)⭐⭐⭐⭐⭐⭐⭐⭐⭐
文档完善度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

抗审查能力对比

攻击方式cjdnsYggdrasilMycelium
DNS 污染✅ 免疫✅ 免疫✅ 免疫
IP 封锁✅ 免疫(地址=密钥)✅ 免疫✅ 免疫
DPI 识别✅ 全加密无特征✅ 全加密✅ 全加密
协议特征⚠️ UDP 可能被识别⚠️ TCP/UDP⚠️ UDP
节点封锁✅ 自愈合绕路✅ 自愈合✅ 自愈合
全网封锁❌ 需要至少一个出口 peer❌ 同左❌ 同左

三、详细对比:cjdns vs Yggdrasil

cjdns 的优势

  1. 15 年稳定性 — 非 alpha,已在真实网络中长时间运行
  2. C 语言实现 — 性能最优,资源消耗最低(~20MB)
  3. 源路由创新 — 数据包携带路径,中间节点零查表
  4. 最大社区 — 文档最全(白皮书、架构文档、FAQ 等)
  5. 中文支持 — README 有简体中文版

cjdns 的劣势

  1. 构建复杂 — 需要 Rust + NodeJS + C 编译工具链
  2. 配置繁琐 — 需要手动编辑配置文件添加 peer
  3. 密码学依赖 — 使用 NaCl,无后量子密码学准备
  4. 非匿名 — 路由可追踪

Yggdrasil 的优势

  1. 最简单部署 — 单二进制下载即用
  2. Go 语言 — 跨平台构建简单
  3. 自组织最强 — 多播自动发现,几乎零配置
  4. 活跃开发 — GitHub 活动频繁

Yggdrasil 的劣势

  1. alpha 阶段 — 不保证稳定性
  2. 相对年轻 — 2017 年开始
  3. 社区较小 — 文档和用户少于 cjdns

四、推荐方案

首选:cjdns(生产就绪,最成熟)

理由:15 年稳定版,C 语言高性能,最大社区,最完善文档
适用:长期生产环境部署

次选:Yggdrasil(最易部署,入门体验)

理由:单二进制即用,零配置,适合先体验覆盖网络概念
适用:快速测试、学习、非关键场景

备选:Mycelium(Rust 实现,功能最丰富)

理由:唯一内置 SOCKS5 退出 + 消息总线 + HTTP API + 私有网络
适用:需要这些额外功能的场景(但生态太小)

共存方案

cjdns (主要覆盖网络,稳定)
  │
  ├── Conduit (人类聊天) ← Element 客户端
  ├── NATS (Agent 总线)
  └── Yggdrasil (测试/备用)
        │
        Mihomo (公共互联网 fallback)