OpenFlux:用Yandex与MAX传输承载SOCKS5 TCP隧道
一个给开发者研究TCP隧道的Go工具,客户端暴露SOCKS5,传输可换Yandex或MAX。
GitHub p1neappleXpress/OpenFlux 更新 2026-09-12 分支 main 星标 1.1K 分叉 88
Go Swift Shell C TCP隧道 SOCKS5 Yandex Docs MAX WebRTC Linux VPS

🧭 决策指南

适合,如果你

  • 你需要在Linux VPS上部署exit node,并让桌面客户端通过SOCKS5 :1080出网。
    README的“Requirements”和“Usage”章节要求Linux VPS / VDS exit node,并给出--socks5 :1080示例。
  • 你正在研究可插拔TCP传输,愿意基于transport/transport.go实现Transport接口。
    README的“Implementing custom transports”章节明确允许实现Transport接口并在main.go中注册。
  • 你的构建环境能够提供Go 1.26.3+、Android NDK 27.0.12077973+或Xcode 26.6+。
    README的“Requirements”章节列出了Go、Android NDK和XCode的最低版本。

不适合,如果你

  • 你必须使用重要MAX账号,或账号丢失会造成关键影响。
    README的MAX警告明确写着不要使用primary or important MAX account,也不要使用丢失后会造成关键影响的账号。
  • 你不能接受外部VPS导致MAX账号限制,或不能接受限制在停止OpenFlux后持续。
    README的MAX警告指出external VPS可能导致account restrictions,restriction may persist after stopping OpenFlux。
  • 你需要成熟稳定的MAX传输,而不是实验性WebRTC DataChannel后端。
    README明确写着MAX transport should be considered experimental until the blocking mechanism is understood。
  • 你没有root权限或无法配置Linux exit node的iptables规则。
    README的“Setting up exit node”要求root access,并给出iptables配置命令。

前置条件

  • Go v. 1.26.3+,用于构建desktop client / exit node binary。
  • Android NDK v.27.0.12077973+,用于构建Android client binary。
  • XCode v. 26.6+,用于构建iOS client binary。
  • Linux VPS / VDS exit node。
  • exit node需要root access。
  • Yandex传输仅支持legacy Yandex document editor。
  • MAX传输需要MAX token和User ID,对应--maxToken与--maxUid。

第一步命令(README 原文)

go mod tidy

要注意

  • exit node应将RST规则限定到专用egress IP,README不建议对整台主机直接DROP所有出站RST。
    README的“Setting up exit node”章节说明host-wide -j DROP会让关闭端口表现为filtered,并影响无关连接。
  • -m owner --uid-owner在此场景无效,因为破坏隧道的RST由没有owning socket的kernel生成。
    README的exit node说明明确指出owner match never fires。
  • Yandex出口命令需要legacy文档URL,并使用--exit-node、--local-ip和--url参数。
    README给出的scoped命令包含--exit-node --local-ip 203.0.113.10 --url "YOUR_YANDEX_DOC_URL"。
  • iOS客户端不是单纯命令行产物,还涉及SwiftUI、XcodeGen和liboflux.a。
    README的Structure章节列出ios-app、SwiftUI、XcodeGen与liboflux.a。

材料未说明

  • README没有提供Yandex或MAX传输的吞吐量、延迟和并发连接基准。
  • README没有说明MAX账号限制的触发条件、覆盖范围和申诉方式。
  • README没有给出Android APK或iOS TestFlight的版本号与兼容设备清单。
  • README没有说明Linux VPS所需的CPU、内存、带宽和发行版版本。
  • README没有提供安全审计、加密机制或Transport数据保密性的独立说明。
  • 项目只有1个版本rel 0.0.1和10个最近提交,README没有说明后续发布计划。

💡 深度解析

