|
@@ -0,0 +1,204 @@
|
|
|
|
|
+# mynetspeeder
|
|
|
|
|
+
|
|
|
|
|
+`mynetspeeder` 现在支持 **透明接管当前服务器的 `direct` TCP 出站**。
|
|
|
|
|
+
|
|
|
|
|
+目标场景:
|
|
|
|
|
+
|
|
|
|
|
+- 你本机继续通过 `sing-box` 的 `hy2 19887/19888` 入站使用外网
|
|
|
|
|
+- `sing-box` 出站仍然保持 `direct`
|
|
|
|
|
+- `mynetspeeder` 在系统层透明接管这些 `direct` TCP 流量
|
|
|
|
|
+- 当前主 VPS 直接出站可立即工作
|
|
|
|
|
+- 配置的子节点 VPS 会自动连接并参与竞速
|
|
|
|
|
+- 子节点不在线时,不影响当前主 VPS 直接使用
|
|
|
|
|
+
|
|
|
|
|
+## 当前能力
|
|
|
|
|
+
|
|
|
|
|
+- `relay`:子节点 VPS 中继
|
|
|
|
|
+- `edge`:主 VPS 透明接管 `direct` TCP 出站
|
|
|
|
|
+- `probe`:查看节点探测与在线状态
|
|
|
|
|
+- 主 VPS 本地直连始终可用
|
|
|
|
|
+- 子节点可选,多节点在线时自动参与冗余竞速
|
|
|
|
|
+- 一键启停脚本:透明接管 `OUTPUT` 链中的 TCP 连接
|
|
|
|
|
+
|
|
|
|
|
+## 重要说明
|
|
|
|
|
+
|
|
|
|
|
+- 当前透明模式先实现的是 **TCP**
|
|
|
|
|
+- UDP 冗余框架保留在协议设计里,但这版未做透明 UDP 接管
|
|
|
|
|
+- 这是为了先让你现有视频、网页、下载这类 TCP 场景可直接用起来
|
|
|
|
|
+
|
|
|
|
|
+## 配置文件
|
|
|
|
|
+
|
|
|
|
|
+示例 `/home/mynetspeeder/config.json`:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "strategy": "top2",
|
|
|
|
|
+ "redundancy": 2,
|
|
|
|
|
+ "tcp_warmup_bytes": 65536,
|
|
|
|
|
+ "probe_interval": 15,
|
|
|
|
|
+ "relays": [
|
|
|
|
|
+ {"name": "hk1", "host": "1.2.3.4", "port": 9009, "token": "demo", "weight": 100},
|
|
|
|
|
+ {"name": "jp1", "host": "5.6.7.8", "port": 9009, "token": "demo", "weight": 95}
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+说明:
|
|
|
|
|
+
|
|
|
|
|
+- `relays` 可以为空,空时只走当前主 VPS 直接出站
|
|
|
|
|
+- 子节点启动后会自动连上并参与竞速
|
|
|
|
|
+- 子节点没启动时不会影响使用
|
|
|
|
|
+
|
|
|
|
|
+## 子节点一键安装
|
|
|
|
|
+
|
|
|
|
|
+把项目目录复制到子节点后,直接执行:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/install.sh /opt/mynetspeeder
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+安装完成后可直接使用全局命令:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+mynetspeeder --help
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+子节点启动 relay:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /opt/mynetspeeder/scripts/start-relay.sh 你的token
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+子节点停止 relay:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /opt/mynetspeeder/scripts/stop-relay.sh
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 启动方式
|
|
|
|
|
+
|
|
|
|
|
+### 1. 子节点 VPS
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+python3 -m mynetspeeder relay --listen-port 9009 --token demo
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2. 当前主 VPS
|
|
|
|
|
+
|
|
|
|
|
+准备配置:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+cp /home/mynetspeeder/demo-config.json /home/mynetspeeder/config.json
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+启动透明接管:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/start-transparent.sh --capture-uid <sing-box运行UID> /home/mynetspeeder/config.json
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+停止透明接管:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/stop-transparent.sh
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+查看节点状态:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+python3 -m mynetspeeder probe --config /home/mynetspeeder/config.json --once
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 工作方式
|
|
|
|
|
+
|
|
|
|
|
+透明模式启动后:
|
|
|
|
|
+
|
|
|
|
|
+- 不需要改 `sing-box` 的 `direct` 出站配置
|
|
|
|
|
+- `iptables` 会把系统的 TCP 出站重定向到 `mynetspeeder edge`
|
|
|
|
|
+- `edge` 会同时尝试:
|
|
|
|
|
+ - 当前主 VPS 直接连目标
|
|
|
|
|
+ - 若干在线子节点 relay 代为连接目标
|
|
|
|
|
+- 前 `tcp_warmup_bytes` 的上行数据会并发发给所有候选路径
|
|
|
|
|
+- 谁先回下行数据,谁成为胜出路径
|
|
|
|
|
+- 其它路径会关闭
|
|
|
|
|
+
|
|
|
|
|
+## 一键脚本说明
|
|
|
|
|
+
|
|
|
|
|
+`start-transparent.sh` 会自动:
|
|
|
|
|
+
|
|
|
|
|
+- 只接管指定 UID 的 TCP 出站,避免影响整机连接
|
|
|
|
|
+
|
|
|
|
|
+- 创建运行用户 `mynetspeeder`
|
|
|
|
|
+- 以该用户启动 `edge`
|
|
|
|
|
+- 自动排除:
|
|
|
|
|
+ - `127.0.0.0/8`
|
|
|
|
|
+ - 所有 relay IP
|
|
|
|
|
+ - `mynetspeeder` 自己发起的连接
|
|
|
|
|
+- 接管全局 `OUTPUT` 的 TCP 出站流量
|
|
|
|
|
+
|
|
|
|
|
+## 现有限制
|
|
|
|
|
+
|
|
|
|
|
+- 透明接管当前只支持 IPv4 TCP
|
|
|
|
|
+- 当前未实现透明 UDP
|
|
|
|
|
+- `iptables` 规则是全局级别,除 `mynetspeeder` 自己和 relay IP 外,其他本机 TCP 流量也会被接管
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+## 当前服务器用法
|
|
|
|
|
+
|
|
|
|
|
+当前服务器已将 `sing-box` 改为 `singbox` 用户运行,因此透明接管请直接使用:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/start-transparent.sh --capture-uid $(id -u singbox) /home/mynetspeeder/config.json
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+停止:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/stop-transparent.sh
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+## IPv6 与 UDP
|
|
|
|
|
+
|
|
|
|
|
+当前版本新增:
|
|
|
|
|
+
|
|
|
|
|
+- IPv6 透明 TCP 接管
|
|
|
|
|
+- UDP 透明接管基础版
|
|
|
|
|
+- `iptables` + `ip6tables` 的 TCP/UDP REDIRECT 规则
|
|
|
|
|
+
|
|
|
|
|
+说明:
|
|
|
|
|
+
|
|
|
|
|
+- UDP 透明接管已支持基础转发,但实际效果仍依赖目标协议和内核行为
|
|
|
|
|
+- 如遇特定 UDP/QUIC 场景异常,优先先验证 TCP 是否正常
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+## 当前状态
|
|
|
|
|
+
|
|
|
|
|
+当前版本已支持:
|
|
|
|
|
+
|
|
|
|
|
+- `singbox` 用户的透明 TCP 接管
|
|
|
|
|
+- IPv4 / IPv6 TCP 透明监听
|
|
|
|
|
+- IPv4 / IPv6 UDP 透明监听基础版
|
|
|
|
|
+- 无 relay 时自动只走当前主机 `direct`
|
|
|
|
|
+
|
|
|
|
|
+推荐启动命令:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/start-transparent.sh --capture-uid 996 /home/mynetspeeder/config.json
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+## UDP 说明
|
|
|
|
|
+
|
|
|
|
|
+当前已发现 UDP 透明接管在部分环境下会产生自环(例如日志里目标变成 `127.0.0.1:19080`)。
|
|
|
|
|
+
|
|
|
|
|
+因此当前默认:
|
|
|
|
|
+
|
|
|
|
|
+- 只启用 TCP 透明接管
|
|
|
|
|
+- UDP 透明接管默认关闭
|
|
|
|
|
+
|
|
|
|
|
+如果你要实验 UDP,再显式加:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo /home/mynetspeeder/scripts/start-transparent.sh --enable-udp --capture-uid 996 /home/mynetspeeder/config.json
|
|
|
|
|
+```
|