Skip to main content

VPN Proxy Exchange — CLI wrapper for the VPNX Docker container

Project description

VPNX

VPN Proxy Exchange — self-hosted rotating VPN proxy in one Docker container.

Free public VPN servers → SOCKS5 + HTTP proxy → REST API control.

Version npm PyPI Docker License


What is this?

VPNX turns any Docker host into a rotating VPN proxy — no VPN subscription, no account needed.

It grabs free OpenVPN configs from public VPN servers, creates a VPN tunnel, and exposes it as a standard SOCKS5 + HTTP proxy you can use from any tool. Want to switch country or rotate to a new server? One API call.

Multi-source fallback — VPNX tries multiple sources to find working VPN servers:

  1. VPN Gate API (/api/iphone/) — CSV endpoint, fastest when available
  2. VPN Gate HTML scrape (/en/) — parses the website table and downloads .ovpn configs directly
  3. GitHub mirror — cached configs as last resort

If one source is down, VPNX automatically falls back to the next. No manual intervention.

What you get:

  • 🔒 SOCKS5 proxy with auth (use from curl, browsers, scrapers, anything)
  • 🌐 HTTP proxy with auth
  • 🔄 REST API to connect, rotate, disconnect, and check status
  • 🌍 7+ countries, 80+ servers available at any time
  • 🏠 Works on any Linux Docker host — no VPN client needed on your machine

Use cases: web scraping with IP rotation, geo-testing, bypassing rate limits, hiding your origin IP.


Quick Start

docker run -d --name vpnx \
  --cap-add=NET_ADMIN --device=/dev/net/tun \
  -p 1080:1080 -p 8080:8080 -p 8000:8000 \
  -e API_TOKEN=your-secret \
  mocasus/vpnx:latest

Or use the CLI wrapper:

npm install -g @mocasus/vpnx && vpnx your-secret    # npm
pip install vpnx-cli && vpnx your-secret             # pip

Ports: SOCKS5 :1080 · HTTP :8080 · API :8000

Example session

# Check status
curl http://localhost:8000/status -H "Authorization: Bearer your-secret"
# → {"vpn": {"connected": false, ...}, "proxy": {"socks5": ":1080", ...}}

# Connect to a VPN server (auto-picks fastest)
curl -X POST http://localhost:8000/connect -H "Authorization: Bearer your-secret"
# → {"status": "connected", "server": "vpn599400160.opengw.net", "country": "Japan"}

# Use the proxy — traffic goes through VPN
curl --socks5 user:pass@localhost:1080 https://ifconfig.me
# → 36.14.213.219  (your VPN IP, not your real IP)

# Rotate to a new server
curl -X POST http://localhost:8000/rotate -H "Authorization: Bearer your-secret"
# → {"status": "connected", "server": "vpn851315872.opengw.net", ...}

# List available locations
curl http://localhost:8000/locations -H "Authorization: Bearer your-secret"
# → [{"country": "JP", "name": "Japan", "servers": 50, "speed": 948}, ...]

# Disconnect
curl -X POST http://localhost:8000/disconnect -H "Authorization: Bearer your-secret"

API

All endpoints require Authorization: Bearer <API_TOKEN> header.

Method Endpoint Description
POST /login Get proxy credentials
GET /status VPN + proxy status
POST /connect?country=JP Connect to VPN (auto-picks fastest if no country)
POST /disconnect Disconnect VPN
POST /rotate?country=US Rotate to a new VPN server
GET /locations List available VPN servers by country

Country filter

Pass ?country=XX (ISO 3166-1 alpha-2) to /connect or /rotate:

curl -X POST "http://localhost:8000/connect?country=JP" -H "Authorization: Bearer your-secret"
curl -X POST "http://localhost:8000/rotate?country=KR" -H "Authorization: Bearer your-secret"

Using the Proxy

# SOCKS5
curl --socks5 user:pass@host:1080 https://ifconfig.me

# HTTP
curl -x http://user:pass@host:8080 https://ifconfig.me

Get proxy credentials from /login or /status endpoint.


Configuration

Env Var Default Description
API_TOKEN (required) API authentication token
SOCKS_USER vpnx<random> Proxy username (auto-generated if not set)
SOCKS_PASS <random> Proxy password (auto-generated if not set)

Requires: Docker with --cap-add=NET_ADMIN + --device=/dev/net/tun (Linux host only)


How it works

┌─────────────────────────────────────────────────┐
│                  VPNX Container                  │
│                                                  │
│  ┌──────────┐    ┌──────────┐    ┌───────────┐  │
│  │ FastAPI  │───▶│ VPN Mgr  │───▶│ OpenVPN   │  │
│  │ :8000    │    │          │    │ (tun0)    │  │
│  └──────────┘    └──────────┘    └─────┬─────┘  │
│       │                               │         │
│  ┌────▼────┐                   ┌─────▼─────┐  │
│  │ Dante    │                   │ VPN Gate  │  │
│  │ SOCKS5   │                   │ Servers   │  │
│  │ :1080    │                   │ (free)    │  │
│  └─────────┘                   └───────────┘  │
│  ┌─────────┐                                    │
│  │Tinyproxy│                                    │
│  │ HTTP    │                                    │
│  │ :8080   │                                    │
│  └─────────┘                                    │
└─────────────────────────────────────────────────┘
  1. Fetch — VPNX queries VPN Gate for available servers (API → HTML scrape → GitHub mirror)
  2. Connect — Downloads .ovpn config, starts OpenVPN daemon, waits for tunnel
  3. Proxy — Dante (SOCKS5) and Tinyproxy (HTTP) route traffic through the VPN tunnel
  4. Rotate — Kills old OpenVPN, picks next server, reconnects

🇮🇩 Bahasa Indonesia

Proxy VPN berputar dalam satu container Docker. Gratis, tanpa akun — pakai server VPN publik dari VPN Gate.

Multi-source fallback — VPNX otomatis beralih sumber server jika satu mati:

  1. VPN Gate API (CSV endpoint)
  2. VPN Gate HTML scrape (parse website + download config)
  3. GitHub mirror (cached configs)

Mulai Cepat

docker run -d --name vpnx \
  --cap-add=NET_ADMIN --device=/dev/net/tun \
  -p 1080:1080 -p 8080:8080 -p 8000:8000 \
  -e API_TOKEN=rahasia-anda \
  mocasus/vpnx:latest

Atau via CLI:

npm install -g @mocasus/vpnx && vpnx rahasia-anda    # npm
pip install vpnx-cli && vpnx rahasia-anda             # pip

API

Semua endpoint butuh header Authorization: Bearer <API_TOKEN>.

Method Endpoint Keterangan
POST /login Dapat kredensial proxy
GET /status Status VPN + proxy
POST /connect?country=JP Hubungkan ke VPN
POST /disconnect Putuskan VPN
POST /rotate?country=US Rotasi server VPN
GET /locations Daftar server VPN per negara

Menggunakan Proxy

curl --socks5 user:pass@host:1080 https://ifconfig.me   # SOCKS5
curl -x http://user:pass@host:8080 https://ifconfig.me    # HTTP

v2.0.0 · MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vpnx_cli-2.0.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file vpnx_cli-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: vpnx_cli-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for vpnx_cli-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5da5a8f4963a03f854cfd2f087a712bf109acbae35c7a1a42c1706fc8829caa4
MD5 c07d1f340927851efac21c94899b5dc1
BLAKE2b-256 f0f0aa740f6cb3969be88c238ef37cde86cb140a5014600903ff393f82bd2d2d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page