A userspace VPN gateway: builds an OpenVPN tunnel to a VPNGate node with
the OpenVPN 3 core, terminates it in-process with lwIP, and serves SOCKS5
(RFC 1928/1929, CONNECT and UDP ASSOCIATE) over it. No root, no tun
device, no routing table changes.
Layout follows the module boundaries in docs/ARCHITECTURE.md:
vpngate/ directory fetch + CSV parse (lines run to ~13.5 KB, so the
parser streams rather than splitting on newlines)
selector/ two-phase pick: cheap prior over the whole list, then real
TCP handshake timing of the top K
ovpn/ openvpn3 driven through TunBuilder, packets over a socketpair
netstack/ lwIP: the TCP/IP stack that makes "no root" possible
egress/ the swappable way out, and make-before-break switching
socks5/ the front door
health/ per-window scoring, and the decision to move
app/ wiring, admin HTTP, signals
docs/FEASIBILITY.md is the analysis this was built from, including the
one requirement that is not physically possible -- carrying established
TCP connections across a node switch -- and what is done instead
(zero-progress redial, UDP re-homing, grace-period drain).
Tests: 155 without the tunnel egress, 172 with it. The seam is the egress
factory; selection, scoring, history and probing all run for real.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
759 B
Plaintext
32 lines
759 B
Plaintext
# Build trees. Two of them by convention: `build` and `build-tunnel`, the same
|
|
# source configured with OVG_WITH_TUNNEL off and on.
|
|
/build*/
|
|
CMakeUserPresets.json
|
|
|
|
# Runtime state. The node cache and the per-node outcome history are written by
|
|
# the running service; committing them would ship one machine's opinion of which
|
|
# volunteer servers are good, and the cache would be stale within the hour.
|
|
/var/*
|
|
!/var/.gitkeep
|
|
|
|
# Local operator config. etc/openvpngate.conf is the documented sample and is
|
|
# tracked; anything else in there is a real deployment's, credentials included.
|
|
/etc/*
|
|
!/etc/openvpngate.conf
|
|
*.auth
|
|
|
|
# Editor and OS noise
|
|
*.swp
|
|
*~
|
|
.vscode/
|
|
.idea/
|
|
.DS_Store
|
|
|
|
# Tooling
|
|
compile_commands.json
|
|
.cache/
|
|
perf.data*
|
|
callgrind.out.*
|
|
*.gcda
|
|
*.gcno
|