Setup OpenVPN server with Docker

OpenVPN is a tool to create a secure tunnel between your computer and a remote server.

This post show how to setup OpenVPN server with Docker.

Prerequisites

You need following tools installed on your server:

  • Docker
  • Git

Install and configure OpenVPN server

We’ll use this repository to setup OpenVPN server.

Docker image is available on Docker Hub, but to get latest version of dependencies, we’ll build it locally.

# Clone repository
git clone https://github.com/kylemanna/docker-openvpn.git
cd docker-openvpn

# Build image
docker build -t openvpn .

Once image is built, we are able to configure our openvpn server and run it.

# Choose a name for docker volume
OVPN_DATA="ovpn-data"

# Set your server name
SERVER_NAME="vpn.servername.com"

# Initialize installation with configuration files
docker volume create --name $OVPN_DATA
docker run -v $OVPN_DATA:/etc/openvpn --rm openvpn ovpn_genconfig -u udp://$SERVER_NAME

# Initialize CA, choose a CA Key passphrase
docker run -v $OVPN_DATA:/etc/openvpn --rm -it openvpn ovpn_initpki

# Start openvpn server
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN openvpn

OpenVPN server is now running and listening on port 1194. Last step is to generate client configuration to connect to this server.

# Set your client name
CLIENT_NAME="john-doe"

# Generate client configuration and save it in current directory
docker run -v $OVPN_DATA:/etc/openvpn --rm -it openvpn easyrsa build-client-full $CLIENT_NAME nopass
docker run -v $OVPN_DATA:/etc/openvpn --rm openvpn ovpn_getclient $CLIENT_NAME > $CLIENT_NAME.ovpn

Connect to OpenVPN server

Now that you have your client configuration, you can connect to your OpenVPN server using VPN client like OpenVPN or Tunnelblick.