Маршрутизация Hetzner Failover IP
Имеется вот такой «сетап»
Вводные данные:
- Failover IP - IP который может быть переключен на любой из серверов, Хецнер маршрутизирует трафик до главного IP нужного сервера, дальше сам сервер должен маршрутизировать трафик до ВМ. Сами сервера «не знают» направлен на них Failover IP или нет. Можно делать запрос к API и узнавать, но у API лимит 100 запросов в час, особо не разгонишься.
- 3 KVM гипервизора, на 2-х имеются ВМ которые используют Failover IP.
- Failover IP подключен на KVM Host 1
- Настройка vmbr2 на хосте
auto vmbr2 iface vmbr2 inet manual bridge_ports none bridge_stp off bridge_fd 0
- Настройка интерфейса и маршрутов на ВМ
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 86:47:47:fb:a7:ff brd ff:ff:ff:ff:ff:ff inet 46.4.100.100 peer 88.99.99.100/32 scope global ens18 valid_lft forever preferred_lft forever # ip route show default via 172.21.3.1 dev ens19 88.99.99.100 dev ens18 proto kernel scope link src 46.4.100.100 # ip rule sh 0: from all lookup local 32765: from 46.4.100.100 lookup 10 32766: from all lookup main 32767: from all lookup default # ip route show table 10 default via 88.99.99.100 dev ens18
Задача в том, чтоб внешние клиенты и все ВМ размещенные на гипервизорах могли получать доступ обращаясь к ресурсам которые расположены на Failover IP.
Простейший вариант, чтоб трафик проходил до ВМ, на каждом гиервизоре прописываю маршрут
ip route add 46.4.100.100/32 dev vmbr2
Альтренативный вариант с использованием policy based routing, дающий немного лучший результат
ip route add 46.4.100.100/32 dev vmbr2 table 11
ip rule add to 46.4.100.100 table 11
ip rule add to 46.4.100.100 iif vmbr1 table main
# ip rule sh
0: from all lookup local
32763: from all to 46.4.100.100 iif vmbr1 lookup main
32764: from all to 46.4.100.100 lookup 11
32765: from all lookup main
32766: from all lookup default
from all to 46.4.100.100 iif vmbr1 lookup main
и уходит в основную таблицу маршрутизации, соответственно отправляется на шлюз
по умолчанию, т.е. на оборудование Хеценра, которое маршрутизирует трафик на текущий
активный Failover IP сервер, т.е. на KVM Host 1, на KVM Host 1 трафик попадает под правило
from all to 46.4.100.100 lookup 11
и уходит на VM10 через vmbr2.
Проблема в том что это не работает для машин на KVM1, трафик улетает в Хецнер и
на этом все кончается, видимо шлюз «видит» что после прохождения таблицы маршрутизации SRC = DST
и ничего никуда не шлет.Можно ли вообще данную задачу решить средствами статической маршрутизации или необходима динамическая маршрутизация?