A proxy
an address:port, per application
- Configured app by app, forever
- Invisible to most mobile apps
- No OS-wide encryption
- One misconfigured app leaks around it
- UDP and DNS quietly bypass it
Self-hosted VPN appliance
vpn2proxy wraps the HTTP and SOCKS5 proxies you already pay for in real, leak-proof WireGuard and OpenVPN servers. Run one container, hand out a QR code, and every app on any phone or laptop exits through your proxy — operating-system wide.
stock WG / OVPN apps
sox5://resi-us-01
your traffic, your exit ip
Exits through the proxies you already pay for
No agents, no sidecars, no rewriting your network. vpn2proxy renders a sing-box configuration from a small YAML file, probes every upstream, and supervises both VPN servers as one process.
Add each upstream once — server, port, credentials, type. Anything that speaks SOCKS5 or HTTP CONNECT.
upstreams:
- name: resi-us-01
server: p.webshare.io
port: 1080
username: ab12cd-1
password: "••••••••"It probes UDP ASSOCIATE support, picks the safe DNS shape, writes the sing-box config and brings up both servers — unprivileged.
$ vpn2proxy check
resi-us-01 socks5 ok udp: unsupported → fail-closed
$ sudo vpn2proxy run
✔ wg :51820 ✔ ovpn :51821 ✔ metrics :9091Export a profile or a QR code. Stock WireGuard and OpenVPN apps just work — pinned to the exit you choose.
$ vpn2proxy wg export phone --qr
▄▄▄▄▄▄▄ ▄▄ ▄▄▄▄▄▄▄
▐ ▄▄▄ ▐▐▐▐ ▐ ▄▄▄ ▐ state/export/phone.conf
▐ ███ ▐▐▐▐ ▐ ███ ▐ exit: resi-us-01
▀▀▀▀▀▀▀ ▀▀ ▀▀▀▀▀▀▀A proxy is an address your applications have to remember to respect. A VPN is an interface your operating system can't route around.
an address:port, per application
one interface, everything routed
The generated config contains no direct outbound. Hung upstream? Traffic times out inside the tunnel. Verified with packet capture: zero packets reach the WAN.
Every upstream is asked for UDP ASSOCIATE. If it says no, UDP is rejected — never leaked.
Pin a peer to a specific proxy. Stable /32 per device makes per-peer accounting exact.
Prometheus on loopback. Watch every device and every upstream, in real time.
Ship it as a single container or a hardened systemd unit. No TUN device, no new privileges, no capability dance — the dataplane runs in userspace.
$ docker run --rm -it \
-p 51820:51820/udp \
-v ./vpn2proxy.yaml:/etc/vpn2proxy/vpn2proxy.yaml \
ghcr.io/vpn2proxy/vpn2proxy
✔ supervisor up unprivilegedChange the upstream in YAML and reload. Clients never re-import anything — the tunnel just starts exiting somewhere new.
Profiles are standard .conf and embedded .ovpn files. Ship a QR code and you're done.
Measured, not promised — from the test harness
packets on the WAN with a hung upstream, asserted via payload markers and tcpdump
through a residential exit — line rate for the reference provider, no drops
supervisor respawn after a kill -9, with counters monotonic across the restart
soak probes passing — the two misses are the injected fault window, by design
The dataplane is a pinned sing-box release, executed as a child process and never linked. That means an audited engine, an MIT wrapper, and a version you can hold still.
Proxy bandwidth stays on your provider's bill. vpn2proxy charges for the appliance, not the traffic.
For one box, one lab, one experiment.
For people whose proxies are infrastructure.
For teams running exits as a shared utility.
No. At config time vpn2proxy asks each upstream for UDP ASSOCIATE. If it can't, UDP is rejected fail-closed — never leaked — and DNS is resolved inside the chain over DoH. TCP keeps working normally. If your provider does support UDP, it's forwarded in-chain.
No. vpn2proxy is software that runs on your host. Clients connect to your machine, which forwards through your proxy provider. There is no vpn2proxy cloud in the path.
Stock WireGuard and OpenVPN clients — the ones already on your phone and laptop. WireGuard peers get standard .conf files (plus a QR code), OpenVPN users get .ovpn profiles with CA, certificate, key and tls-crypt embedded.
Any Linux box with a public address and an open UDP port — a $5 VPS, a container, a machine at home. It runs unprivileged with no TUN device and no added capabilities. IPv4 in v1.
Yes. Edit the upstream in YAML and run vpn2proxy reload. The servers regenerate and restart without dropping state; clients keep their existing profiles and simply start exiting somewhere new.
HTTP CONNECT upstreams are supported. Because HTTP proxies cannot carry UDP, an HTTP upstream forces the fail-closed shape for all UDP — TCP and DNS-over-HTTPS still flow.
Free for one upstream and three devices. Bring the proxies; we'll bring the tunnel.
No credit card · kill-switch on by default · cancel anytime