В процессе своей работы я постоянно вынужден решать задачи повышенной 3.14**оватости. Вот одна из них (картинка кликабельна).
Дано. Некая подсеть с серверами (192.168.1.0/24), удалённые клиенты подключаются к ней при помощи OpenVPN через основной VPN-терминатор (192.168.1.2). Примерный конфиг OpenVPN-демона на терминаторе:
proto udp
dev tun
keepalive 30 60
topology subnet
client-config-dir ccd
server 192.168.100.0 255.255.255.0
К нему цепляется некоторое количество "одиночных" клиентов, а также так называемые "выносы".
Типичный "вынос" представляет собой OpenWRT-роутер на базе какого-нибудь TL-WR842ND, который держит на себе второй "конец" OpenVPN-тоннеля. А уже "за его спиной" находится какое-то количество активных устройств (принтеры, компы, телефоны и т.п.). На схеме показан пример с адресацией 192.168.2.0/24.
Для обеспечения отказоустойчивости "вынос" цепляется к "основному" терминатору "двумя ногами". Через какого-нибудь Ethernet-провайдера и параллельно через LTE-модем. Для того, чтобы можно было "держать" параллельно два тоннеля через разных провайдеров (со стороны выноса), на основном терминаторе запущен второй instance демона OpenVPN, слушающий на другом UDP-порту и с другой директивой "server" внутри конфига. На моей иллюстрации это выглядит как "server 192.168.101.0 255.255.255.0".
Таким образом, имеем: терминатор, вынос, по одному L2-сегменту Ethernet-сети за терминатором и за выносом, два параллельно работающих тоннеля между выносом и терминатором (через разных провайдеров).
Вопрос. Каким способом наиболее православно обеспечивать динамическую маршрутизацию между сетями 192.168.1.0/24 и 192.168.2.0/24 в указанной схеме?
То, что мне приходит в голову прямо сейчас. Самое простое. У OpenVPN-а есть директивы "client-connect", "client-disconnect", "up", "down". На них можно "подвесить" тупо bash-евые скрипты, которые будут прописывать / удалять маршрут через соответствующий тоннель.
Это всё хорошо, пока выносов не слишком много. Потом хочется уже иметь что-то более "автоматическое". Пока смотрю в сторону
Bird-а. Тем более, что команда энтузиастов его целенаправленно подпиливает на предмет совместимости с OpenWRT. Вопрос, какой протокол динамической маршрутизации подключать. Особенно учитывая, что мощность железа в пресловутых TP-Link-ах оставляет желать лучшего. Плюс меня несколько смущает, что Bird на терминаторе будет "гадить" своими мультикастами во все туннели сразу. Что не смертельно, но не очень-то и приятно. Потому что среди клиентов есть и мобильные, с крайне медленными и дорогими линками.
Ну и вопрос номер 2. Допустим, я хочу построить некую приватную сеть а-ля mesh на подконтрольных мне узлах, где в качестве логических линков между ними будут использоваться либо OpenVPN, либо GRE over IPSec. Опять же, какой протокол динамической маршрутизации имеет смысл привлекать с целью обеспечения связности внутри своего "Стаснета"? Также очень хочется иметь возможность лёгким движением руки, быстро и ненавязчиво уметь менять маршрут прохождения пакета из точки А в точку Б внутри "Стаснета" через другую цепочку узлов. Существуют ли сейчас какие-нибудь готовые решения для реализации подобного рода хотелок?
Если чо, я имею в виду Linux и OpenWRT конечно же. Всякие там Cisco, Juniper, Mikrotik и прочая энтерпрайзщина и проприетарщина не интересуют.