6
视情况 我有一台 Linux VPS/VDS 和 root 权限,准备运行 Exit Node;我不想让抑制 RST 的 iptables 规则影响宿主机其他连接,OpenFlux 是否适合?
适合读者: 管理 Linux VPS/VDS、拥有 root 权限并需要隔离用户态 TCP 出口连接的网络实验工程师

视情况,只有能提供专用出口 IP 或独立 network namespace/container 时才适合。

  • README 要求 Exit Node 具备 root 权限,并说明 gvisor 用户态 TCP 栈没有内核 socket,内核会对回复发送 RST,必须抑制。
  • 推荐把规则限定到 dedicated egress IP,例如对 203.0.113.10 的出站 RST 执行 DROP,并用 --local-ip 启动 Exit Node。
  • README 还建议把 Exit Node 放入独立 network namespace 或 container,避免规则触及宿主机主服务。
  • 不应默认采用全主机 DROP:README 明确指出它会让关闭端口表现为 filtered,并影响无关连接。若只有共享宿主机且无法隔离,不适合。
  • Usage / Setting up exit node:`You must have root access on exit node machine`
  • Usage:`The exit node's TCP connections live in a userspace stack (gvisor)`
  • Usage:`Recommended (scoped to a dedicated egress IP)`
  • Usage:`Even cleaner: run the exit node in its own network namespace / container`
  • Usage:`A blanket -j DROP on all outbound RSTs makes every closed port answer with silence`
sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 203.0.113.10 -j DROP
sudo ./universal-bypass-tool --exit-node --local-ip 203.0.113.10 \
    --url "YOUR_YANDEX_DOC_URL" --debug
材料未说明:README 未说明不同 Linux 发行版、内核版本和容器运行时的兼容性。;README 未提供该 iptables 规则对实际吞吐、延迟或其他网络服务的量化影响。
适合 我只想在 Linux、macOS 或 Windows 桌面上运行客户端,让浏览器连接 localhost:1080,并通过已有 Exit Node 使用 Yandex Transport;OpenFlux 是否适合?
适合读者: 只需要在桌面 Linux、macOS 或 Windows 上让浏览器通过本地 SOCKS5 使用 Yandex Transport 的开发者

适合,这正是 README 给出的最小桌面使用路径,但前提是你已有可访问的 Exit Node 和 Yandex 文档 URL。

  • 桌面客户端通过 --client 启动 SOCKS5,默认监听地址是 :1080,浏览器可将代理设置为 localhost:1080
  • README 的 Requirements 要求准备 Go 1.26.3+;桌面客户端和 Exit Node 共用 Go 构建流程。
  • 默认 Transport 是 yandex,客户端命令只需提供 Yandex 文档 URL、SOCKS5 地址和可选的 debug 日志。
  • 这不是无服务器代理:README 的总体架构仍要求远端 Exit Node;同时只支持 legacy Yandex document editor,服务端能力或账号权限变化可能导致连接失败。
  • Requirements:`Golang v. 1.26.3+`
  • Usage / Setting up desktop client:`./universal-bypass-tool --client --url "YOUR_YANDEX_DOC_URL" --socks5 :1080 --debug`
  • Usage:`Then set up SOCKS5 proxy in your browser at localhost:1080.`
  • Flags:`--socks5` 默认值为 `:1080`;`--transport` 默认值为 `yandex`
  • Setting up exit node:`Only legacy Yandex document editor is supported`
./universal-bypass-tool --client --url "YOUR_YANDEX_DOC_URL" --socks5 :1080 --debug
材料未说明:README 未说明浏览器以外的应用兼容性,以及 SOCKS5 DNS 请求的具体处理方式。;README 未说明 Yandex 文档 URL 的创建、权限配置和失效后的诊断方式。
适合 我正在比较 Yandex Docs 游标消息和 MAX WebRTC DataChannel 对 TCP 隧道的影响,并希望让浏览器通过 SOCKS5 接入;OpenFlux 是否适合做这项实验?
适合读者: 研究 Yandex Docs 与 MAX WebRTC DataChannel 承载差异、需要通过 SOCKS5 验证 TCP 隧道行为的网络协议研究人员

