No description
  • Go 80.9%
  • JavaScript 7.6%
  • PHP 5.3%
  • Shell 3.2%
  • HTML 1.3%
  • Other 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-30 14:23:35 +03:00
.github/workflows OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
.idea MAX ICE injection transport impl 2026-06-27 14:54:24 +03:00
.serena Merge origin/main (0.5.1) into the fork 2026-10-12 19:14:15 +03:00
cmd speedbench: build on macOS too (CPU time through getrusage on every unix) 2026-10-16 09:42:22 +03:00
deploy phpbox: avito ShareDB exit for --mode=stream 2026-10-27 19:35:41 +03:00
docker docker: start the core with --role instead of the deprecated flags 2026-09-27 15:21:22 +03:00
docs Исключения приложений: произвольные порты и scoped WFP permissions 2026-10-30 14:23:35 +03:00
internal/winfirewall Исключения приложений: произвольные порты и scoped WFP permissions 2026-10-30 14:23:35 +03:00
ios-app Links are read and made in the core: one answer and one export for every client (#127) 2026-09-28 20:53:31 +03:00
mobile OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
netbind VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
netguard exit: денилист назначений против SSRF (NET-1) 2026-09-17 17:00:40 +03:00
network chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
provision transport: pin the KDF context, ending context-divergence handshake failures 2026-10-26 11:41:13 +03:00
routing VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
scripts bench: drain the send queue before the end marker (CoDel drops at the head, so a sentinel sent right after the data overtook the backlog and ended the sink early); encrypted: the context rotation timings read OPENFLUX_CTX_FIRST_ROTATE_MS/ROTATE_MS/UNLOCK_MS, keeping the old values as defaults; soak: restart the exit with its room list so both sides share one KDF context; changelog: 0.14.5 2026-10-18 12:01:59 +03:00
share transport: pin the KDF context, ending context-divergence handshake failures 2026-10-26 11:41:13 +03:00
socks5 chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
streamproxy phpbox: the tunnel renews itself on hosts that drop a closed request's script (#141) 2026-10-01 02:28:00 +03:00
subscription OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
third_party/sctp sctp fork: the MTU setter overrides what the Config asks for (pion/webrtc asks for 1191 in every association) 2026-10-20 05:44:03 +03:00
transport OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
tunnel Исключения приложений: произвольные порты и scoped WFP permissions 2026-10-30 14:23:35 +03:00
utils Dead code out, per-packet debug arguments guarded, scratch files ignored 2026-10-04 06:05:47 +03:00
.dockerignore integrate: fold openfluxfork features onto the encrypted-logging hotfix 2026-09-27 02:47:49 +03:00
.env.example docker: accept every transport in the entrypoint 2026-09-27 14:56:46 +03:00
.gitattributes Merge the fork's audit-fixes into the 0.5.1 merge 2026-10-12 19:17:00 +03:00
.gitignore Dead code out, per-packet debug arguments guarded, scratch files ignored 2026-10-04 06:05:47 +03:00
auth_proxy.go chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
bench.go bench: drain the send queue before the end marker (CoDel drops at the head, so a sentinel sent right after the data overtook the backlog and ended the sink early); encrypted: the context rotation timings read OPENFLUX_CTX_FIRST_ROTATE_MS/ROTATE_MS/UNLOCK_MS, keeping the old values as defaults; soak: restart the exit with its room list so both sides share one KDF context; changelog: 0.14.5 2026-10-18 12:01:59 +03:00
build_all.sh feat: multi-transport Session, IPC bridge, cookie exchange, .conf config 2026-09-24 22:49:07 +03:00
build_android.sh build_android.sh: find the NDK toolchain for any host, target API 26 2026-09-27 15:07:37 +03:00
build_ios.sh One protocol for every client: Session with classic, codec and context fallback (#126) 2026-09-28 18:38:10 +03:00
build_ios_app.sh ios: secure transports, lifecycle fixes и unsigned IPA CI 2026-09-19 12:23:31 +03:00
CHANGELOG.md changelog: 0.17.1 (real-time media carrier full-stream slot default) 2026-10-29 00:06:18 +03:00
classic_compat.go Wizard nodes serve classic clients too (iOS) 2026-09-30 14:33:46 +03:00
classic_compat_test.go Wizard nodes serve classic clients too (iOS) 2026-09-30 14:33:46 +03:00
conf.go conf: Bonding = yes reads as on; spec tests match the final design 2026-09-30 17:44:37 +03:00
conf_test.go conf: Bonding = yes reads as on; spec tests match the final design 2026-09-30 17:44:37 +03:00
cookie_store_test.go script transports get their own cookie jar on the classic path too 2026-10-11 14:32:12 +03:00
COPYRIGHT Add GPL-3.0 license and .gitignore 2026-09-10 12:00:06 +03:00
docker-compose.yml fix: 10 находок код-ревью 2026-09-17 18:02:44 +03:00
Dockerfile fix: 10 находок код-ревью 2026-09-17 18:02:44 +03:00
go.mod OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
go.sum OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
ipc_e2e_test.go rename: captcha → prompt (TransportPrompt) 2026-10-20 00:39:41 +03:00
ipc_handler.go rename: captcha → prompt (TransportPrompt) 2026-10-20 00:39:41 +03:00
ipc_status_test.go Name every carrier data is spread over, not just the first (#124) 2026-10-01 02:04:58 +03:00
LICENSE Add GPL-3.0 license and .gitignore 2026-09-10 12:00:06 +03:00
logging_flags_test.go transport: pin the KDF context, ending context-divergence handshake failures 2026-10-26 11:41:13 +03:00
main.go VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
network_spec_test.go Merge current bonding and fork with upstream main 2026-09-30 23:44:16 +03:00
node_scriptupdate.go main: wire the node auto-updater (--script-auto-update) 2026-10-12 20:27:01 +03:00
node_wizard.go provision: a node's kit - the installation of a channel as a script the person runs by hand 2026-10-20 01:49:18 +03:00
node_wizard_exitnode.go integrate: fold openfluxfork features onto the encrypted-logging hotfix 2026-09-27 02:47:49 +03:00
node_wizard_test.go transport: pin the KDF context, ending context-divergence handshake failures 2026-10-26 11:41:13 +03:00
NOTICE Add GPL-3.0 license and .gitignore 2026-09-10 12:00:06 +03:00
opensub-linux Merge origin/main (0.5.1) into the fork 2026-10-12 19:14:15 +03:00
pprof_env.go speedbench: transport benchmark harness, OPENFLUX_PPROF endpoint 2026-10-16 02:32:40 +03:00
PROTOCOL_NEGOTIATION.md One protocol for every client: Session with classic, codec and context fallback (#126) 2026-09-28 18:38:10 +03:00
README.md README: pictures of the apps' new look 2026-10-17 00:20:23 +03:00
README.ru.md OpenFlux 0.17.1-danik.1: интеграция апстрима, ревью, защиты TUN и восстановление Avito 2026-10-30 12:58:31 +03:00
REVIEW.md Test negotiated UDP end to end above the link MTU 2026-09-21 05:14:48 +03:00
script_cli.go Script settings: the script declares them, the core builds the wizard page 2026-10-04 21:24:31 +03:00
script_settings_cli_test.go script: settings wizard edits the profile param too 2026-10-05 23:20:36 +03:00
script_update_cli_test.go Script update: installed.file names the package file (older installs are not filed under <id>.flux) 2026-10-04 04:25:14 +03:00
share_cli.go native avito transport + cupsonline tuned params 2026-10-13 12:08:24 +03:00
share_cli_test.go chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
signals_unix.go tun_watch: remove bypass routes on Stop(), catch SIGHUP 2026-09-17 22:00:41 +03:00
signals_windows.go updated cmd args, removed rawsock 2026-09-14 07:17:07 +03:00
signin_node.go node: keeps its sign-in fresh: it saves the cookies a service refreshes, the owner merges a new sign-in over SSH per document 2026-10-17 18:05:26 +03:00
signin_node_test.go node: keeps its sign-in fresh: it saves the cookies a service refreshes, the owner merges a new sign-in over SSH per document 2026-10-17 18:05:26 +03:00
split_routing.go VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
split_routing_linux_test.go VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
split_routing_test.go VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
transport_factory.go Remove Session bonding; StripedTransport groups will replace it 2026-10-15 05:04:04 +03:00
transport_factory_test.go Merge the fork's audit-fixes into the 0.5.1 merge 2026-10-12 19:17:00 +03:00
TRANSPORT_PERFORMANCE.md audit fixes: the preferred carrier keeps its place after a hot swap, the MTU follows the carriers data really goes over, a frame no carrier can take is dropped, smaller fixes and tests 2026-10-16 09:31:49 +03:00
transport_spec.go Merge current bonding and fork with upstream main 2026-09-30 23:44:16 +03:00
transport_spec_url_test.go main: keep .conf transport URLs when per-type flags are unset 2026-09-26 19:08:10 +03:00
tun_check_other.go Windows WFP: поддержка UAC-процесса без service SID и безопасная диагностика 2026-10-14 20:42:04 +03:00
tun_check_windows.go Windows WFP: поддержка UAC-процесса без service SID и безопасная диагностика 2026-10-14 20:42:04 +03:00
tun_darwin.go chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
tun_learn.go chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
tun_linux.go VPN: исключения для любого Windows executable, LAN и доменов 2026-10-30 14:14:15 +03:00
tun_linux_test.go Защита TUN от утечек IPv4/IPv6: WFP Windows, nftables Linux и проверка готовности 2026-10-14 19:56:25 +03:00
tun_other.go Защита TUN от утечек IPv4/IPv6: WFP Windows, nftables Linux и проверка готовности 2026-10-14 19:56:25 +03:00
tun_watch.go chore: use canonical module path github.com/p1neappleXpress/OpenFlux (#129) 2026-09-29 21:09:36 +03:00
tun_windows.go Исключения приложений: произвольные порты и scoped WFP permissions 2026-10-30 14:23:35 +03:00
url_file.go main: --url-file reads the document URL from a file 2026-09-27 15:12:42 +03:00
url_file_test.go main: --url-file reads the document URL from a file 2026-09-27 15:12:42 +03:00

OpenFlux

OpenFlux

A tunnel that rides on ordinary web services, with pluggable transports and two exit-node backends.

Release License Go

English · Русский

Core · Desktop · Android · iOS (TestFlight; the App Store release is coming)

The OpenFlux apps on a phone: off, connecting, connected

Network stack research tool. IPv4 TCP/UDP tunnel with pluggable transports (including a signed JS scripting engine for writing new ones), a batched + zstd codec, and two exit-node backends (L3 raw forward / L4 gVisor proxy).

Disclaimer

The author of OpenFlux does not encourage the use of this project to bypass restrictions or violate the rules of any platform, and is not responsible for the final scenarios of how users apply this tool in real life or on the Internet. Any specific technical features of the application are nothing more than an architectural coincidence, created without any intent.

The project is entirely non-commercial, contains no paid features, hidden subscriptions, or commercial benefit.

The author is not responsible for forks, modifications, or derivative versions of OpenFlux created by third parties. Any changes added to a fork are the responsibility of its author.

The author is not responsible for:

  • Any use of OpenFlux by third parties
  • Consequences caused by the use of forks and modifications
  • Damage resulting from derivative versions
  • Violations committed using forks

The original code is provided as is, without any warranties.

Clients

Platform Download Notes
macOS build from source CLI + utun L3 client (--inbound=tun, default on macOS)
Linux build from source CLI client (SOCKS5) / exit node (L3 or L4)
Windows build from source CLI client (SOCKS5, or --inbound=tun via Wintun - needs administrator) / exit node (l4, or l3 via QEMU - see docs)
Desktop OpenFluxDesktop releases Windows/macOS/Linux: full tunnel or SOCKS5/HTTP proxy, multi-transport sessions, encryption, an in-app node-deployment wizard over SSH
Android OpenFluxAndroid releases System-wide VPN or local SOCKS5, multi-transport sessions with failover, encryption, captcha handling in a built-in browser
iOS TestFlight beta System-wide VPN via Network Extension

iOS app built by @saharev1 - full iOS client, TestFlight pipeline, system VPN support, DNS-over-TLS, and many stability fixes. HUGE thanks!

OpenFluxAndroid and OpenFluxDesktop run a Compose Multiplatform app and a shared module (multi-transport sessions, encryption, the built-in browser for captcha, the SSH node-deployment wizard) originally written by @meepo161 in OpenFluxClient and moved into these repositories with his agreement. HUGE thanks!

Android app - OpenFluxTeam/OpenFluxAndroid, desktop app - OpenFluxTeam/OpenFluxDesktop, the module they share - OpenFluxTeam/OpenFluxClientShared.

The desktop app, connected

How it works

Client (any):  macOS (utun) / Linux / Windows / iOS (packet tunnel) / Android
                    |
                    v
               Transport (Yandex.Docs / Volga / Board / MAX / Cups / Mail.ru / Direct / script)
                    |
                    v
               Exit node  -->  Internet
                 --mode l3   (raw SNAT/DNAT, Linux + root)
                 --mode l4   (gVisor proxy, any platform)

Any client works with either exit backend; --mode is chosen on the exit node, not the client. l3 forwards raw TCP/UDP with SNAT/DNAT and stays end-to-end (Linux + root only); l4 terminates TCP/UDP in a userspace gVisor stack and re-dials the real server (any OS, no root). A multi-transport session can run several transports at once and fail over between them. Full depth: docs/architecture.md.

Quickstart

go mod tidy
go build -o openflux .

# Exit node, L4 backend (any OS, no root)
./openflux --role=exit --mode=l4 --transport=yandex --url="YOUR_YANDEX_DOC_URL"

# Client, SOCKS5 (point a browser at 127.0.0.1:1080)
./openflux --role=client --inbound=socks5 --transport=yandex --url="YOUR_YANDEX_DOC_URL"

See docs/architecture.md for the l3 (root, Linux-only, faster) backend and the macOS/Windows full-tunnel clients, and docs/cli-reference.md for every flag.

Highlights

  • Pluggable native transports - Yandex.Docs, Yandex Volga, Yandex Board, MAX/OneMe, Cups.online, Mail.ru Docs, Direct.
  • Scripted transports - a signed JS engine (transport/script, goja) for writing new transports without touching Go or rebuilding the core. See docs/scripted-transports.md.
  • Multi-transport sessions with authenticated negotiation, encryption and failover. See docs/sessions.md.
  • Direct first, and fast - a live direct transport is used ahead of the document carriers (Prefer = no or OPENFLUX_DIRECT_FIRST=0 turns that off), with pooled buffers, gated zstd, a 16000-byte tunnel MTU on direct and Reno on direct streams. The method and the measurements: TRANSPORT_PERFORMANCE.md.
  • Stripe groups - several carriers of one or mixed types work as one stripe, one lane each (--lanes N, Lanes = N).
  • Two exit backends - l3 (raw SNAT/DNAT) and l4 (gVisor proxy). See docs/architecture.md.
  • Mode without a server - the exit can be a small PHP program on any web hosting instead of a VDS. See docs/phpbox.md.
  • Node provisioning wizard - --node-wizard installs an exit on a VDS over SSH, non-interactively, from a desktop app. See docs/node-provisioning.md.
  • Shareable links and QR codes - an openflux:// link carries a full client configuration. See docs/links.md.
  • Captcha handling, batched + zstd codec (with a legacy per-packet fallback), optional AES-256-GCM encryption, and benchmark modes for raw goodput. See docs/transports.md and docs/architecture.md.
  1. docs/architecture.md - the client/exit diagram, the two exit backends, the repo layout, and current limitations.
  2. docs/transports.md - the native transport list, codec selection, captcha handling, and how to add a native one.
  3. docs/scripted-transports.md - the JS transport engine: the host API, signing and trust, the dev tools.
  4. docs/sessions.md - multi-transport sessions, .conf files, authenticated negotiation and encryption.
  5. docs/links.md - the openflux:// link/QR format.
  6. docs/node-provisioning.md - the SSH node wizard.
  7. docs/phpbox.md - the no-VPS PHP-hosting exit.
  8. docs/logging.md - -d/-dd/-ddd and --sensitive.
  9. docs/cli-reference.md - every flag, flat.
  10. docs/building-and-releases.md - CI, tagged releases, exit-node releases, and the nightly channel.
  11. TRANSPORT_PERFORMANCE.md (in Russian) - what limits the transports' speed, what was changed, and the numbers.

Wire-level protocol framing lives at PROTOCOL_NEGOTIATION.md (linked from the docs above where it's relevant, not duplicated here).

What's in this repo

  • docs/ - the guides above.
  • transport/ - every transport (native and scripted) and the session manager.
  • tunnel/ - the client-side virtual NIC and both exit backends.
  • provision/ - the SSH node-provisioning backend and the no-VPS PHP deployer.
  • deploy/ - the VDS installer script and the PHP exit's own sources.
  • share/ - the openflux:// link format.
  • socks5/, netbind/, utils/ - the SOCKS5 server, Windows interface binding, and logging.
  • mobile/, ios-app/ - the Android/iOS bridges and the SwiftUI iOS app.
  • .github/workflows/ - CI and the three release channels (tagged, exit-node, nightly).

Requirements

  1. Go - see go.mod for the exact version.
  2. Android NDK r27+ / Xcode 26.6+ - only for the mobile client binaries.
  3. A Linux VPS / VDS for a VPS-hosted exit node (not needed for the no-VPS PHP exit - docs/phpbox.md). l3 needs root; l4 doesn't.

Status

The core tunnel path (native transports, the l3/l4 exit backends, multi-transport sessions, encryption/negotiation) is CI-tested on every push and has shipped across several tagged releases - see CHANGELOG.md. The scripted-transport engine and the no-VPS PHP exit are newer and still gaining real-world coverage; a Windows/macOS native l3 exit backend is not implemented yet (the working fallback is l4 on both). The nightly prerelease channel (.github/workflows/nightly.yml) tracks the nightly branch for anyone who wants a current build ahead of the next tagged release.

License

GNU General Public License v3.0 or later. See LICENSE for the full text.

Third-party licenses are listed in NOTICE.