Назад | Перейти на главную страницу

Настройка аварийного переключения OpenVPN - маршрутизация к клиентам со статическими IP-адресами

У меня есть установка с сервером openvpn и много клиентов, подключенных к нему. Все эти клиенты имеют фиксированные IP-адреса, производные от имени их сертификата.

За сервером openvpn у меня есть сервер управления, который должен подключаться к клиентам (для мониторинга / выполнения некоторых удаленных команд).

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

Сервер A может подключаться к C1-4 через VPN, используя фиксированные IP-адреса.

Что я хочу сделать, так это расширить настройку на несколько серверов VPN (для обработки сбоев сервера и распределения нагрузки), сохраняя при этом простой способ для A найти любого конкретного удаленного клиента.

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

Я знаю, как настроить клиентов на случайный выбор одного из серверов openvpn, но я не знаю, как управлять выделением IP.

Должен ли я сохранить единую подсеть для серверов? В таком случае, как А узнает, за каким сервером находится IP-адрес? Должен ли я иметь одну подсеть на каждый сервер openvpn? В таком случае, как А узнает, с каким IP-адресом связаться?

Я немного изучил системы динамической маршрутизации, но мне пришлось бы управлять одним маршрутом для каждого IP-адреса клиента, что кажется очень неправильным ... Другой вариант - обновить службу DNS (или DNS-подобную) с сопоставлением { client-name => current ip address}, но это кажется сложным, и я не уверен, что весь наш программный стек может адаптироваться к нему.

Как обычно обрабатываются такие настройки аварийного переключения?

служба DNS (или похожая на DNS) обновлена ​​с сопоставлением {client-name => current ip address}

Передать это на сервере (ах) OpenVPN относительно легко с --client-connect скрипт на серверах 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