2 秒內在 Docker 啟動 OpenVPN

哈布羅夫斯克居民大家好! 您是否曾經遇到過這樣的情況:您真的很想虛擬地傳送到另一個城市、國家或大陸? 我經常有這樣的需求,所以有機會擁有自己的VPN伺服器,可以在任何地方,幾秒鐘內啟動,是相當緊迫的。在這篇文章中,我想談談我的項目,這是我在尋找現成的解決方案,在本例中是Docker 映像,它允許您快速設定OpenVPN 伺服器,並具有最少的設定和可接受的安全等級。

2 秒內在 Docker 啟動 OpenVPN

在任何機器上運行服務的能力 - 無論是實體伺服器,還是虛擬專用伺服器,甚至另一個容器管理系統內的容器空間 - 都是至關重要的。 我的目光立刻落在了Docker身上。 首先,這項服務越來越受歡迎,因此越來越多的供應商提供預先安裝的現成解決方案; 其次,有一個集中的圖像存儲,您可以在其中使用終端中的一個命令下載並運行該服務。 我想到這樣一個項目應該已經存在,並且我努力尋找。 但我發現的大多數項目要么太麻煩(您必須創建一個用於永久數據存儲的容器,並使用不同的參數多次啟動帶有應用程序的容器),要么沒有合理的文檔,要么完全放棄。沒有找到任何可接受的東西,我開始從事你的專案。 在研究文件、編寫程式碼和調試之前,我度過了不眠之夜,但最終我的服務看到了曙光,並開始在路由器單色 LED 面板的所有顏色中閃閃發光。 所以,我請求你們去愛又青睞—— Docker-OpenVPN。 我甚至想出了一個標誌(上圖,在剪切之前),但不要嚴格判斷它,因為我(不再是設計師)。當我實現這個專案時,我優先考慮部署速度,至少設定和可接受的安全等級。 透過反覆試驗,我找到了這些標準的最佳平衡點,但是,在某些地方我不得不為了安全性而犧牲部署速度,並且我必須為最少的設定的可移植性付出代價:在當前的配置中,容器一旦在一台伺服器上創建,就無法在另一台伺服器上轉移和啟動。 例如,所有客戶端和伺服器憑證都是在服務啟動時產生的,這大約需要 2 秒。 然而,Hellman Defi 檔案的產生必須考慮到建置時間:它是在 docker 映像的建置過程中建立的,可持續長達 10 分鐘。 我真的很希望收到受人尊敬的社區對此類解決方案的安全審核。

Запуск

要啟動該服務,我們需要做幾件事:

  1. 伺服器:實體或虛擬。 理論上可以以 docker-within-docker 模式運行,但我沒有廣泛測試這個選項;
  2. 其實是Docker。 許多託管提供者提供帶有 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

細心的讀者可能已經注意到,伺服器 IP 位址是使用自動決定的 ipify.org。 如果由於某種原因這不起作用,那麼您可以手動指定地址。如果前面的所有步驟都正確完成,那麼我們應該在控制台中看到類似的內容:

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 上部署該服務的詳細說明。

聚苯乙烯 如果您覺得這個專案有用,請在 GitHub 上給它一個 star,fork 它並告訴您的朋友。 貢獻者和安全審計也受到廣泛歡迎。聚苯硫醚 如果這篇文章最終出現在 Habr 上,那麼我計劃寫下一篇關於我如何啟動 docker-in-docker 和 docker-in-docker-in-docker、為什麼這樣做以及結果是什麼。
EDIT1:

  1. 更正了出版品中的錯誤,
  2. 為了回應評論,我決定將這些資訊放在這裡:使用 iptables 需要使用 —privileged 標誌

EDIT2:

  1. 改進了圖像啟動命令:現在它不需要 –privileged 標誌
  2. 添加了俄語視頻指南的連結: youtu.be/A8zvrHsT9A0

來源: www.habr.com

添加評論