Mygod/slipstream-rust
GitHub: Mygod/slipstream-rust
一个用Rust实现的高性能DNS隧道工具,通过DNS查询和响应封装传输QUIC数据包来建立隐蔽通信通道。
Stars: 361 | Forks: 99
# Slipstream (Rust)
Slipstream 是一个高性能的 DNS 隧道,通过 DNS 查询和响应传输 QUIC 数据包。
本仓库包含 [原始 C 实现](https://github.com/EndPositive/slipstream) 的 Rust 重写版本。
## 内容概览
- slipstream-client 和 slipstream-server CLI 可执行文件
- 带向量测试的 DNS 编解码器 crate
- picoquic FFI 集成,支持多路径 QUIC
- 基于 tokio 的完全异步实现
- 更多功能!有关最新功能列表,请查看 [已合并的 PR](https://github.com/Mygod/slipstream-rust/pulls?q=is%3Apr+is%3Amerged+label%3Aenhancement)。
## 快速开始(本地开发)
前置条件:
- Rust 工具链(stable)
- cmake, pkg-config
- OpenSSL 头文件和库
- python3(用于互操作和基准测试脚本)
初始化 picoquic 子模块:
```
git submodule update --init --recursive
```
`cargo build` 会当缺少库时通过 `./scripts/build_picoquic.sh` 自动构建 picoquic(输出到 `.picoquic-build/`)。设置 `PICOQUIC_AUTO_BUILD=0` 可禁用此功能,或参阅 `docs/build.md` 了解手动控制方式。
构建 Rust 可执行文件:
```
cargo build -p slipstream-client -p slipstream-server
```
生成测试 TLS 证书(可选示例):
```
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout key.pem -out cert.pem -days 365 \
-subj "/CN=slipstream"
```
运行服务器:
```
cargo run -p slipstream-server -- \
--dns-listen-port 8853 \
--target-address 127.0.0.1:5201 \
--domain example.com \
--cert ./cert.pem \
--key ./key.pem \
--reset-seed ./reset-seed
```
如果配置的证书/密钥路径不存在,服务器会自动生成自签名 ECDSA P-256 证书(有效期 1000 年)。如果省略 `--reset-seed`,服务器将发出警告,且无状态重置令牌不会在重启后保留。
运行客户端:
```
cargo run -p slipstream-client -- \
--tcp-listen-port 7000 \
--resolver 127.0.0.1:8853 \
--domain example.com
```
注意:也可以针对转发到服务器的解析器运行客户端。本地测试请参阅互操作文档。
## 生产环境注意:UDP/53 的 conntrack 配置
对于在端口 53 上运行的公共 `slipstream-server`,需要将 conntrack 调高至高于多数发行版的默认值。
建议的基准值:
```
net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_udp_timeout = 15
net.netfilter.nf_conntrack_udp_timeout_stream = 60
```
容量分级:
- 1 GB 内存:`131072`
- 2-4 GB 内存:`262144`
- 8 GB+ 内存:`524288`
保持稳态 `conntrack -C` 低于 `nf_conntrack_max` 的约 60%。
## 基准测试(本地快照)
以下所有结果均为端到端完成时间(秒),数值越低越好,在本地环回上运行 5 次取平均值。有效载荷:每个方向 10 MiB。
变体包括:dnstt、C-C slipstream、Rust-Rust(非认证)和 Rust-Rust(通过 `--authoritative ` 认证)。
有关获取这些结果所使用的脚本,请参阅 `scripts/bench`。
| 变体 | 泄露平均时间(s) | 下载平均时间(s) |
|--------------------------------------| ---: | ---: |
| dnstt | 16.207 | 2.492 |
| slipstream (C) | 5.332 | 1.096 |
| slipstream-rust | 3.249 | 0.978 |
| slipstream-rust (Authoritative mode) | 1.602 | 0.407 |

## 文档
- docs/README.md 文档索引
- docs/build.md 构建前置条件和 picoquic 设置
- docs/usage.md CLI 使用说明
- docs/protocol.md DNS 封装说明
- docs/dns-codec.md 编解码器行为和向量
- docs/interop.md 本地测试工具和互操作
- docs/benchmarks.md 基准测试工具
- docs/benchmarks-results.md 基准测试结果
- docs/profiling.md 性能分析说明
- docs/design.md 架构说明
## 仓库结构
- crates/ Rust 工作区 crates
- docs/ 公共文档和内部设计说明
- fixtures/ 黄金 DNS 向量
- scripts/ 互操作和基准测试工具
- tools/ 向量生成器和辅助工具
- vendor/ picoquic 子模块
## 许可证
Apache-2.0。详见 LICENSE。
标签:AGPLv3 许可证, C2通信, Covert Channel, DNS协议, DNS隧道, FFI集成, picoquic, QUIC协议, Rust, tokio异步, 加密通信, 协议隧道, 可视化界面, 多路径传输, 安全测试工具, 数据外泄, 网络信息收集, 网络安全, 网络流量审计, 通知系统, 隐私保护, 隐蔽信道, 高性能网络