kcptun-rust
基于 Rust 实现的 kcptun,使用 rust_tokio_kcp 和 smux_rust 库。
特性
- 基于 KCP 协议的快速隧道
- 支持多路复用 (SMUX)
- 支持多种加密算法
- 支持 FEC (前向纠错)
- 可配置的传输参数
- 客户端和服务端模式
构建
cargo build --release
使用方法
服务端
./target/release/kcptun-server -l :29900 -t 127.0.0.1:12948
./target/release/kcptun-server -c server.json
./target/release/kcptun-server \
--listen :29900 \
--target 127.0.0.1:12948 \
--key "your-secret-key" \
--crypt aes \
--mode fast3
客户端
./target/release/kcptun-client -l :12948 -r server-ip:29900
./target/release/kcptun-client -c client.json
./target/release/kcptun-client \
--localaddr :12948 \
--remoteaddr server-ip:29900 \
--key "your-secret-key" \
--crypt aes \
--mode fast3 \
--conn 4
配置文件示例
服务端配置 (server.json)
{
"listen": ":29900",
"target": "127.0.0.1:12948",
"key": "it's a secrect",
"crypt": "aes",
"mode": "fast",
"mtu": 1350,
"sndwnd": 1024,
"rcvwnd": 1024,
"datashard": 10,
"parityshard": 3,
"dscp": 0,
"nocomp": false,
"acknodelay": false,
"sockbuf": 4194304,
"smuxver": 2,
"smuxbuf": 4194304,
"framesize": 8192,
"streambuf": 2097152,
"keepalive": 10,
"quiet": false
}
客户端配置 (client.json)
{
"localaddr": ":12948",
"remoteaddr": "vps:29900",
"key": "it's a secrect",
"crypt": "aes",
"mode": "fast",
"conn": 1,
"autoexpire": 0,
"scavengettl": 600,
"mtu": 1350,
"sndwnd": 128,
"rcvwnd": 512,
"datashard": 10,
"parityshard": 3,
"dscp": 0,
"nocomp": false,
"acknodelay": false,
"sockbuf": 4194304,
"smuxver": 2,
"smuxbuf": 4194304,
"framesize": 8192,
"streambuf": 2097152,
"keepalive": 10,
"quiet": false
}
参数说明
模式 (mode)
normal: 正常模式
fast: 快速模式 (默认)
fast2: 更快速模式
fast3: 最快速模式
加密算法 (crypt)
✅ 已支持以下加密算法:
aes / aes-128: AES-128 加密 (默认,推荐)
aes-192: AES-192 加密
aes-256: AES-256 加密
tea: TEA 加密
xtea: XTEA 加密
xor / simple_xor: SimpleXOR 加密
blowfish: Blowfish 加密
cast5: CAST5 加密
3des / triple_des: 3DES 加密
twofish: Twofish 加密
salsa20: Salsa20 加密
sm4: SM4 国密算法
none / null: 不加密(不推荐)
所有加密算法都与 Go 版本 kcptun 兼容。
性能调优
MTU 设置
根据网络环境调整 MTU 值:
- 以太网: 1400-1500
- ADSL: 1400
- 3G/4G: 1200-1300
窗口大小
sndwnd: 发送窗口大小
rcvwnd: 接收窗口大小
增大窗口可以提高带宽利用率,但会增加内存使用。
FEC 参数
datashard: 数据分片数
parityshard: 校验分片数
FEC 可以在丢包环境下提高传输质量。
许可证
MIT License
测试
快速测试
运行基础功能测试:
./test_simple.sh
运行完整连接测试:
./test.sh
Rust 单元测试
cargo test
详细测试说明请参考 TESTING.md
参考
本项目参考了原始的 Go 版本 kcptun: https://github.com/xtaci/kcptun