У меня есть установка с сервером 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