Configuração de failover do OpenVPN - Roteamento para clientes com ips estáticos

1

Eu tenho uma configuração com um servidor openvpn e muitos clientes conectados a ele. Todos esses clientes têm endereços IP fixos, derivados do nome do certificado.

Por trás do servidor openvpn, eu tenho um servidor de gerenciamento, que precisa se conectar aos clientes (para monitorar / executar alguns comandos remotos).

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

O servidor A pode se conectar ao C1-4 através da VPN, usando ips fixos.

O que eu quero fazer é expandir a configuração para vários servidores VPN (para lidar com interrupções do servidor e distribuir a carga), enquanto ainda tenho uma maneira simples de encontrar um cliente remoto específico.

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

Eu sei como configurar os clientes para escolher um dos servidores openvpn aleatoriamente, o que eu não sei é como gerenciar a alocação de ip.

Devo manter uma única sub-rede para os servidores? Nesse caso, como A sabe por trás de qual servidor está um ip? Devo ter uma sub-rede por servidor openvpn? Nesse caso, como A sabe qual endereço IP entrar em contato?

Eu procurei um pouco nos sistemas de roteamento dinâmico, mas eu teria que gerenciar uma rota por cliente ip, o que parece muito errado ... Outra opção seria manter um serviço DNS (ou DNS-like) atualizado com o mapeamento {client-name = > endereço IP atual}, mas isso parece complicado, e não tenho certeza se toda a nossa pilha de software pode se adaptar a ela.

Como esse tipo de configuração de failover geralmente é tratado?

    
por Matt Benzene 18.12.2014 / 18:49

1 resposta

1

a DNS (or DNS-like) service updated with the mapping {client-name => current ip address}

Entregar isso no (s) servidor (es) OpenVPN é relativamente fácil com um script --client-connect nos servidores OpenVPN. O script de conexão do cliente recebe o endereço IP da nova conexão. Você pode usar isso para chamar o nsupdate para ajustar seus registros de DNS.

Aqui está um script antigo que registrei o endereço externo do cliente de conexão. Qual não é o que você quer, mas eu tenho certeza que você pode encontrar as variáveis certas se você revisar a seção Environmental Variables da página man.

#!/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
    
por 18.12.2014 / 20:15