This gives you a clean, secure private VPN with easy onboarding for Windows/macOS/iOS/Android—and full control over your traffic and location.
Build Your Own Private VPN with OpenVPN Access Server
What is OpenVPN Access Server?
OpenVPN Access Server (AS) is a secure, battle-tested VPN server based on the OpenVPN protocol. It gives you an admin web UI, user accounts, and one-click client profiles—so non-technical users can connect easily. The free license allows 2 concurrent users, perfect for personal use or a small lab.
Why use a private VPN (instead of a public VPN)?
Privacy & control: Your traffic terminates on your server. You decide logging, DNS, users, and security policy.
Stable location/IP: Keep a consistent country/IP (e.g., US) for services, dashboards, or automations.
Secure on public Wi-Fi: Your device encrypts all traffic to your server; local snoops can’t see contents.
Multi-device & easy onboarding: Create user accounts, issue profiles, and revoke access instantly.
Cost-effective & scalable: Start on a tiny VM; scale up only if you need more speed or users.
One-Time Setup: Install OpenVPN AS on a Kali Linux VM (Docker)
Works on Kali (Debian-based). If your Kali VM is behind a router, port-forward 443/TCP, 943/TCP, 1194/UDP (and 22/TCP if you need SSH) to the VM.
Code:
# 1) Update OS
sudo apt update && sudo apt -y upgrade
# 2) Install Docker
sudo apt -y install docker.io
sudo systemctl enable –now docker
# 3) Ensure the TUN device exists (required for VPN)
sudo modprobe tun
[ -e /dev/net/tun ] || { sudo mkdir -p /dev/net; sudo mknod /dev/net/tun c 10 200; sudo chmod 0666 /dev/net/tun; }
ls -l /dev/net/tun
# 4) Create a persistent config directory
sudo mkdir -p /srv/openvpn-as
# 5) Run OpenVPN Access Server with the needed capabilities
sudo docker run -d –name openvpn-as –restart unless-stopped \
–cap-add=NET_ADMIN \
–cap-add=NET_RAW \
–device /dev/net/tun \
-p 443:443 -p 943:943 -p 1194:1194/udp \
-v /srv/openvpn-as:/openvpn \
openvpn/openvpn-as:latest
# 6) Create your admin/user account (replace PASSWORD)
sudo docker exec -it openvpn-as /usr/local/openvpn_as/scripts/sacli \
–user mina –new_pass ‘PASSWORD’ SetLocalPassword
# 7) Grant admin (superuser) rights
sudo docker exec -it openvpn-as /usr/local/openvpn_as/scripts/sacli \
–user mina –key “prop_superuser” –value “true” UserPropPut
# 8) Ensure the user is allowed to connect
sudo docker exec -it openvpn-as /usr/local/openvpn_as/scripts/sacli \
–user mina –key “type” –value “user_connect” UserPropPut
# 9) Start/verify services
sudo docker exec -it openvpn-as /usr/local/openvpn_as/scripts/sacli start
sudo docker exec -it openvpn-as /usr/local/openvpn_as/scripts/sacli Status
Finish in the Web UI
Admin UI:
https://<KALI_PUBLIC_OR_LAN_IP>:943/admin
→ log in as mina.Configuration → Network Settings: set Hostname or IP to your public IP/DNS (or LAN IP for internal use).
Ensure Routing/NAT = Yes (redirect internet traffic) → Save → Apply.
Client Portal:
https://<KALI_PUBLIC_OR_LAN_IP>/
→ users sign in, download OpenVPN Connect and their profile → Connect.
Optional: Host Firewall (UFW)
sudo apt -y install ufw
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw allow 943/tcp
sudo ufw allow 1194/udp
sudo ufw –force enable
sudo ufw status
Notes
The free OpenVPN AS license supports 2 concurrent users (you can add more accounts; only two can connect at once).
For a US exit IP, host the Kali VM in a US region—or use a US VPS and run the same commands.
Your server config persists in
/srv/openvpn-as
. To update the container later:
sudo docker pull openvpn/openvpn-as:latest
sudo docker stop openvpn-as && sudo docker rm openvpn-as
sudo docker run -d –name openvpn-as –restart unless-stopped \
–cap-add=NET_ADMIN –cap-add=NET_RAW –device /dev/net/tun \
-p 443:443 -p 943:943 -p 1194:1194/udp \
-v /srv/openvpn-as:/openvpn \
openvpn/openvpn-as:latest