dyber-pqc/DyberVPN
GitHub: dyber-pqc/DyberVPN
一款基于 Rust 的自托管后量子 VPN 与零信任网络访问平台,通过 NIST 标准化抗量子算法保护基础设施通信安全。
Stars: 1 | Forks: 0

# DyberVPN
**后量子 VPN 与零信任网络访问**
[](https://github.com/dyber-pqc/DyberVPN/actions/workflows/ci.yml)
[](https://github.com/dyber-pqc/DyberVPN/actions/workflows/desktop-ci.yml)
[](https://github.com/dyber-pqc/DyberVPN/actions/workflows/security-audit.yml)
[](LICENSE)
[](https://www.rust-lang.org/)
[](#testing)
DyberVPN 是一个开源、自托管的后量子 VPN 与零信任网络访问 (ZTNA) 平台,专为无法通过第三方云服务商路由流量的组织而构建。它实现了 NIST 标准化的后量子算法 (ML-KEM-768, ML-DSA-65),同时保持与 WireGuard 协议的兼容性,并添加了完整的 ZTNA 架构,包含云/自托管的 Broker、网络内部的 Connector 以及远程客户端 (Client) —— 从而无需在私有网络上配置入站防火墙规则。
## 状态
DyberVPN 支持在三种操作模式(classic、hybrid、pq-only)下使用 ML-DSA-65 签名的**完整后量子身份验证**,包含 Broker 中继、Connector 代理和 Client 访问的完整 **ZTNA 后端** —— 所有这些都具备逐包策略执行、密钥撤销和结构化审计日志记录 —— 以及使用 Tauri 构建的**跨平台桌面客户端**。目前已有 123 个测试在 6 个 crate 中通过。
## 功能
### 核心 VPN
- **后量子安全**:混合 ML-KEM-768 + X25519 密钥交换可防御“现在收集,以后解密”攻击
- **PQ 身份验证**:使用 ML-DSA-65 签名进行抗量子的双向身份验证(pq-only 模式)
- **符合 NIST 标准**:使用 FIPS 203 (ML-KEM) 和 FIPS 204 (ML-DSA) 标准化算法
- **兼容 WireGuard**:数据面采用标准 WireGuard 封装
- **自托管**:完全在您的基础设施上运行,零外部依赖
- **高性能**:使用 Rust 构建,从 Cloudflare 的 BoringTun 分支而来
- **多节点服务器**:具备分流功能的进程内点对点路由
- **热重载**:通过 SIGHUP 触发配置重载,且不会中断现有连接
- **自动化配置**:通过 Enrollment API 实现零接触节点接入
### 零信任网络访问 (ZTNA)
- **Broker 中继**:云或自托管的中继服务器,负责终结来自 Client 和 Connector 的 WireGuard 隧道,完全在用户空间执行会话缝合(解密 → 策略检查 → 重新加密)
- **Connector 代理**:部署在私有网络内部的轻量级代理,仅向 Broker 发起出站连接,并通告本地 CIDR 路由 —— 无需入站防火墙规则
- **Client 访问**:远程用户通过标准 WireGuard 握手连接到 Broker;Broker 根据最长前缀匹配的目标查询将流量路由到正确的 Connector
- **会话缝合**:Broker 解密来自一个节点 Tunn 的数据包,评估逐包策略,然后通过目标节点的 Tunn 重新加密 —— Broker 上无需 TUN 设备
- **服务注册表**:动态 CIDR 到 Connector 的映射,支持最长前缀匹配路由,并在 Connector 断开连接时自动清理
- **控制面**:基于 NDJSON-over-TCP 协议实现 Connector 注册、心跳保活和优雅断开连接
- **过期节点清理**:基于可配置的超时时间,自动清理闲置的 Client 和 Connector
### 企业级安全
- **零信任访问控制**:对每个数据包执行基于节点角色的策略执行(L3/L4 检测)
- **密钥撤销与生命周期**:CRL 管理、暂停、恢复、自动过期(可通过 `key_max_age_hours` 配置)
- **合规审计日志**:适用于 SOC 2、FedRAMP、HIPAA 的 NDJSON 结构化事件(支持 SIEM)
- **ML-DSA 双向身份验证**:在 hybrid/pq-only 模式下,对 Connector 注册进行后量子签名验证
- **撤销执行**:在 VPN 握手和 ZTNA Connector 注册阶段均会拒绝已撤销的密钥
- **设备安全状况评估**:检查操作系统版本、防火墙、磁盘加密、杀毒软件和屏幕锁定,并提供合规性评分
### 桌面客户端
- **跨平台**:单一代码库支持 Windows (.exe/.msi)、macOS (.dmg)、Linux (.deb/.AppImage)
- **隧道管理**:导入 TOML 配置,支持连接/断开,并显示实时流量统计、运行时间和延迟
- **密钥生成界面**:一键生成 hybrid、PQ-only 或 classic 密钥对
- **设置仪表板**:Kill switch、DNS 泄露保护、分流、MTU/端口配置、加密模式选择
- **集中管理**:设备注册、密钥撤销/暂停、合规审计日志查看器
- **设备安全状况**:实时操作系统安全评估(防火墙、加密、杀毒软件)
- **系统托盘**:最小化到托盘,双击恢复,快速连接/断开
- **单实例**:防止重复启动应用程序
- **自动连接**:可选择在应用启动时自动连接
- **优雅关闭**:退出时干净地拆除所有隧道
- **演示模式**:无需 Tauri 后端即可在任何浏览器中运行完整的 UI 进行开发
## 快速开始
### 安装
```
# 克隆和构建
git clone https://github.com/dyber-pqc/DyberVPN.git
cd dybervpn
cargo build --release
# 安装(可选)
sudo cp target/release/dybervpn /usr/local/bin/
```
### 生成密钥
```
# 生成混合(ML-KEM + X25519)密钥对
dybervpn genkey -m hybrid
# 生成纯 PQ(ML-KEM + ML-DSA)密钥对
dybervpn genkey -m pqonly
```
### 服务器设置
创建 `server.toml`:
```
[interface]
name = "dvpn0"
listen_port = 51820
address = "10.200.200.1/24"
mode = "pqonly" # or "hybrid" for Ed25519 auth
private_key = ""
pq_private_key = ""
mldsa_private_key = "" # Required for pqonly mode
[[peer]]
public_key = ""
pq_public_key = ""
mldsa_public_key = "" # Required for pqonly mode
allowed_ips = "10.200.200.2/32"
```
启动服务器:
```
sudo dybervpn up -c server.toml -f
```
### 客户端设置
创建 `client.toml`:
```
[interface]
name = "dvpn1"
address = "10.200.200.2/24"
mode = "pqonly"
private_key = ""
pq_private_key = ""
mldsa_private_key = ""
[[peer]]
public_key = ""
pq_public_key = ""
mldsa_public_key = ""
allowed_ips = "10.200.200.0/24"
endpoint = "server_ip:51820"
persistent_keepalive = 25
```
连接:
```
sudo dybervpn up -c client.toml -f
```
### 测试连通性
```
ping 10.200.200.1 # From client to server
```
## ZTNA 设置
DyberVPN 的零信任网络访问模式使用三个组件:
```
Client ──(outbound)──> Broker <──(outbound)── Connector
│ │
Policy Engine Private Network
Audit Logger (10.1.0.0/16)
```
### Broker 设置
创建 `broker.toml`:
```
[broker]
listen_udp = "0.0.0.0:51820"
listen_control = "0.0.0.0:51821"
private_key = ""
mode = "hybrid"
max_clients = 1000
session_timeout_secs = 300
heartbeat_timeout_secs = 120
[access_control]
enabled = true
default_action = "deny"
[security]
crl_path = "/etc/dybervpn/revoked-keys.json"
[audit]
enabled = true
path = "/var/log/dybervpn/broker-audit.jsonl"
```
启动 Broker:
```
dybervpn broker -c broker.toml
```
### Connector 设置
创建 `connector.toml`:
```
[interface]
name = "dvpn-conn0"
mode = "hybrid"
private_key = ""
pq_private_key = ""
[connector]
broker_endpoint = "broker.example.com:51820"
broker_control = "broker.example.com:51821"
broker_public_key = ""
advertised_routes = ["10.1.0.0/16", "192.168.1.0/24"]
service_name = "corp-network"
heartbeat_interval = 30
```
启动 Connector:
```
dybervpn connect -c connector.toml
```
Connector 仅发起出站连接 —— 无需入站防火墙规则。
### Client 访问
客户端使用标准的 WireGuard 配置连接到 Broker,并将 Broker 作为它们的节点。Broker 会根据目标 IP 透明地将流量路由到正确的 Connector。
## 操作模式
| 模式 | 密钥交换 | 身份验证 | 适用场景 |
|------|--------------|----------------|----------|
| `hybrid`(默认) | ML-KEM-768 + X25519 | Ed25519 | 生产环境 — 纵深防御 |
| `pqonly` | ML-KEM-768 + X25519 | ML-DSA-65 | 最高级别的抗量子能力 |
| `classic` | X25519 | Ed25519 | WireGuard 兼容性 |
## CLI 参考
```
# Core VPN
dybervpn genkey -m # Generate key pairs (hybrid, pqonly, classic)
dybervpn up -c -f # Start VPN tunnel (foreground)
dybervpn up -c # Start VPN tunnel (daemon)
dybervpn down # Stop VPN tunnel
dybervpn status # Show tunnel status
dybervpn check -c # Validate configuration
dybervpn version # Show version and crypto info
dybervpn benchmark -i 100 # Run crypto benchmarks
dybervpn self-test # Run FIPS crypto self-tests
dybervpn reload # Hot-reload config and CRL
# ZTNA
dybervpn broker -c broker.toml # Start ZTNA Broker relay
dybervpn connect -c connector.toml # Start Connector agent
# Peer 管理
dybervpn add-peer -c -n -k -a
dybervpn remove-peer -c -p
dybervpn list-peers -c
dybervpn enroll -c -t # Automated provisioning
# Key 生命周期
dybervpn revoke-key -c -p -r
dybervpn suspend-key -c -p -e 24h
dybervpn reinstate-key -c -p
dybervpn list-revoked -c [--json]
# ML-DSA 签名
dybervpn sign-keygen -m pqonly # Generate ML-DSA key pair
dybervpn sign -k -m # Sign a message
dybervpn verify -k -m -s # Verify signature
```
## 企业级功能
DyberVPN 包含三项专为受监管环境设计的企业级安全功能:
| 功能 | 配置部分 | 目的 |
|---------|---------------|---------|
| **零信任访问控制** | `[access_control]` | 对每个数据包执行基于节点的策略 |
| **密钥生命周期管理** | `[security]` | 撤销、暂停、过期、轮换 |
| **结构化审计日志** | `[audit]` | 用于 SOC 2 / FedRAMP / HIPAA 的 NDJSON 事件 |
```
# 在 server.toml 中启用:
[access_control]
enabled = true
default_action = "deny" # Zero Trust
[security]
crl_path = "/etc/dybervpn/revoked-keys.json"
[audit]
enabled = true
path = "/var/log/dybervpn/audit.jsonl"
```
有关完整的文档、合规性映射和示例配置,请参阅 `docs/enterprise-features.md`。
## 性能
在典型硬件上的基准测试(release 构建):
| 算法 | 操作 | 时间 |
|------------|-----------|---------|
| ML-KEM-768 | keygen | ~88 µs |
| ML-KEM-768 | encaps | ~77 µs |
| ML-KEM-768 | decaps | ~91 µs |
| ML-DSA-65 | keygen | ~291 µs |
| ML-DSA-65 | sign | ~328 µs |
| ML-DSA-65 | verify | ~166 µs |
| X25519 | DH | ~45 µs |
| Ed25519 | sign | ~29 µs |
| Ed25519 | verify | ~31 µs |
**完整混合握手:~250-300 µs**
**完整 PQ-only 握手:~2-3 ms**(包含 ML-DSA 签名)
## 测试
所有 123 个测试在 6 个 crate 中通过:
```
cargo test --release --all
# 结果:
# boringtun: 37 个通过(PQ handshake, ML-DSA auth, tunnel 测试)
# dybervpn-protocol: 15 个通过 + 1 个文档测试
# dybervpn-tunnel: 2 个通过
# dybervpn-broker: 16 个通过(ZTNA 集成测试)
# dybervpn-cli: 49 个通过(CLI + 企业功能测试)
# dybervpn-metrics: 3 个通过
```
关键测试领域:
- **PQ-only 模式**:隧道创建、握手发起、完整的双向 ML-DSA 身份验证、数据传输、无效签名拒绝
- **ZTNA Broker**:Connector 注册/心跳、拒绝已撤销节点、会话缝合、策略拒绝、多 Connector 路由、过期节点清理、配置解析
- **企业级**:策略引擎规则、CRL 撤销/暂停/恢复、审计事件记录、热重载
## 架构
### 点对点 VPN
```
┌───────────────────────────────────────────────────────┐
│ DyberVPN Node │
│ ┌───────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │ TUN/TAP │ │ PQ Handshake │ │ WireGuard │ │
│ │ Interface │──│ Engine │──│ Data Plane │ │
│ │ │ │ (ML-KEM + │ │ (ChaCha20- │ │
│ │ │ │ ML-DSA) │ │ Poly1305) │ │
│ └───────────┘ └───────────────┘ └───────────────┘ │
│ │ │
│ ┌─────────────┐ ┌────┴────────┐ ┌───────────────┐ │
│ │ Policy │ │ Crypto │ │ Audit Logger │ │
│ │ Engine │ │ ml-kem/dsa │ │ (NDJSON) │ │
│ │ (L3/L4) │ │ x25519/ed │ │ │ │
│ └─────────────┘ └─────────────┘ └───────────────┘ │
└───────────────────────────────────────────────────────┘
```
### ZTNA(Broker 模式)
```
┌──────────┐ ┌────────────────────────────────┐ ┌──────────────┐
│ Client │ UDP │ Broker │ UDP │ Connector │
│ │────────>│ │<────────│ │
│ Tunn(C↔B)│ │ Tunn(C) Tunn(Conn) │ │ Tunn(Conn↔B) │
└──────────┘ │ │ │ │ └──────┬───────┘
│ ▼ ▼ │ │
│ Decrypt → Policy → Re-encrypt │ Private Network
│ Engine │ (10.1.0.0/16)
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Service │ │ Revocation │ │
│ │ Registry │ │ Engine │ │
│ │ (CIDR→Conn)│ │ (CRL) │ │
│ └────────────┘ └────────────┘ │
│ │
│ TCP Control Plane (NDJSON) │
│ ├─ Register / RegisterAck │
│ ├─ Heartbeat / HeartbeatAck │
│ └─ Disconnect │
└────────────────────────────────┘
```
## 安全模型
- **混合密钥交换**:必须同时破解 ML-KEM-768 和 X25519 才能破坏机密性
- **PQ 身份验证**:ML-DSA-65 签名提供抗量子的节点身份验证
- **纵深防御**:如果 PQ 算法存在未发现的弱点,经典算法可提供后备支持
- **前向保密**:每次握手都会生成临时密钥
- **符合 CNSA 2.0**:算法选择满足 NSA 商业国家安全算法套件 2.0 的要求
- **零信任**:没有隐式信任 —— 每个数据包在转发前都会在 Broker 处进行策略评估
- **无需入站防火墙规则**:Connector 和 Client 均向 Broker 发起出站连接
- **会话缝合隔离**:Client 和 Connector 之间的流量会在 Broker 处被解密、检查并重新加密 —— 双方各自拥有独立的 WireGuard 会话
- **重放保护**:ML-DSA 注册签名包含时间戳,并在 300 秒的窗口内进行验证
## 项目结构
```
dybervpn/
├── crates/
│ ├── dybervpn-protocol/ # Core crypto, types, config parsing
│ ├── dybervpn-tunnel/ # TUN device, daemon, event loop, connector mode
│ │ └── src/
│ │ ├── daemon.rs # Daemon with VPN + Connector modes
│ │ ├── connector.rs # Connector agent (control plane client)
│ │ ├── policy.rs # L3/L4 policy engine + packet inspection
│ │ ├── revocation.rs # CRL-based key revocation
│ │ └── audit.rs # NDJSON structured audit logger
│ ├── dybervpn-broker/ # ZTNA Broker relay server
│ │ └── src/
│ │ ├── broker.rs # Main async event loop (UDP + session stitching)
│ │ ├── control.rs # TCP control plane (Connector registration)
│ │ ├── session.rs # Session stitching (decrypt → policy → re-encrypt)
│ │ ├── registry.rs # Service registry (CIDR → Connector routing)
│ │ ├── peer.rs # BrokerPeer management (Client/Connector)
│ │ ├── auth.rs # ML-DSA signature verification
│ │ ├── config.rs # BrokerConfig + TOML parsing
│ │ └── error.rs # Error types
│ ├── dybervpn-cli/ # Command-line interface (all subcommands)
│ └── dybervpn-metrics/ # Prometheus metrics
├── boringtun/ # Forked WireGuard + PQ extensions
│ └── src/noise/
│ ├── mod.rs # Tunn (encapsulate/decapsulate)
│ ├── handshake.rs # Classical Noise handshake
│ ├── hybrid_handshake.rs # ML-KEM/ML-DSA types
│ └── hybrid_integration.rs # PQ state machines
├── desktop/ # Tauri desktop client
│ ├── src/ # React frontend (JSX, CSS modules)
│ │ ├── pages/ # Tunnels, Keys, Settings, About
│ │ ├── components/ # 15+ reusable UI components
│ │ ├── hooks/ # useUptime, useTraffic
│ │ └── lib/ # Tauri invoke bridge, persistent store
│ └── src-tauri/ # Rust backend (Tauri 2.0)
│ └── src/main.rs # 20+ Tauri commands, system tray, stats emitter
├── deploy/
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── dybervpn.service # systemd unit
│ └── install.sh
└── test-configs/
├── pqonly-server.toml # Example PQ-only server
└── pqonly-client.toml # Example PQ-only client
```
## 从源码构建
### 环境要求
- Rust 1.75+
- Node.js 20+(用于桌面客户端)
- Linux、macOS 或 Windows
- 需要 Root/sudo 权限以创建 TUN 设备 (CLI)
### 构建 CLI
```
cargo build --release
```
### 构建桌面应用
```
cd desktop
npm install
npm run tauri build
```
安装程序将输出到 `desktop/src-tauri/target/release/bundle/`。
### 在开发环境中运行桌面应用
```
cd desktop
npm run tauri dev
```
### 运行测试
```
cargo test --release --all
```
## 部署
### systemd
```
sudo cp deploy/dybervpn.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dybervpn
sudo systemctl start dybervpn
```
### Docker
```
docker build -t dybervpn:latest -f deploy/Dockerfile .
docker-compose -f deploy/docker-compose.yml up -d
```
## 企业级安全
DyberVPN 包含用于生产部署的企业安全功能,适用于点对点 VPN 和 ZTNA Broker 模式:
```
# Zero Trust — 默认拒绝,按角色允许
[access_control]
enabled = true
default_action = "deny"
# Key 生命周期 — CRL、自动过期、强制轮换
[security]
crl_path = "/etc/dybervpn/revoked-keys.json"
key_max_age_hours = 720
# 审计 — 用于 SIEM 摄取的 NDJSON 事件
[audit]
enabled = true
path = "/var/log/dybervpn/audit.jsonl"
events = ["connection", "handshake", "policy", "key_management", "admin"]
```
在 ZTNA 模式下,这些功能在 Broker 上运行:
- **策略引擎**在转发前检查每个缝合的数据包(源/目标 IP、协议、端口)
- **撤销引擎**拒绝来自已撤销密钥的 VPN 握手和 Connector 注册
- **审计记录器**记录所有 Broker 事件,包括 Connector 注册、Client 连接、策略决策和会话缝合
密钥管理 CLI:
```
dybervpn revoke-key -c server.toml -p alice -r employee_departed -b admin@co.com
dybervpn suspend-key -c server.toml -p bob -e 24h
dybervpn reinstate-key -c server.toml -p bob
dybervpn list-revoked -c server.toml --json
```
完整文档:[docs/enterprise-security.md](docs/enterprise-security.md)
## 合规性
- **NIST FIPS 203**:ML-KEM(基于模块格的密钥封装机制)
- **NIST FIPS 204**:ML-DSA(基于模块格的数字签名算法)
- **CNSA 2.0**:NSA 商业国家安全算法套件 2.0
- **SOC 2**:结构化审计日志 (CC6.1, CC6.2, CC6.3, CC7.2)
- **FedRAMP**:访问控制 + 审计跟踪 (AC-2, AC-3, AU-2, AU-3)
- **HIPAA**:访问控制 + 审计控制 (§164.312)
## 路线图
- [x] 混合 ML-KEM-768 + X25519 密钥交换
- [x] ML-DSA-65 签支持
- [x] 完整的 ML-DSA 握手身份验证(pq-only 模式)
- [x] 包含 genkey、up、down、status、check 的 CLI
- [x] PID 文件管理和守护进程化
- [x] 从 TOML 配置加载 ML-DSA 密钥
- [x] 零信任访问控制(基于节点的策略引擎)
- [x] 密钥撤销与暂停生命周期管理
- [x] 结构化审计日志(NDJSON,SOC 2 / FedRAMP / HIPAA)
- [x] 具备点对点转发的多节点服务器
- [x] 针对配置和 CRL 更改的热重载
- [x] 用于自动化配置的 Enrollment API
- [x] 具备会话缝合的 ZTNA Broker 中继
- [x] 具备仅出站控制面的 Connector 代理
- [x] 具备最长前缀匹配路由的服务注册表
- [x] 用于 Connector 注册的 ML-DSA 双向身份验证
- [x] 具有可配置超时的过期节点清理
- [x] 通过 WireGuard 握手解析提取 Client 身份
- [x] 通过学习到的 IP 映射进行反向路由
- [x] 具备完整企业子系统集成的 Broker CLI 命令
- [x] 带有系统托盘、自动连接和集中管理功能的 Tauri 桌面应用
- [x] 跨平台桌面构建
- [x] 设备安全状况评估与合规性评分
- [x] 使用 GitHub Actions 的 CI/CD(后端、桌面、基准测试、安全审计)
- [x] 带有 GHCR 发布的 Docker 多阶段构建
- [ ] QUAC 100 硬件加速
- [ ] FIPS 140-3 验证的加密模块
- [ ] iOS/Android 客户端
## 许可证
- **新代码**:Apache 2.0
- **BoringTun 派生代码**:BSD-3-Clause
WireGuard® 是 Jason A. Donenfeld 的注册商标。DyberVPN 未获得 Jason A. Donenfeld 的赞助或认可。
## 贡献
欢迎贡献!请阅读我们的贡献指南并提交 pull request。
## 支持
- GitHub Issues:错误报告和功能请求
- 安全问题:security@dyber.org(用于负责任的漏洞披露)
标签:Rust, VPN, WireGuard, 可视化界面, 后量子密码学, 网络安全, 网络流量审计, 通知系统, 隐私保护, 零信任网络