OpenVPN avec Docker

Par défaut

L’une des toutes première chose que j’ai l’habitude de faire après l’installation d’une nouvelle machine est la mise en place d’un réseau privé virtuel c’est à dire un logiciel VPN comme OpenVPN pour pouvoir y accéder directement depuis mon réseau, avec le moins de restriction et le plus de sécurité possibles.

Exemple d'utilisation de OpenVPN

Cette installation relativement assez fastidieuse, surtout l’initialisation, la génération de certificats et clefs après l’installation de Open VPN se voit franchement simplifié grâce aux scripts d’automatisation de Kyle Manna

Ces scripts ainsi que leurs dépendances sont distribués sous image Docker. trés populaire avec plus d’un million de telechargement sur le Docker hub vous pouvez la retrouver sous le nom de kylemanna/openvpn

Le code source de ces script quant a lui est disponible sur Github

Installation de OpenVPN avec Docker

Initialisation

Coté serveur

Avec Docker déjà installé la mise en place d’un réseau sous Open VPN avec kylemanna/docker-openvpn devient un jeu d’enfant

Nous allons dans un premier temps, afin de pouvoir stocker durablement les informations de cryptage de Open VPN, créer un Volume Docker vierge.


OVPN_DATA="ovpn-data-volume"
docker run --name $OVPN_DATA -v /etc/openvpn busybox

Cette commande crée tout simplement un volume vide nomé ovpn-data-volume

Afin de l’initialiser avec l’ensemble des informations, clefs et certificats nécessaires nous allons utilisé le script de génération de configuration de l’image docker ovpn_genconfig ainsi que le script d’initialisation de certificat de signature ovpn_initpki comme suite:


FQDN="vpn.nomdomaine.ltd"
PORT="1194"
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_genconfig -u udp://$FQDN:$PORT
docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn ovpn_initpki

Un prompt demande de remplir les informations nécessaires pour la génération du certificat: nom de la machine, de l’unité, mot de passe etc.

Coté client

Coté client, nous avons besoin de créer une configuration Open VPN avec notamment les clés généré par le certificat du serveur créée précédemment dans le volume ovpn-data-volume.

Pour cela un autre script existe, il suffit de lancer la commande suivant avec le mot de passé utilisé précédemment dans la génération du certificat et le un nom de client afin de simplifier la gestion des clés


docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn easyrsa build-client-full NOM_CLIENT nopass

 

Lancement

à ce stade le volume openvpn-data-volume est initialisé et prêt à l’emploi, vous pouvez ajouter votre conteneur Docker en tant que service en créant un fichier de configuration upstart ou un script systemD

Voici un exemple pour upstart


description "Conteneur Docker pour le serveur Open VPN"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
  exec docker run --volumes-from openvpn-data-volume --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
end script

 

Voila, comment en quelques lignes avec cet outil nous pouvons mettre en place rapidement un réseau VPN sur un serveur disposant de Docker.