vvaths/coop-mesh-vpn
GitHub: vvaths/coop-mesh-vpn
一个用 Rust 从零构建的受 Tailscale 启发、支持 WireGuard 与 DERP 回退的开源 Mesh VPN 演示项目。
Stars: 0 | Forks: 0
# Coop — 开源 Mesh VPN
[](LICENSE)
[](https://www.rust-lang.org/)
Coop 是一个受 [Tailscale](https://tailscale.com) 启发、用 Rust 从零开始构建的开源 Mesh VPN。它在设备之间创建加密的点对点 WireGuard 隧道,并支持 NAT 穿透和 DERP 中继回退。
## 功能特性
- **WireGuard 隧道** — 通过 [boringtun](https://github.com/cloudflare/boringtun) 实现用户态 WireGuard
- **点对点 Mesh** — 节点之间的直接加密连接
- **NAT 穿透** — 基于 STUN 的候选收集 + UDP 洞穿
- **DERP 中继回退** — 直接连接失败时的基于 WebSocket 的加密中继
- **协调服务器** — 用于节点注册、密钥交换和 IP 分配的 REST API
- **Web 仪表板** — 显示已连接节点的 Next.js 管理控制台
- **Overlay 网络** — 使用 100.64.0.0/10 CGNAT 范围
## 架构
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ coop-agent │ │ coop-agent │ │ coop-agent │
│ (Node A) │◄───►│ (Node B) │◄───►│ (Node C) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
│ WireGuard P2P tunnels (direct) │
│ or via DERP relay │
│ │ │
└────────┬───────────┴───────────┬────────┘
│ │
┌──────▼──────┐ ┌───────▼──────┐
│ coop-coord │ │ coop-derp │
│ (control) │ │ (relay) │
└─────────────┘ └──────────────┘
```
### Crates
| Crate | 描述 |
|-------|-------------|
| `coop-proto` | 共享类型、协议定义与常量 |
| `coop-crypto` | 密钥生成(Curve25519)、Noise 协议辅助 |
| `coop-core` | WireGuard 隧道管理、TUN 接口 |
| `coop-nat` | STUN 客户端、候选收集、UDP 洞穿 |
| `coop-derp-server` | DERP 中继服务器(基于 WebSocket) |
| `coop-derp-client` | DERP 客户端库 |
| `coop-coord` | 协调服务器(REST API + PostgreSQL) |
| `coop-agent` | 负责协调一切的 CLI 守护进程 |
## 前置条件
- **Rust** 工具链(2024 版本):`rustup`
- **Docker** + Docker Compose(用于 PostgreSQL)
- **Node.js** 20+(用于 Web 仪表板)
## 快速开始
### 1. 克隆仓库
```
git clone https://github.com/vvaths/coop-mesh-vpn.git
cd coop-mesh-vpn
```
### 2. 启动数据库
```
docker compose up -d postgres
```
### 3. 运行协调服务器
```
export DATABASE_URL=postgres://coop:coop_dev_password@localhost:5432/coop
cargo run -p coop-coord
```
### 4. 运行 DERP 中继
```
cargo run -p coop-derp-server
```
### 5. 连接一个节点
```
# Requires root/admin for TUN device creation
sudo cargo run -p coop-agent -- up --coord-url http://localhost:8443
```
### 6. (可选)启动 Web 仪表板
```
cd web
npm install
npm run dev
```
打开 [http://localhost:3000](http://localhost:3000) 查看已连接节点。
## 构建
```
# Check all crates compile
cargo check --workspace
# Run all tests
cargo test --workspace
# Lint
cargo clippy --workspace
# Build release binaries
cargo build --release --workspace
```
## Docker
使用 Docker Compose 运行完整堆栈:
```
docker compose up -d
```
这会启动 PostgreSQL、协调服务器和 DERP 中继。
## 技术栈
- **语言**:Rust(2024 版本)搭配 Tokio 异步运行时
- **WireGuard**:`boringtun`(用户态)
- **噪声协议**:`snow` 用于 Noise_IKpsk2 握手
- **加密**:`x25519-dalek`、`chacha20poly1305`、`blake2`
- **Web 框架**:`axum` 0.8
- **数据库**:通过 `sqlx` 使用 PostgreSQL
- **前端**:Next.js 15 + TypeScript + Tailwind CSS
## 设计决策
- **私钥永不离开设备** — 在本地生成并存储在 `~/.coop/`
- **Overlay IP** 使用 100.64.0.0/10 CGNAT 范围(与 Tailscale 相同)
- **DERP 协议** 使用 JSON-over-WebSocket 以保持简洁
- **MVP 中无认证** — 演示用途使用共享密钥
## 项目状态
这是一个展示 Mesh VPN 内部工作原理的教育/演示项目,尚未达到生产就绪状态。
## 贡献
欢迎贡献!请参考 [CONTRIBUTING.md](CONTRIBUTING.md) 获取指南。
## 许可证
本项目采用 MIT 许可证 — 详情参见 [LICENSE](LICENSE) 文件。
标签:100.64.0.0/10, boringtun, CGNAT, DERP, IP 分配, Mesh VPN, NAT 穿透, P2P, REST API, Rust, STUN, Tailscale, UDP hole punching, Web 仪表盘, WireGuard, 中继转发, 加密隧道, 协同服务器, 可视化界面, 多节点 mesh, 密钥交换, 开源, 测试用例, 点对点, 管理控制台, 网络安全, 网络流量审计, 节点注册, 覆盖网络, 远程访问, 通知系统, 隐私保护, 零配置