Назад | Перейти на главную страницу

Уменьшение количества статических маршрутов в VPN-кластере

Я пытаюсь настроить кластер OpenVPN высокой доступности для рабочих узлов с фиксированным IP-адресом, независимо от того, к какому серверу OpenVPN они подключаются. Это требование, поскольку все привязано именно к этому IP-адресу. Я планировал иметь распределенный etcd на каждом главном узле, где я нажимаю, какой главный узел имеет какие рабочие узлы (сценарий подключения / отключения с OpenVPN) и обновляю, а затем обновляю таблицу маршрутизации каждого мастера соответственно (путем просмотра ключа etcd).

Все будет работать в контейнерах докеров.

Я сделал диаграмму ситуации, которая у меня сейчас есть с 3 главными узлами (M1, M2, M3), 3 рабочими узлами (w1, w2, w3) и контейнерами "sidecar" (M2M1, M3M1, M3M2) для подключения каждого мастера. остальным мастерам.

При настройке следующих таблиц маршрутизации все работает нормально, но требует обновления маршрутов как на главных узлах, так и на дополнительных контейнерах. Помимо стандартных правил iptables -A FORWARD для обеспечения перенаправления трафика между интерфейсами, мне нужно было добавить только одно правило iptables на рабочие узлы, например iptables -A POSTROUTING -o tap0 -m iprange --dst-range 5.0.0.0-5.255.255.255 -j SNAT --to-source 5.0.0.1 -t nat для w1, иначе он будет отправлять пакеты с основным IP-адресом.

Мне было интересно, можно ли настроить маршруты на основе политик в контейнерах sidecar, чтобы просто иметь правило "if it's coming from tap0 and it's from an ip in 5.0.0.0/8 then put it on eth0 towards the master node inside the same subnet" и наоборот "if it's coming from eth0 and it's in an ip in 5.0.0.0/8 then put it on tap0 towards the vpn gateway". Если бы я мог это сделать, мне просто нужно было бы манипулировать маршрутами на главных узлах.

Правильно ли я, что мне нужно будет пометить пакеты с помощью iptables, а затем настроить 2 таблицы маршрутов, по одной соответствующей каждой метке, а затем настроить маршрут в этой таблице?

Раньше я пытался установить мост, но у меня не получалось заставить его работать.

(И если есть гораздо лучший способ настроить кластер vpn с фиксированными IP-адресами, чем моя довольно запутанная установка, дайте мне знать)

РЕДАКТИРОВАТЬ:

С помощью приведенного ниже ответа я протестировал следующие утверждения для M2M1, которые отлично работают:

# Create the 2 tables to add specific routes on
echo "2     toeth" >> /etc/iproute2/rt_tables
echo "3     totap" >> /etc/iproute2/rt_tables

# Everything coming from eth0 will be going to the totap table and everything from tap0 will be going to the toeth table
ip rule add table totap iif eth0
ip rule add table toeth iif tap0

# Add the routes but on the specific table
ip r r 5.0.0.0/8 via 192.168.1.1 table totap
ip r r 5.0.0.0/8 via 172.30.2.2 table toeth

РЕДАКТИРОВАТЬ2:

На случай, если кому-то интересно поиграться с ним, я установил репозиторий github

Ты можешь использовать ip rule (видеть man ip-rule) для настройки конкретных таблиц маршрутизации на основе IP-адреса источника или назначения и на основе интерфейса источника или назначения. Он должен быть в состоянии достичь того, чего вы хотите.

SELECTOR := [ from PREFIX ] [ to PREFIX ] [ iif STRING ] [ oif STRING ] ...