Exécutez OpenVPN dans Docker en 2 secondes

Bonjour, citoyens Habrovsk! Avez-vous déjà rencontré une situation où vous aimeriez vraiment voyager virtuellement dans une autre ville, un pays ou un autre continent? J'ai un tel besoin assez souvent, donc la possibilité d'avoir mon propre serveur VPN qui peut être démarré n'importe où en quelques secondes était assez aiguë. Dans cet article, je veux parler de mon projet, que j'ai planifié lorsque je cherchais une solution prête à l'emploi, dans ce cas, docker une image qui vous permettrait de monter rapidement le serveur OpenVPN, avec un minimum de paramètres et un niveau de sécurité acceptable.


Contexte

La possibilité d'exécuter le service sur n'importe quelle machine: qu'il s'agisse d'un serveur physique, d'un serveur privé virtuel ou, du tout, de l'espace conteneur dans un autre système de gestion de conteneurs - était essentielle. Mon regard tomba immédiatement sur le Docker. Premièrement, ce service gagne en popularité et, par conséquent, de plus en plus de fournisseurs proposent des solutions clé en main avec sa pré-installation; deuxièmement - il existe un référentiel d'images centralisé, à partir duquel vous pouvez télécharger et démarrer le service avec une seule commande dans le terminal. L'idée qu'un tel projet devrait déjà exister m'a rendu visite et j'ai constamment cherché. Mais, la plupart des projets que j'ai trouvés étaient soit trop lourds (il fallait créer un conteneur pour le stockage permanent des données et exécuter le conteneur plusieurs fois avec une application avec des paramètres différents), soit sans documentation saine, soit complètement abandonnés. Ne trouvant rien d'acceptable, j'ai commencé travailler sur votre projet. Devaient des nuits blanches d'étudier la documentation, d'écrire du code et de déboguer, mais à la fin, mon service a vu la lumière et a joué dans toutes les couleurs du panneau LED monochrome du routeur. Alors, veuillez aimer et favoriser - Docker-OpenVPN . J'ai même imaginé un logo (dessus, devant la coupe), mais je ne le juge pas strictement, car je ne suis pas (déjà) designer. Lorsque j'ai mis en place ce projet, je me suis concentré sur la vitesse de déploiement, un minimum de réglages et un niveau de sécurité acceptable. Par essais et erreurs, j'ai trouvé l'équilibre optimal de ces critères, cependant, à certains endroits, j'ai dû sacrifier la vitesse de déploiement pour la sécurité, et j'ai dû payer la portabilité pour un minimum de paramètres: dans la configuration actuelle, le conteneur une fois créé sur un serveur ne peut pas être transféré et exécuté sur un autre. Par exemple, tous les certificats client et serveur sont générés au démarrage du service et cela prend environ 2 secondes. Cependant, la génération du fichier Defy Hellman a dû être supprimée dans le temps de construction: il est créé lors de la construction de l'image docker et peut durer jusqu'à 10 minutes. J'aimerais beaucoup recevoir un audit de sécurité d'une telle solution d'une communauté respectée.

Lancement

Pour démarrer le service, nous avons besoin de quelques choses:
  1. Serveur: physique ou virtuel. Théoriquement, vous pouvez exécuter en mode docker-in-docker, mais je n'ai pas effectué de test approfondi de cette option;
  2. En fait docker. De nombreux hébergeurs proposent des solutions toutes faites avec Docker "à bord";
  3. L'adresse IP publique.
Si tous les détails sont en place, il nous reste à exécuter la commande suivante dans la console de votre serveur:
docker run --cap-add=NET_ADMIN \ -it -p 1194:1194/udp -p 80:8080/tcp \ -e HOST_ADDR=$(curl -s https://api.ipify.org) \ alekslitvinenk/openvpn 
Un lecteur attentif pourrait faire attention au fait que l'adresse IP du serveur est automatiquement déterminée à l'aide d' ipify.org . Si pour une raison quelconque cela ne fonctionne pas, vous pouvez spécifier l'adresse manuellement. Si toutes les étapes précédentes ont été effectuées correctement, nous devrions voir quelque chose de similaire dans la console:
 Sun Jun 9 08:56:11 2019 Initialization Sequence Completed Sun Jun 9 08:56:12 2019 Client.ovpn file has been generated Sun Jun 9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/ Sun Jun 9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down! 
Nous sommes proches de l'objectif: nous devons maintenant copier example.com (dans votre cas, il y aura l'adresse de votre serveur) et la coller dans la barre d'adresse du navigateur. Après avoir appuyé sur Entrée, le fichier client.ovpn sera téléchargé et le serveur http lui-même passera dans l'oubli. En cas de doute sur cette solution, vous pouvez utiliser l'astuce suivante: exécutez la commande précédente et ajoutez les indicateurs zp et le mot de passe. Maintenant, si vous collez le lien généré dans la fenêtre du navigateur, vous recevrez une archive zip avec un mot de passe. Lorsque vous avez un fichier avec la configuration du client, vous pouvez utiliser n'importe quel client approprié. J'utilise Tunnelblick pour Mac.

Tutoriel vidéo

Ce didacticiel vidéo contient des instructions détaillées pour déployer le service sur DigitalOcean. PS Si vous trouvez ce projet utile, alors donnez-lui un astérisque sur le GitHub, fork et dites à vos amis. Les contributeurs et les audits de sécurité sont également les bienvenus. PPS Si cet article concerne Habr, je prévois d'écrire ce qui suit sur la façon dont j'ai lancé docker-in-docker et docker-in-docker-in-docker, pour ce que je l'ai fait et ce qui en est sorti.
EDIT1:
  1. Correction d'erreurs dans la publication,
  2. En réponse aux commentaires, j'ai décidé de mettre ces informations ici: - un indicateur privilégié est nécessaire pour travailler avec iptables

EDIT2:
  1. Amélioration de la commande de lancement d'image: maintenant elle ne nécessite pas le drapeau --privileged
  2. Ajout d'un lien vers le guide vidéo en russe: youtu.be/A8zvrHsT9A0

Source: https://habr.com/ru/post/fr458606/


All Articles