在2秒钟内在Docker中运行OpenVPN

您好,哈布罗夫斯克市民! 您是否曾经遇到过您真正想去另一个城市,国家或另一个大陆旅行的情况? 我经常有这样的需求,因此拥有可以在几秒钟内任何地方启动的自己的VPN服务器的可能性非常迫切,在本文中,我想谈一谈我在寻找现成的解决方案(例如docker)时计划的项目该映像可让您以最少的设置和可接受的安全级别快速提升OpenVPN服务器。


背景知识

在任何机器上运行服务的能力至关重要:无论是物理服务器还是虚拟专用服务器,或者通常是另一个容器管理系统内部的容器空间。 我的目光立即落在Docker上。 首先,这项服务越来越受欢迎,因此,越来越多的提供商通过预安装提供交钥匙解决方案。 其次-有一个集中的图像存储库,您可以在其中从终端中的单个命令下载并启动该服务。 这样的项目应该已经存在的想法,拜访了我,我不断地寻找。 但是,我发现的大多数项目都太繁琐(有必要创建一个用于永久数据存储的容器,并使用具有不同参数的应用程序多次运行该容器),或者没有健全的文档,或者完全被放弃了。在您的项目上工作。 过去是学习文档,编写代码和调试的不眠之夜,但最终,我的服务看到了灯光,并以路由器单色LED面板的所有颜色进行了播放。 因此,请热爱和喜欢-Docker-OpenVPN 。 我什至想出了徽标(在上方),但由于我还不是设计师(因此)而没有严格的判断。实施该项目时,我专注于部署速度,最小的设置和可接受的安全级别。 通过反复试验,我找到了这些标准之间的最佳平衡,但是,在某些地方,我不得不牺牲部署速度来确保安全性,并且我不得不为最小的设置付出可移植性:在当前配置中,一旦在一台服务器上创建的容器就无法转移并在另一台服务器上运行。 例如,服务启动时将生成所有客户端和服务器证书,这大约需要2秒钟。 但是,必须在构建时取出Defi Hellman文件的生成:该文件是在docker映像的构建期间创建的,可以持续10分钟。 我非常希望收到备受尊敬的社区对此类解决方案的安全审核。

发射

要启动服务,我们需要做一些事情:
  1. 服务器:物理或虚拟。 从理论上讲,您可以在docker-in-docker模式下运行,但是我没有对该选项进行过广泛的测试。
  2. 其实是码头工人。 许多托管服务提供商通过Docker“板载”提供现成的解决方案。
  3. 公用IP地址。
如果所有详细信息都准备就绪,那么我们仍然可以在服务器的控制台中运行以下命令:
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 
细心的读者可能会注意到使用ipify.org自动确定服务器的IP地址这一事实。 如果由于某种原因这不起作用,那么您可以手动指定地址,如果前面的所有步骤都正确完成了,那么我们应该在控制台中看到类似的内容:
 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! 
我们已接近目标:现在我们需要复制example.com (在您的情况下,将是您服务器的地址)并将其粘贴到浏览器的地址栏中。 按下Enter键后,将下载client.ovpn文件,并且http服务器本身将被淘汰。 如果不确定此解决方案,则可以使用以下技巧:运行上一个命令并添加zp标志和密码。 现在,如果将生成的链接粘贴到浏览器窗口中,您将收到一个带有密码的zip归档文件。 我在Mac上使用Tunnelblick。

影片教学

该视频教程包含有关将服务部署到DigitalOcean的详细说明。 PS:如果您觉得这个项目有用,那么请在GitHub上给它加一个星号,并分叉并告诉您的朋友。 贡献者和安全审核也受到广泛欢迎。 PPS如果本文在Habr上发表,那么我计划就我如何启动docker-in-docker和docker-in-docker-in-docker编写以下内容,以说明我的工作方式及其结果。
编辑1:
  1. 更正了出版物中的错误,
  2. 在回应评论时,我决定将此信息放在此处:-使用iptables需要特权标志

编辑2:
  1. 改进的图像启动命令:现在不需要--privileged标志
  2. 添加了指向俄语视频指南的链接: youtu.be/A8zvrHsT9A0

Source: https://habr.com/ru/post/zh-CN458606/


All Articles