WireGold
Wire Golang Guard = WireGold
[English](README.md) | 中文
## 概述
WireGold 是一个纯 Go 实现的第 3 层 VPN,灵感来自 WireGuard。
### 主要特性
- **加密**: XChaCha20-Poly1305 (AEAD) + Curve25519 密钥交换 + BLAKE2B 完整性校验
- **传输**: 支持 UDP / UDP-Lite / TCP / Raw IP / ICMP 多种底层传输
- **编码**: 可选 Base16384 编码以穿越文本过滤
- **抗审查**: XOR 掩码混淆报头 + 随机 MTU 放缩 + 可选双倍发包
- **压缩**: 可选 Zstd 数据压缩
- **NAT 穿透**: 内置 Hello/Query/Notify 协议实现 NAT 保活与穿透
- **路由转发**: 支持多跳转发 (TTL 递减) 与路由表管理
- **密钥集**: 支持 32 组预共享密钥混合,随机选择密钥索引
## 使用方法
> Windows 用户需将对应架构的 `wintun.dll` (位于 `lower/wintun/`) 放在可执行文件同目录下
> 高延迟有损链路建议配合 [UDPspeeder](https://github.com/wangyu-/UDPspeeder) 使用
```bash
wg [-c config.yaml] [-d|w] [-g] [-h] [-p] [-l log.txt]
```
#### 参数说明
```bash
-c string
指定配置文件 (默认 "config.yaml")
-d 输出调试日志
-g 生成密钥对
-h 显示帮助
-l string
将日志写入文件 (默认 "-")
-p 显示本机公钥
-pg
生成预共享密钥
-w 仅显示 warn 及以上级别日志
```
## 配置文件示例
- **macOS Mojave**: 最大 MTU (IPv4 endpoint) 为 `9159`
- **IPv6 endpoint**: 推荐 MTU `1280~1500`,避免大分片被丢弃
- **ICMP / Raw IP endpoint**: 使用裸 IP 地址,无需端口号 (如 `0.0.0.0`)。需要 root/管理员权限
```yaml
IP: 192.168.233.1
SubNet: 192.168.233.0/24
PrivateKey: 暲菉斂狧污爉窫擸紈卆帞蔩慈睠庮扝憚瞼縀
Network: udp # udp (默认), udplite, tcp, ip, icmp
EndPoint: 0.0.0.0:56789
MTU: 1504
SpeedLoop: 4096
MaxTTL: 64
Mask: 0x1234567890abcdef
Base14: true
Peers:
-
IP: "192.168.233.2"
PublicKey: 徯萃嵾爻燸攗窍褃冔蒔犡緇袿屿組待族砇嘀
PresharedKey: 瀸敀爅崾嘊嵜紼樴稍毯攣矐訷蟷扛嬋庩崛昀
EndPoint: 1.2.3.4:56789
AllowedIPs: ["192.168.233.2/32", "x192.168.233.3/32"]
KeepAliveSeconds: 0
QueryList: ["192.168.233.3"]
MTU: 1400
MTURandomRange: 128
UseZstd: true
QuerySeconds: 10
AllowTrans: true
-
IP: "192.168.233.3"
PublicKey: 牢喨粷詸衭譛浾蘹櫠砙杹蟫瑳叩刋橋経挵蘀
PresharedKey: 竅琚喫従痸告烈兇厕趭萨假蔛瀇譄施烸蝫瘀
EndPoint: ""
AllowedIPs: ["192.168.233.3/32", "y192.168.66.1/32"]
MTU: 752
DoublePacket: true
KeepAliveSeconds: 0
AllowTrans: false
```
### 配置字段说明
| 字段 | 说明 |
|------|------|
| `Network` | 传输协议: `udp` (默认), `udplite`, `tcp`, `ip`, `icmp` |
| `MaxTTL` | 发包初始 TTL,默认 `64` |
| `SpeedLoop` | 每收到 N 个包时输出一次吞吐统计,默认 `4096` |
| `AllowedIPs` | 前缀 `x` 表示只接受该网段报文但不建系统路由;前缀 `y` 表示只添加内部路由表条目 |
| `Mask` | XOR 掩码,用于混淆报头 |
| `Base14` | 启用 Base16384 编码 |
| `MTURandomRange` | 随机缩小 MTU 的范围 (只减不增),增加流量特征随机性 |
| `DoublePacket` | 双倍发包以对抗强丢包链路 |
| `KeepAliveSeconds` | NAT 保活间隔 (秒),0 为不保活 |
| `QueryList` | NAT 穿透时查询的对端 IP 列表 |
| `UseZstd` | 启用 Zstd 压缩 |
| `AllowTrans` | 是否允许为其他 Peer 转发流量 |
## 本地基准测试
> Mac Book Air M1,电池供电模式