Openvpn 故障转移设置 - 使用静态 IP 路由到客户端

Openvpn 故障转移设置 - 使用静态 IP 路由到客户端

我设置了一个 openvpn 服务器,并有许多客户端连接到该服务器。所有这些客户端都有固定的 IP 地址,这些地址来自其证书名称。

在 openvpn 服务器后面,我有一个管理服务器,它需要连接到客户端(以监视/执行一些远程命令)。

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

服务器A可以通过VPN连接到C1-4,使用固定IP。

我想要做的是将设置扩展到多个 VPN 服务器(以处理服务器中断并分散负载),同时仍然让 A 以一种简单的方式找到任何特定的远程客户端。

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

我知道如何配置客户端随机选择其中一个 openvpn 服务器,但我不知道如何管理 ip 分配。

我应该为服务器保留一个子网吗?在这种情况下,A 如何知道 IP 位于哪个服务器后面?我应该为每个 openvpn 服务器设置一个子网吗?在这种情况下,A 如何知道要联系哪个 IP 地址?

我研究过一些动态路由系统,但我必须为每个客户端 IP 管理一个路由,这似乎非常错误...另一种选择是使用映射 {client-name => 当前 IP 地址} 保持 DNS(或类似 DNS)服务更新,但这看起来很复杂,而且我不确定我们所有的软件堆栈是否都能适应它。

通常如何处理这种故障转移设置?

答案1

使用映射 {客户端名称 => 当前 IP 地址} 更新的 DNS(或类似 DNS)服务

使用 OpenVPN 服务器上的脚本在 OpenVPN 服务器上处理此问题相对容易--client-connect。客户端连接脚本会传递新连接的 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

相关内容