Requirements

Requirements

Server

DependencyCheck
Docker Engine 24.xdocker --version
Docker Compose v2docker compose version
opensslopenssl version
curlcurl --version
Bash 4.xbash --version

Hardware: 1 vCPU, 512 MB RAM minimum (1 GB recommended), 2 GB disk, public IPv4.

Open Ports

These must be reachable from the internet:

PortProtocolService
51820UDPWireGuard tunnel (configurable via PORT_WG)
443TCPNginx — peer registration HTTPS API

Host-Only Port

PortProtocolPurpose
65231TCPPi-hole admin UI — access locally or over VPN only

Pi-hole admin is on port 65231, not 80.

Internal Docker Ports

These are never exposed to the host:

PortService
5000/tcpauth-service (FastAPI)
5053/udpUnbound DNS

Kernel

WireGuard requires kernel 5.6+ (built-in) or the wireguard DKMS module. The Compose file enables net.ipv4.ip_forward via sysctls and grants CAP_NET_ADMIN + SYS_MODULE to the WireGuard container.

Linux Client

RequirementInstall
wireguard-toolsapt install wireguard-tools
curlapt install curl
python3apt install python3
root / sudorequired

Windows Client

RequirementNotes
PowerShell 5.1+Built in on Windows 10/11
AdministratorRequired for tunnel service install
WireGuard for WindowsAuto-installed via winget if absent

The server uses a self-signed TLS certificate. Client scripts disable certificate validation automatically — this does not affect VPN tunnel security.