Lancez OpenVPN dans Docker en 2 secondes

Bonjour, habitants de Khabrovsk ! Avez-vous déjà été confronté à une situation où vous vouliez vraiment être virtuellement transporté vers une autre ville, un autre pays ou un autre continent ? J'ai ce besoin assez souvent, donc l'opportunité d'avoir mon propre serveur VPN, qui peut être lancé n'importe où, en quelques secondes, était assez urgente. Dans cet article, je veux parler de mon projet, que j'ai conçu quand j'étais vous recherchez une solution toute faite, en l'occurrence Docker une image qui permettrait de mettre en place rapidement un serveur OpenVPN, avec un minimum de paramétrages et un niveau de sécurité acceptable.

Lancez OpenVPN dans Docker en 2 secondes

Préhistoire

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 même d'un espace conteneur au sein d'un autre système de gestion de conteneurs - était essentielle. Mon regard se posa immédiatement sur Docker. Premièrement, ce service gagne en popularité et, par conséquent, de plus en plus de fournisseurs proposent des solutions toutes faites avec sa pré-installation ; deuxièmement, il existe un stockage centralisé d'images à partir duquel vous pouvez télécharger et exécuter le service à l'aide d'une seule commande dans le terminal. L’idée qu’un tel projet devait déjà exister m’est venue et j’ai beaucoup 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 lancer le conteneur avec l'application plusieurs fois avec des paramètres différents), soit sans documentation sensée, soit complètement abandonnés. , j'ai commencé à travailler sur votre projet. Il y a eu des nuits blanches avant d’étudier la documentation, d’écrire du code et de déboguer, mais finalement mon service a vu le jour et a commencé à scintiller de toutes les couleurs du panneau LED monochrome du routeur. Alors, je vous demande d'aimer et de favoriser - Docker-OpenVPN. J'ai même imaginé un logo (ci-dessus, avant la coupe), mais ne le jugez pas strictement, car je ne suis pas (plus) designer. Lors de la mise en œuvre de ce projet, j'ai priorisé la rapidité de déploiement, un minimum de paramètres 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 par souci de sécurité, et j'ai dû payer pour la portabilité pour un minimum de paramètres : dans la configuration actuelle, un Le conteneur une fois créé sur un serveur ne peut pas être transféré et lancé sur un autre. Par exemple, tous les certificats client et serveur sont générés au démarrage du service et cela prendra environ 2 secondes. Cependant, la génération du fichier Hellman Defi a dû être prise en compte dans le temps de construction : il est créé lors de la construction de l'image docker et peut durer jusqu'à 10 minutes. J'aimerais vraiment recevoir un audit de sécurité d'une telle solution de la part de la communauté respectée.

Запуск

Pour démarrer le service, nous avons besoin de plusieurs choses :

  1. Serveur : physique ou virtuel. Il est théoriquement possible de fonctionner en mode docker dans docker, mais je n'ai pas testé cette option de manière approfondie ;
  2. En fait Docker. De nombreux fournisseurs d'hébergement proposent des solutions prêtes à l'emploi avec Docker intégré ;
  3. Adresse IP publique.

Si tous les détails sont en place, il ne nous reste plus qu'à 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 aura peut-être remarqué que l'adresse IP du serveur est déterminée automatiquement à l'aide de 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 du but : il faut maintenant copier example.com (dans votre cas ce sera l'adresse de votre serveur) et collez-la dans la barre d'adresse de votre navigateur. Après avoir appuyé sur Entrée, le fichier client.ovpn sera téléchargé et le serveur http lui-même disparaîtra 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 des drapeaux zp et mot de passe. Maintenant, si vous collez le lien généré dans une fenêtre de navigateur, vous recevrez une archive zip avec un mot de passe. Une fois que vous avez un fichier de configuration client, vous pouvez utiliser n'importe quel client approprié. J'utilise Tunnelblick pour Mac.

Didacticiel 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, donnez-lui une étoile sur GitHub, partagez-le et parlez-en à vos amis. Les contributeurs et les audits de sécurité sont également largement les bienvenus.PPS Si cet article se retrouve sur Habr, alors je prévois d'écrire le suivant sur la façon dont j'ai lancé docker-in-docker et docker-in-docker-in-docker, pourquoi je l'ai fait et ce qui en a résulté.
EDIT1:

  1. Erreurs corrigées dans la publication,
  2. En réponse aux commentaires, j'ai décidé de mettre cette information ici : l'indicateur —privileged est nécessaire pour travailler avec iptables

EDIT2:

  1. Amélioration de la commande de lancement d'image : elle ne nécessite désormais plus l'indicateur –privileged
  2. Ajout d'un lien vers le guide vidéo en russe : youtu.be/A8zvrHsT9A0

Source: habr.com

Ajouter un commentaire