I was playing around on a random site today, when I received the message This content is not available in your country yet. As a South African, we run into this a lot as our online presence it not that large and most international companies do not feel it is financially viable to run their services here. So I decided it is time to get a VPN going to avoid this. I decided to use a Digital Ocean Droplet for the task - costing $5 a month is cheap enough. The smallest one has 512MB Ram, 20GB SSD, 1 core and 1TB of transfer - this will be plenty to get the VPN up and possibly some other services. Signup was very quick and I was happy to see that they support 2 factor auth via Google Authenticator.

I found this easy guide on how to set up OpenVPN] using Docker - blindly followed it and after 5 minutes, I could log on to the new VPN. This is a lot quicker than my first attempts in 2011 - I would first set up a VM with Ubuntu, update it and then do all the installation / configuration of OpenVPN manually. Sometimes you would run into some fun issues when dealing with Ubuntu on Hyper-V.

Here are the commands in order for quick copy & paste - still need to create or find an Ansible playbook for this to make it even easier. The commands should be run as a normal user - it will sudo where needed.

DOMAIN=vpn.yourdomain.com
CURRENT_USER=$(whoami)
OVPN_DATA="ovpn-data"
DOCKER_CONFIG=/etc/init/docker-openvpn.conf

curl https://get.docker.io/gpg | sudo apt-key add -
echo deb http://get.docker.io/ubuntu docker main | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update && sudo apt-get install -y lxc-docker
sudo usermod -aG docker $CURRENT_USER
su - $CURRENT_USER
docker run --name $OVPN_DATA -v /etc/openvpn busybox
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_genconfig -u udp://$DOMAIN:1194
docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn ovpn_initpki

sudo touch $DOCKER_CONFIG
sudo printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n' \
'description "Docker container for OpenVPN server"' \
'start on filesystem and started docker' \
'stop on runlevel [!2345]' \
'respawn' \
'script' \
'  exec docker run --volumes-from ovpn-data --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn' \
'end script' >> $DOCKER_CONFIG

sudo start docker-openvpn

At this point, the Docker container will be created, configured and running via an upstart script. To add a user, use the following 2 commands - first one will create the user and the second will output the config file to the host VM to allow copying it to the client.

docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

The client isntallation is trivial and the guide does a great job covering all the major operating systems.



Cobus Bernard

Problem solver, automator, builder