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

我有一个openvpn服务器和许多客户端连接到它的设置。 所有这些客户端都有固定的IP地址,从他们的证书名称派生。

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

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

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

我想要做的是将设置扩展到多个VPN服务器(处理服务器中断,并分散负载),同时还有一个简单的方法来find任何特定的远程客户端。

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

我知道如何configuration客户端随机select一个openvpn服务器,我不知道如何pipe理ip分配。

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

我已经看了一下dynamic路由系统,但我将不得不pipe理一个路由每个客户端ip,这似乎是非常错误的…另一种select是保持一个DNS(或DNS样)服务更新映射{客户端名称=>当前的IP地址},但看起来很复杂,我不确定我们所有的软件栈都能适应它。

这种故障转移机制通常如何处理?

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

使用OpenVPN服务器上的--client-connect脚本,在OpenVPN服务器上处理相对简单。 客户端连接脚本传递新连接的IP地址。 然后您可以使用它来调用nsupdate来调整您的DNSlogging。

这是一个老脚本,我logging了连接客户端的外部地址。 这不是你想要的,但是我相信你可以find正确的variables,如果你查看手册页的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