# 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 默认关闭,需要显式开启 - 这是为了先让你现有视频、网页、下载这类 TCP 场景可直接用起来 - 开启 UDP 时,脚本会自动放行 `ESTABLISHED,RELATED` 回包,避免本机入站/回包再次被 `OUTPUT` 重定向到 `19080` 形成自环 ## 配置文件 示例 `/home/mynetspeeder/config.json`: ```json { "strategy": "top3", "redundancy": 3, "direct_redundancy": 2, "direct_max_redundancy": 3, "direct_redundancy_v6": 3, "tcp_warmup_bytes": 1048576, "tcp_loser_grace_ms": 1500, "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 --kernel auto --capture-uid /home/mynetspeeder/config.json ``` 不指定 `--capture-uid` 时,默认接管所有用户发起的流量: ```bash sudo /home/mynetspeeder/scripts/start-transparent.sh /home/mynetspeeder/config.json ``` 停止透明接管: ```bash sudo /home/mynetspeeder/scripts/stop-transparent.sh ``` 查看节点状态: ```bash python3 -m mynetspeeder probe --config /home/mynetspeeder/config.json --once ``` 汇总透明模式胜率: ```bash python3 -m mynetspeeder summary --log-file /var/log/mynetspeeder-edge.log ``` ## Ubuntu 20 / 24 内核模式 当前版本新增 `--kernel auto|20|24`: - `auto`:默认,根据系统自动判断 - `20`:更保守的兼容模式 - `24`:更积极的 Ubuntu 24 优化模式 Ubuntu 24 模式会额外: - 打印 `iptables` 后端类型(`nf_tables` / `legacy`) - 启动后执行规则自检 - 自动缩短 direct / relay 建连超时 - 启用更积极的 `happy eyeballs` 建连参数 如需手动指定: ```bash sudo /home/mynetspeeder/scripts/start-transparent.sh --kernel 24 --capture-uid $(id -u singbox) /home/mynetspeeder/config.json ``` 配置文件还支持: ```json { "kernel_mode": "auto", "direct_open_timeout": 6.0, "relay_open_timeout": 6.0, "tcp_connect_happy_eyeballs_delay": 0.25, "relay_reconnect_delay": 3.0, "relay_tcp_nodelay": true } ``` ## 单机增强 direct 竞速 当前版本新增更激进的主节点 `direct` 冗余能力,默认保持 relay 逻辑不变: - `direct_redundancy`:默认 direct 并发连接数 - `direct_max_redundancy`:当某目标或某地址族近期更偏向 relay 胜出时,允许自动放大到的最大 direct 并发数 - `direct_redundancy_v4`:可单独指定 IPv4 目标的 direct 并发数 - `direct_redundancy_v6`:可单独指定 IPv6 目标的 direct 并发数 示例: ```json { "direct_redundancy": 2, "direct_max_redundancy": 3, "direct_redundancy_v4": 2, "direct_redundancy_v6": 3 } ``` 说明: - 同一目标会同时发起多条 `direct` 连接 - 谁先拿到有效下行,谁成为 winner - 其他 `direct` 副本会按现有 `tcp_loser_grace_ms` 延迟关闭 - 若某个目标或某个地址族近期经常是 relay 胜出,主节点会自动把该目标的 direct 冗余数提升 1 档,但不会超过 `direct_max_redundancy` - 当前优化只增强主节点 direct 路径,不改变子节点 relay 内部出站逻辑 ## 工作方式 透明模式启动后: - 不需要改 `sing-box` 的 `direct` 出站配置 - `iptables` 会把系统的 TCP 出站重定向到 `mynetspeeder edge` - `edge` 会同时尝试: - 当前主 VPS 直接连目标 - 若干在线子节点 relay 代为连接目标 - 前 `tcp_warmup_bytes` 的上行数据会更积极地并发发给所有候选路径 - winner 出现后,loser 会额外保留 `tcp_loser_grace_ms` 毫秒,再关闭 - 谁先回下行数据,谁成为胜出路径 - 其它路径会关闭 ## 一键脚本说明 `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 REDIRECT 规则,UDP 仅在显式开启时生效 说明: - 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 ```