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.