适合,因为项目本身就是面向网络栈研究的可插拔 TCP 隧道原型。

  • 架构明确为 Client(SOCKS5)→ Transport → Exit Node → Internet,浏览器无需理解底层传输。
  • 当前已有两个可替换后端:Yandex 通过 Docs 游标消息发送数据,MAX 通过 WebRTC DataChannel 发送数据。
  • Transport 接口与 --transport 参数允许切换承载通道,适合对比连通性、延迟和断线行为。
  • 但 README 没有给出吞吐、延迟、并发或重连基准;MAX 还明确属于实验性功能,并可能导致账号限制,因此结果不能直接代表生产网络性能。
  • Overview:`Client (SOCKS5) --> Transport --> Exit Node --> Internet`
  • Overview:`Yandex - sends packets via Yandex Docs cursor messages`;`Max - sends packets via WebRTC DataChannel`
  • Flags:`--transport`,默认值为 `yandex`
  • MAX 警告:`MAX transport should be considered experimental`
./universal-bypass-tool --client --url "YOUR_YANDEX_DOC_URL" --socks5 :1080 --debug
材料未说明:README 未说明两种 Transport 的吞吐、延迟、并发连接数和断线恢复数据。;README 未说明 Yandex 与 MAX 在相同网络条件下的可重复实验方法。
适合 我用 Go 1.26.3+ 开发新的消息或 WebRTC Transport,希望保留现有 TCP 隧道和 SOCKS5 入口;OpenFlux 是否适合作为扩展基线?
适合读者: 使用 Go 1.26.3+、想新增非传统承载通道并同时维护客户端和 Exit Node 的协议开发者

适合,原因是 README 直接公开了 Transport 扩展点,而不是要求修改整个隧道核心。

  • transport/transport.go 定义了 Transport 接口,Yandex 和 MAX 已作为现有后端放在独立目录中。
  • README 明确允许实现该接口,并在 main.go 的 switch block 中注册自定义 Transport。
  • 压缩封装、TCP tunnel、SOCKS5、数据包解析等组件已经分层,新增承载通道可以复用客户端与 Exit Node 的连接路径。
  • 但项目只有 0.0.1 版本,README 没有说明接口稳定性、生命周期约定、超时、取消、背压、重连和错误传播语义;这些细节需要开发者自行从代码确认。
  • Implementing custom transports:`You are free to implement the Transport interface from transport/transport.go and register your custom transport in main.go switch block.`
  • Structure:`transport/transport.go # Transport interface`
  • Structure:`compressor.go`、`tunnel/tunnel.go`、`socks5/`、`network/`
  • 项目数据:最新版本为 `0.0.1`,发布数为 `1`
go mod tidy
go build -o universal-bypass-tool .
材料未说明:README 未说明 Transport 接口的具体方法签名和并发安全要求。;README 未说明现有 Transport 是否具备超时、取消、重连和背压处理。
视情况 我使用 Xcode 26.6+,需要 iOS Network Extension 提供系统级 VPN,并希望把 Go 核心编译成静态库供 SwiftUI 客户端使用;OpenFlux 是否适合?
适合读者: 使用 Xcode 26.6+、需要 iOS Network Extension 系统级 VPN 客户端并能接受 SwiftUI 与 cgo 构建链的 iOS 工程师

