Глобальная балансировка нагрузки сервера для OpenVPN через OpenVPN с DSR

Глобальная балансировка нагрузки сервера для OpenVPN через OpenVPN с DSR

Итак... Я ни в коем случае не являюсь профессионалом в вопросах сетей, балансировки нагрузки, туннелирования или VPN-подключений, НО я попробовал несколько вещей, чтобы заставить эту теоретическую концепцию работать, — очевидно, безуспешно.

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

Итак, моя идея была: поскольку наш хостер не предлагает частные сети, мне нужно удаленно соединить несколько серверов для балансировки нагрузки. Поэтому для целей тестирования я создал:

  • Сервер балансировки нагрузки, который также функционирует как внутренний VPN-сервер для создания сети, которая, как я понял, необходима для частного соединения серверов и размещения их в одной подсети.
  • Первый внешний узел сервера VPN, который находится «позади» сервера балансировки нагрузки в том смысле, что я хочу подключиться к балансировщику нагрузки, а затем перенаправить трафик на один из узлов, используя «наименьшее количество подключений», а затем напрямую подключить узел к клиенту (прямой возврат сервера), чтобы вся полоса пропускания не приходилась снова на балансировщик нагрузки.
  • Виртуальный IP (10.8.0.250)

После успешного создания VPN и подключения к нему узла у меня есть следующие IP-адреса:

10.8.0.1 (Load Balancer and internal VPN Server)
10.8.0.10 (First external VPN Server node)

На балансировщике нагрузки я включил переадресацию IP, создал следующую запись DNAT:

sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 1194 -j DNAT --to-destination 10.8.0.250

и следующая запись IPVS:

ipvsadm -A -u 10.8.0.250:1194 -s wlc
ipvsadm -a -u 10.8.0.250:1194 -r 10.8.0.10:1194 -g -w 1

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

По сути, я так и сделал, но это не сработало.

Теперь мой вопрос: есть ли шанс, что это вообще сработает, или я просто пытаюсь сделать что-то невозможное в том виде, в котором я это делаю? И если да, то как лучше всего это сделать, учитывая, что серверы будут подключены только через Интернет и нет возможности сгруппировать их вместе в одной частной сети.

Заранее спасибо за любые подсказки!

Связанный контент