Minimal Docker container establishing a secure NordVPN tunnel using OpenVPN.
976
Minimal NordVPN OpenVPN container based on Alpine Linux.
Designed for dynamic VPN tunneling, LAN WebUI access, torrenting, and full leak prevention, using automatic environment configuration.
Run a default instance of NordVPN using Podman:
podman run -d --cap-add=NET_ADMIN --device /dev/net/tun --name vpn \
-e NORD_USER="your_nordvpn_username" \
-e NORD_PASS="your_nordvpn_password" \
-e NORD_ENDPOINT="ie132.nordvpn.com" \
-e LAN_NETWORK="192.168.1.0/24" \
-p 9091:9091 \
docker.io/but3k4/nordvpn:latest
Or with Docker:
docker run -d --cap-add=NET_ADMIN --device /dev/net/tun --name vpn \
-e NORD_USER="your_nordvpn_username" \
-e NORD_PASS="your_nordvpn_password" \
-e NORD_ENDPOINT="ie132.nordvpn.com" \
-e LAN_NETWORK="192.168.1.0/24" \
-p 9091:9091 \
docker.io/but3k4/nordvpn:latest
This container will dynamically:
| Variable | Description | Required | Example |
|---|---|---|---|
| NORD_USER | NordVPN username | ✅ | yourusername |
| NORD_PASS | NordVPN password | ✅ | yourpassword |
| NORD_ENDPOINT | NordVPN server endpoint (FQDN) | ✅ | ie132.nordvpn.com |
| LAN_NETWORK | LAN subnet you want to keep accessible | ✅ | 192.168.1.0/24 |
✅ If any required variable is missing, the container will exit with an error.
After the VPN container is running, launch Transmission using the same network namespace:
podman run -d --name transmission \
--network container:vpn \
-v /your/config:/config \
-v /your/downloads:/downloads \
-v /your/watch:/watch \
lscr.io/linuxserver/transmission:latest
Or with Docker:
docker run -d --name transmission \
--network container:vpn \
-v /your/config:/config \
-v /your/downloads:/downloads \
-v /your/watch:/watch \
lscr.io/linuxserver/transmission:latest
✅ Transmission traffic will be fully tunneled via NordVPN — no leaks possible.
version: "3.9"
services:
nordvpn:
image: docker.io/but3k4/nordvpn:latest
container_name: nordvpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
environment:
- NORD_USER=your_nordvpn_username
- NORD_PASS=your_nordvpn_password
- NORD_ENDPOINT=ie132.nordvpn.com
- LAN_NETWORK=192.168.1.0/24
ports:
- "9091:9091"
restart: unless-stopped
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
network_mode: "service:nordvpn"
depends_on:
- nordvpn
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Dublin
volumes:
- /your/downloads:/downloads
restart: unless-stopped
➡️ Then launch it with:
podman-compose up -d
Or with Docker:
docker-compose up -d
✅ Transmission’s WebUI stays accessible on your LAN (e.g., http://192.168.1.10:9091), but all torrenting goes securely over the NordVPN tunnel.
| Field | Value |
|---|---|
| Base Image | alpine:latest |
| Installed | openvpn, bash, curl |
| Exposed Port | 9091 (example, passthrough) |
| Entrypoint | Dynamic entrypoint.sh (auto-routing) |
| Size | ~7.4MB |
This project uses components from Alpine Linux, OpenVPN, and NordVPN’s public configurations, all under open-source or user-licensed agreements.
Future improvements could include:
Feel free to contribute or fork! 🎯
Content type
Image
Digest
sha256:b15e977c8…
Size
7.7 MB
Last updated
8 months ago
docker pull but3k4/nordvpn