Linux

Openvpn 故障轉移設置 - 使用靜態 IP 路由到客戶端

  • December 18, 2014

我有一個帶有 openvpn 伺服器和許多連接到它的客戶端的設置。所有這些客戶端都有固定的 IP 地址,來自他們的證書名稱。

在 openvpn 伺服器後面,我有一個管理伺服器,它需要連接到客戶端(以監視/執行一些遠端命令)。

                |-C1
                |-C2
A -- VPN server -|
                |-C3
                |-C4

伺服器 A 可以通過 VPN 連接到 C1-4,使用固定的 ips。

我想要做的是將設置擴展到多個 VPN 伺服器(以處理伺服器中斷並分散負載),同時仍然有一種簡單的方法讓 A 找到任何特定的遠端客戶端。

                 |-C1
                 |-C2
--- VPN server 1 -|
|
A
|
--- VPN server 2 -|
                 |-C3
                 |-C4

我知道如何配置客戶端以隨機選擇其中一台 openvpn 伺服器,但我不知道如何管理 IP 分配。

我應該為伺服器保留一個子網嗎?在那種情況下,A如何知道一個ip在哪個伺服器後面?每個 openvpn 伺服器應該有一個子網嗎?在這種情況下,A 怎麼知道要聯繫哪個 IP 地址?

我對動態路由系統進行了一些研究,但我必須為每個客戶端 ip 管理一個路由,這似乎非常錯誤……另一種選擇是使用映射更新 DNS(或類似 DNS)服務 { client-name => current ip address},但這看起來很複雜,我不確定我們所有的軟體堆棧都可以適應它。

通常如何處理這種故障轉移設置?

使用映射 {client-name => current ip address} 更新的 DNS(或類似 DNS)服務

--client-connect使用 OpenVPN 伺服器上的腳本,在 OpenVPN 伺服器上處理這個相對容易。客戶端連接腳本被傳遞新連接的 IP 地址。然後,您可以使用它呼叫 nsupdate來調整您的 DNS 記錄。

這是我記錄連接客戶端的外部地址的舊腳本。Environmental Variables這不是您想要的,但是如果您查看手冊頁的部分,我相信您可以找到正確的變數。

#!/bin/sh

# expects variables like from openvpn
#common_name=server1.example.org
#trusted_ip=192.168.47.1

dnssrv="192.168.0.1"
zone="vpn.example.org"
ttl="7200"

record=`echo ${common_name} | sed -e 's/example.org/vpn.example.org/'`

echo "client-connect.sh ${common_name} ${trusted_ip} ${record}" | logger

(
echo "server ${dnssrv}"
echo "zone ${zone}"

echo "update delete ${record} A"
echo "update add ${record} ${ttl} A ${trusted_ip}"
echo "send"
) | /usr/bin/nsupdate

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