DEV Community

Cover image for Installing a VPN Server with Docker on Proxmox – The Ultimate Guide
Fedya
Fedya

Posted on

Installing a VPN Server with Docker on Proxmox – The Ultimate Guide

πŸš€ Installing a VPN Server with Docker on Proxmox – The Ultimate Guid


🧠 Why Run a VPN in Docker on Proxmox?

Running a VPN server is often a first step toward building a secure self-hosted infrastructure. But when you combine:

  • 🧩 Docker – for modular, reproducible environments,
  • 🧱 Proxmox VE – for rock-solid virtualization and LXC containers,
  • πŸ”’ VPN – for encrypted access to your internal network,

...you get a powerful, portable, and private network layer under your full control.


πŸ“‹ What We’ll Cover

  • πŸ› οΈ Requirements & Environment
  • βš™οΈ Setting up the Proxmox environment
  • πŸ“¦ Deploying a Docker container
  • πŸ” Installing the VPN server (WireGuard or OpenVPN)
  • 🌍 Accessing your VPN and testing
  • 🧰 Tips, tricks & troubleshooting

Let’s dive in!


🧰 Requirements

Before we start, here’s what you’ll need:

βœ… Item πŸ”Ž Details
πŸ–₯️ Proxmox VE Version 7.x or newer
πŸ“¦ Docker Installed inside an LXC container or VM
🌐 Public IP For remote VPN access
πŸ” Port forwarding On your router, if behind NAT
πŸ§‘β€πŸ’» Basic Linux skills Just a bit helps a lot

πŸ—οΈ Step 1: Create a Proxmox Container or VM

You can run Docker inside a Debian-based LXC container or a Proxmox VM. For simplicity and performance, we’ll go with an LXC container.

πŸ”§ Create LXC Container (Debian-based)

  1. Go to Proxmox Web UI
  2. Click βž• Create CT
  3. Choose:
    • Template: debian-12-standard_*.tar.zst
    • Disk size: 8GB+
    • Network: Bridged or NAT
  4. Click Finish, then Start the container

🐳 Step 2: Install Docker

🐧 Log into the container:

pct enter <container_id>
Enter fullscreen mode Exit fullscreen mode

πŸ”„ Update packages:

apt update && apt upgrade -y
Enter fullscreen mode Exit fullscreen mode

πŸ“₯ Install Docker:

curl -fsSL https://get.docker.com | sh
Enter fullscreen mode Exit fullscreen mode

Test it:

docker run hello-world
Enter fullscreen mode Exit fullscreen mode

Congrats πŸŽ‰ β€” Docker is running inside your container!


πŸ” Step 3: Deploy a VPN Server (WireGuard)

βœ… Why WireGuard?

WireGuard is blazing fast, secure, and easy to configure.

🧱 Create a Docker volume (optional but recommended):

docker volume create wg_data
Enter fullscreen mode Exit fullscreen mode

πŸš€ Run WireGuard container:

We’ll use the excellent linuxserver/wireguard image.

docker run -d   --name=wireguard   --cap-add=NET_ADMIN   --cap-add=SYS_MODULE   -e PUID=1000   -e PGID=1000   -e SERVERURL=your.domain.com   -e SERVERPORT=51820   -e PEERS=3   -e PEERDNS=1.1.1.1   -e INTERNAL_SUBNET=10.13.13.0   -v wg_data:/config   -v /lib/modules:/lib/modules   -p 51820:51820/udp   --sysctl="net.ipv4.conf.all.src_valid_mark=1"   --restart unless-stopped   lscr.io/linuxserver/wireguard:latest
Enter fullscreen mode Exit fullscreen mode

πŸ” Replace your.domain.com with your actual domain or public IP.

After a few seconds, the container will auto-generate peer configs. 🎯


πŸ“² Step 4: Access & Use the VPN

To access client configs:

docker exec -it wireguard cat /config/peer1/peer1.conf
Enter fullscreen mode Exit fullscreen mode

πŸ“± Import this into the WireGuard app on iOS, Android, Windows, or Linux.

πŸ“‘ Open the port on your router:

Forward UDP 51820 to your Proxmox host (or container) IP.


πŸ§ͺ Step 5: Test Your VPN

On your phone or laptop:

  1. Connect to Wi-Fi (external to your server)
  2. Start the WireGuard VPN
  3. Visit https://whatismyipaddress.com
  4. It should now show your server’s public IP 🌍

Congratulations, you're browsing via your own secure VPN! πŸŽ‰πŸ”


🧠 Bonus: OpenVPN Alternative (Optional)

Prefer OpenVPN?

Use the linuxserver/openvpn-as Docker image instead:

docker run -d   --name=openvpn-as   -e PUID=1000   -e PGID=1000   -e TZ=Europe/Sofia   -p 943:943   -p 9443:9443   -p 1194:1194/udp   -v ovpn_data:/config   --cap-add=NET_ADMIN   --restart unless-stopped   lscr.io/linuxserver/openvpn-as:latest
Enter fullscreen mode Exit fullscreen mode

Then access it at https://<server-ip>:943.


πŸ› οΈ Troubleshooting Tips

❗ Issue 🧩 Solution
VPN not connecting Check port forwarding, firewall, or docker network
No internet via VPN Check net.ipv4.ip_forward=1 and routing
DNS leaks Set proper PEERDNS or use encrypted DNS

🧩 Useful Extras


πŸ’¬ Final Thoughts

Setting up your own VPN server with Docker under Proxmox combines the best of virtualization, containerization, and privacy.

  • πŸ’‘ For beginners β€” this setup builds confidence.
  • βš™οΈ For experts β€” it's the foundation for more advanced self-hosted networks.

If you found this guide helpful, feel free to leave a comment or follow for more DevOps and self-hosting tutorials! πŸš€


πŸ™Œ Stay safe, stay private, and keep building! πŸ‘¨β€πŸ’»πŸ‘©β€πŸ’»


Written with ❀️ by [Your Name] for the Dev.to community.

Top comments (0)