J'avais besoin de mettre en place un serveur OpenVPN (pour plusieurs raisons mais je vous passe les détails) et j'ai finalement trouvé mon bonheur avec Docker ! Mon seul pré-requis était d'avoir une authentification par certificat (uniquement).

Mise en place d'un sous-domaine

Ce n'est pas quelque chose d'obligatoire mais autant faire les choses propres, ici il s'agissait d'ajouter un sous-domaine vpn.xorhak.io (A et AAAA). Comme ça j'utilise ce sous-domaine pour les accÚs (c'est plus simple qu'une IP, non ?).

Préparation de l'environnement

Ensuite j'ai préparé un peu le terrain cÎté serveur avant d'y déployer le service OpenVPN. J'ai fais relativement simple en mettant tout dans le dossier /home/docker/openvpn. Le dossier data contient toutes les configurations du service (et les users) :

$ mkdir -p /home/docker/openvpn/data

Pré-configuration du service

Avant de déployer le service, il est nécessaire de le lancer une premiÚre fois afin de l'initialiser, c'est trÚs simple (n'oubliez pas de changer les paramÚtres) :

$ docker container run --rm -v /home/docker/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_genconfig -u udp://vpn.xorhak.io
$ docker container run --rm -ti -v /home/docker/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_initpki

N'oubliez pas de prĂ©ciser une passphrase quand mĂȘme, c'est toujours mieux d'un point de vue sĂ©curitĂ©. La gĂ©nĂ©ration de la clĂ© peut prendre un peu de temps, alors soyez patient !

Préparation du docker-compose

Pour que ce soit plus simple à gérer sur le temps terme, le mieux c'est d'y mettre un fichier docker-compose.yml avec ce type de configuration. Attention n'oubliez pas de remplacer les paramÚtres aussi :

openvpn:
    image: "kylemanna/openvpn:latest"
    container_name: openvpn
    ports:
        - "1194:1194/udp"
    volumes:
        - "/home/docker/openvpn/data:/etc/openvpn"
    cap_add:
        - NET_ADMIN
    restart: always

Puis il reste Ă  lancer le service :

$ docker-compose up -d

Création de l'utilisateur

Maintenant que le service OpenVPN tourne en tùche de fond, reste plus qu'à créer un utilisateur (normal), là aussi c'est trÚs simple :

$ docker container run --rm -ti -v /home/docker/openvpn/data:/etc/openvpn kylemanna/openvpn:latest easyrsa build-client-full djerfy nopass

La configuration étant généré, il faut encore récupérer le fichier (type .ovpn) :

$ docker container run --rm -v /home/docker/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_getclient djerfy > djerfy.ovpn

Vous aurez le fichier djerfy.ovpn qui sera Ă  mettre en place sur les postes client (fonctionne au top sur macOS et iOS avec un client compatible OpenVPN).

Firewall

Le service utilise le port 1194 en UDP donc n'oubliez pas de l'ouvrir cÎté firewall et de le tester depuis l'extérieur (c'est mieux). Personnellement j'utilise ufw donc l'ajout se fait trÚs simplement :

$ ufw allow 1194/udp comment 'public access openvpn'

Debug

Si vous avez besoin de faire un peu de debug (les logs du serveur) :

$ docker-compose logs -f

Mise Ă  jour

Faire une mise Ă  jour du container est trĂšs simple et rapide :

$ docker-compose pull
$ docker-compose restart

Voilà, j'espùre que ça peut vous servir un jour. Enjoy! 😘
XorHak