OPENVPN: балансировка + фиксированные IP клиентов = возможно ли?
Клиенты при подключении к OPENVPN серверу всегда получают фиксированные IP на основании записи CN в их сертификатах. Таким образом, их IP всегда принадлежит определенному IP диапазону.
OPENVPN поддерживает балансировку нагрузки/отказоустойчивость путем запуска дополнительных экземпляров сервера, к которым тыкается (перенаправляется) клиент.
Вопросы:
1. Возможен ли вариант балансировки на одном хосте? tun интерфейсы хоста в этом случае будут гейтами в одну и ту же подсеть (в которую подключаются все клиенты). Это может сломать маршрутизацию.
2. Какие варианты балансировки возможны при использовании нескольких нод openvpn? Есть требование не NAT-ить клиентов на нодах, а выпускать их в сеть с назначенными виртуальными IP. Можно ли обойтись без OSPF для обратной маршрутизации в сторону клиентов через правильную входную ноду?
1.В чем смысл балансировки на одном хосте? Балансировка нужно, если хост не справляется и нужно направить часть подключений на другой хост. Поэтому балансировать на одном хосте - полная фигня.
2.Самый простой вариант балансировки - с помощью двух записей А в ДНС для одного имени сервера OpenVPN. DNS в этом случае будет отдавать записи по round robin и у вас получится бесплатная балансировка.
Нужно будет на разных серверах OpenVPN назначать клиентам адреса разных подсетей, иначе, как вы сами правильно заметили начнутся грабли с маршрутизацией.
OSPF в такой конфигурации вообще не нужен.
1. Смысл в том, что openvpn однопоточная машинка. Если мы имеем 2 и более ядер - можно запустить 2 экземпляра и снизить риск затыка при большом числе клиентов (сотни).
2. Я не зря писал, что каждый клиент должен иметь фиксированный IP. Это означает, что мы не можем в зависимости от входной ноды назначать клиентам IP из разных подсетей. В этом и сложность.
Andymion, Честно говоря никогда не имел дела с openvpn с такой нагрузкой, поэтому не знаю как она себя ведет, но:
1. однопоточная не значит медленная, если однопоточная, то скорее всего там применен асинхронный ввод/вывод, а этот метод как раз используется в высоконагруженных серверах. Например nginx.
2.фиксированный IP - похоже вы сами себе злобный буратино. От НАТа вы отказались, IP менять вы не хотите. Как тогда будет осуществляться маршрутизация?
res2001, основные опасения связаны с просадкой шифрования в OpenVPN. Хотя, возможно, я драматизирую, т.к. трафик будет небольшим.
Касательно фикс-IP - так уж получается: IP клиента используется для аутентификации в конечном приложении, поэтому отказаться от такой схемы невозможно. Но есть предположение, что проблема лечится при помощи динамической маршрутизации.
Andymion, Возможно, что проблему можно решить динамической маршрутизацией, если анонсировать подсети с маской 32.
Если сервера с openvpn поставить за общим шлюзом, то, теоретически, на нем можно разруливать каналы сохраняя "состояния", т.е. например первый пакет от такого-то адреса пришел с 1 хоста, значит весь трафик на/с этого адреса будет пересылать через 1 хост, если со 2 хоста - то через него.
Нечто подобное делал на базе фаервола ipfw из состава FreeBSD - разруливал 2 канала в интернет от разных провайдеров. Думаю эту же технику можно применить и к вашей задаче.
Аналогичные возможности есть в фаерволе pf и iptables (если не ошибаюсь), но там это на более высоком уровне, не уверен, что подойдет для вашего случая. В этом плане ipfw более низкоуровневый инструмент, но позволяет все сделать более гибко с учетом конкретной специфики.