Доброго дня!
Есть сервер с виртуалками на базе Proxmox (KVM + OpenVZ). Допустим есть 2 бриджа (их больше, но суть не в этом) - vmbr0, который связан с физ. интерфейсом eth0 и связан с «внешним миром». Есть vmbr99 - который не связан с физическими интерфейсами и служит аналогом свитчка, в который «воткнуты» все виртуалки, с интерфейсами в подсети 192.168.99.0/24.
И есть виртуалка router, которая имеет 2 сетевых интерфейса, один подключен к vmbr0, другой к vmbr99. Соотв. она шлюз по умолчанию для связи всех виртуалок с «внешним» миром. Маршруты у неё динамические, через OSPF.
Т.е. задумка в том, что весь траф до виртулок (на которых крутятся сервисы), ходят через router, где этот трафик контролируется и фаерволлится. Т.к. пакеты крутятся только внутри ядра физической ноды, то задержек тут практически нет.
Соб-но вопрос в том, что теперь добавилась вторая нода Proxmox в кластер и есть желание организовать HA-кластер на этом деле, точнее хотя бы Failover с DRDB. С кластером вроде всё понятно, доки есть.
А вот как быть с сетью 192.168.99.0/24? Ведь бридж vmbr99 существует только в пределах одной физической ноды. Надо сделать так, чтобы виртуалки можно было мигрировать с одной ноды на другую, без изменения IP адреса.
Как это наиболее корректно сделать в данном случае? У меня навскидку мысль: на 2ой ноде поднимается такой же бридж vmbr99. Бриджи vmbr99 соединяются на обоих нодах через отдельный физический интерфейс, ну или через VLAN. Получаем как бы 2 виртуальных свитча, в каскаде друг с другом.
Но получается, что трафик с обоих нод ходит через виртуалку router на одной ноде, хотя вторая нода тоже подключена к «внешнему» миру.
Можно ли как-то на данном этапе сделать 2 виртуалки с роутерами на обоих нодах и каким-то образом «определять», какие из виртуалок находятся на какой физической ноде и соотв. трафик гнать через свой маршрутизатор? Пока вижу это в виде костыльного скрипта, который будет «точечные маршруты» (с маской /32) прописывать в OSPF, в зависимости от запущенной локально виртуалки. Но может есть более изящные решения?