视情况,项目具备明确的 iOS 集成路径,但它更像构建与测试原型,不是已经完成生产交付的 iOS VPN 产品。

  • Requirements 要求 Xcode 26.6+;仓库包含 export_ios.go,并标注为 iOS 静态库的 cgo bridge。
  • Structure 列出 ios-app/、SwiftUI 客户端、liboflux.a,以及 build_ios.shbuild_ios_app.sh 两条构建路径。
  • Clients 说明 iOS 通过 Network Extension 提供 system-wide VPN,并提供 TestFlight beta,证明已有移动端接入路线。
  • 但 README 没有说明 Apple provisioning、Network Extension entitlement、签名、设备兼容性、App Store/TestFlight 交付配置或审计结果;若目标是生产发布,现有资料不足。
  • Requirements:`XCode v. 26.6+`
  • Structure:`export_ios.go # cgo bridge for the iOS static library`
  • Structure:`ios-app/ # SwiftUI iOS client` 与 `links liboflux.a`
  • Clients:`System-wide VPN via Network Extension`
  • Build:`build_ios.sh` 与 `build_ios_app.sh`
export XCODE_PATH="<your Xcode.app path>" # optional, defaults to /Applications/Xcode.app
./build_ios.sh
材料未说明:README 未说明 Network Extension entitlement、Apple 签名和 provisioning profile 配置。;README 未说明 iOS 支持的设备版本、系统版本、架构以及 TestFlight 构建限制。;README 未提供 iOS 客户端的安全审计或 App Store 发布状态。
视情况 我必须用 Android NDK 27.0.12077973+ 构建 OpenFlux Android 客户端,并希望获得可安装的 APK;README 是否提供了足够明确的构建路径?
适合读者: 需要构建 Android 客户端、使用 Android NDK 27.0.12077973+ 并让移动端接入 OpenFlux SOCKS5/TCP 隧道的移动开发者

视情况,README 给出了 Android 二进制的构建入口,但没有把完整 APK 打包、签名和安装流程写全。

  • Requirements 明确要求 Android NDK v27.0.12077973+,说明该项目确实考虑 Android 客户端构建。
  • Build for Android 章节提供 build_android.sh,并要求先设置 ANDROID_NDK_HOME
  • Clients 表格把 Android 交付物链接到独立的 OpenFluxAndroid releases,并标注为 Standalone APK;这意味着移动端应用与核心仓库存在分离。
  • README 没有说明 Android 工程、Gradle/Android Studio 版本、签名配置、ABI、APK 生成位置或安装命令。因此,若只需构建核心 Android binary,路径较明确;若要求从本仓库独立产出签名 APK,信息不足。
  • Requirements:`Android Native Development Kit (NDK) v.27.0.12077973+`
  • Build for Android:`export ANDROID_NDK_HOME=<your Android NDK path>` 与 `./build_android.sh`
  • Clients:`Android ... Standalone APK`,并链接 `p1neappleXpress/OpenFluxAndroid`
export ANDROID_NDK_HOME=<your Android NDK path>
./build_android.sh
材料未说明:README 未说明 Android APK 的 Gradle、签名、ABI 和发布构建流程。;README 未说明 Android 二进制与独立 OpenFluxAndroid APK 项目的版本对应关系。

✨ 核心亮点

  • Go实现TCP隧道,支持Yandex与MAX两种Transport
  • 客户端提供SOCKS5,出口节点运行gvisor用户态协议栈
  • 支持Android、iOS TestFlight与Linux VPS出口节点
  • 社区规模为1,150星、88 forks、4位贡献者

🔧 工程化

  • main.go提供client与exit-node命令,客户端监听SOCKS5 :1080。
  • Yandex经Docs cursor messages传输,MAX经WebRTC DataChannel传输。
  • Transport接口支持在transport.go注册自定义传输后端。

⚠️ 风险

  • README明确警告MAX可能限制账号,停止OpenFlux后限制仍可能持续。
  • 外部VPS使用MAX可能触发账号限制,MAX传输仍属实验性。
  • exit-node需按专用IP配置iptables,否则全局丢弃RST会影响主机连接。

👥 适合谁?

  • 需要Go 1.26.3+构建TCP隧道客户端或Linux出口节点的开发者。
  • 维护Android NDK 27.0.12077973+或Xcode 26.6+客户端的团队。
  • 研究SOCKS5、可插拔Transport和gvisor用户态网络栈的工程师。