Networking

如何設置適當的 OpenVPN 基礎設施,以與中間的中央 OpenVPN 伺服器進行多個獨立的客戶端到客戶端通信

  • February 2, 2018

我在設置一個簡單的 OpenVPN 解決方案方面有一點經驗,其中一些客戶端連接到中央伺服器並在一個 VPN 中完全通信。

然而,我現在要從頭開始建立一個 OpenVPN 基礎設施,如果我考慮的方法是合理的,我會質疑自己。OpenVPN 基礎設施具有以下特點:

  • 有兩種類型的N個站點:

    • 移動網站
    • 固定站點
  • 從邏輯上講,每個移動站點都有一個指定的固定站點

  • 站點A 的固定客戶端只能與站點A的移動客戶端通信,反之亦然

  • 每個站點的一個或多個移動客戶端 (linux)應通過移動網路連接到中央伺服器 (linux),因此由於提供商的 NAT,沒有可以直接訪問的固定 IP。

  • 每個站點的一個或多個固定客戶端(視窗)應連接到一個中央伺服器。這些客戶端中的每一個都應該有可能連接到移動客戶端之一或移動客戶端的子集。但是,固定客戶端一次不得與多個移動客戶端通信。

  • 兩個連接的客戶端之間的通信應該與所有其他可能建立的連接隔離。

  • 移動客戶端最有可能嘗試始終與中央伺服器建立連接。但它們可能被配置為僅根據請求進行連接。

  • 固定客戶端可以隨時與中央伺服器建立連接,並且能夠立即與所需的移動客戶端通信(當然,當它也連接時)

  • 一個移動站點的所有移動客戶端之間的通信或一個移動站點的一部分客戶端之間的通信可能是未來的需求。然而,即使給出了該要求,固定客戶端仍可能僅連接到一個移動客戶端。

  • 固定客戶端,即使屬於同一個站點也不必相互交談

  • 一個負責基礎設施的管理固定客戶端必須有權訪問每個移動客戶端(一次一個),無論它屬於哪個站點。管理客戶永遠不必與固定客戶之一交談。

  • 整個基礎設施(首先)將讓所有移動客戶端都配備 OpenVPN 2.1.3,該版本已經很老了,可能會隨著韌體更新而改變(我不負責)。固定客戶端和伺服器將擁有更新版本的 OpenVPN。

  • 在固定客戶端和移動客戶端之間定期傳輸的數據量非常低(我預計它會少於幾 KiB/s),但是隨著時間的推移,這可能會增加很多,這取決於我們將來會使用哪些額外的通信技術.

經過一番閱讀和思考,我想出了一個想法,所有這些要求都可以通過以下方式滿足:

  • 提供單個中央 OpenVPN 伺服器(考慮使用包含 docker 的解決方案,如https://github.com/kylemanna/docker-openvpn
  • 提供腳本化的基礎設施,管理員可以在其中請求一對固定證書/pk 和移動證書/pk,並在 OpenVPN 伺服器中執行配置更改,根據使用的通用名稱設置一些路由/IP 配置。
  • 通過簡單地使用特定的證書/pk 對連接到伺服器,在固定客戶端中提供選擇所需移動目標的可能性。

這聽起來像是滿足要求的合理機制嗎?如果考慮到可擴展性和速度的方法,我應該設置類似的東西還是應該對替代方案進行一些研究(甚至是 OpenVPN 以外的其他技術?)

感謝您提前輸入

抱歉,我沒有時間完全考慮您的答案(儘管我承認,對於如此出色的解釋,這在 SO 格式中很少見),但這裡列出了您可能還不熟悉但可能對您有所幫助的各種想法向前走:

  • 您可能在單個伺服器上執行多個 OpenVPN 實例(在不同的埠上);這可以提供客戶端組的粗粒度分離(參見下面的 Netfilter)。
  • 使用拓撲subnet連接您的客戶端並將它們放入不同的私有子網;您可能擁有由 OpenVPN 伺服器實例使用的任意數量的專用網路。
  • 在伺服器配置中啟用client-to-client選項以允許客戶端在單個 OpenVPN 伺服器實例的上下文中相互通信。
  • 用於push "route <addr> <netmask>"告訴客戶端他們可以通過他們的 OpenVPN 連接訪問哪些其他 網路(即,除了他們的“本機”網路——他們在連接時碰巧連接到的網路);請注意,您可能需要iroute在 OpenVPN 配置中包含匹配的指令。
  • 您可以通過client-config-dir參數(稱為ccd)使用特定於客戶端的配置片段;這允許將特定的路由指令推送到特定的客戶端,以便不同的客戶端可以在需要時連接到不同的網路集。
  • iptables當您完成OpenVPN設置後,您FORWARD可以使用 Netfilter 規則(其他。
  • 也可以讓 OpenVPN 接受提供具有相同通用名稱 (CN) 證書的客戶端的同時連接;這可以作為最後的手段,將相同的設置應用於不同的客戶端(通常通過ccd上面提到的機制)。我要強調這是最後的解決方案,因為它排除了細粒度地撤銷單個客戶的訪問權限。

希望這可以幫助!

引用自:https://serverfault.com/questions/895298