Estou tentando configurar um cluster OpenVPN de alta disponibilidade para nós de trabalho com um IP fixo, independentemente do servidor OpenVPN ao qual eles se conectam. Este é um requisito, pois as coisas estão vinculadas especificamente a esse endereço IP. Eu estava planejando ter um etcd distribuído em cada nó mestre onde eu envio qual nó mestre tem quais nós trabalhadores (conectar / desconectar script com OpenVPN) e atualizar e atualizar a tabela de roteamento de cada mestre de acordo (observando a chave etcd).
Tudo será executado em contêineres docker.
Eu fiz um diagrama da situação que tenho agora com 3 nós mestres (M1, M2, M3), 3 nós operacionais (w1, w2, w3) e contêineres "sidecar" (M2M1, M3M1, M3M2) para conecte cada mestre aos outros mestres.
Com as seguintes tabelas de roteamento configuradas, tudo funciona bem, mas é necessário atualizar as rotas nos nós mestre e nos contêineres secundários.
Além dos padrões iptables -A FORWARD regras para garantir o tráfego é encaminhado entre interfaces eu só tinha que adicionar uma única regra iptables sobre os nós trabalhadores, por exemplo, 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
para w1, caso contrário, iria enviar os pacotes com o endereço IP primário. / p>
Euqueriasaberseépossívelconfigurarrotasbaseadasempolíticasnoscontêineressidecarparaterapenasaregra"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"
e o contrário "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"
. Se eu pudesse fazer isso, só precisaria manipular as rotas nos nós principais
Estou correto em marcar os pacotes com iptables e depois configurar 2 tabelas de rota, uma correspondente a cada marca e depois configurar a rota nessa tabela?
Eu tentei configurar uma ponte antes, mas não consegui que ela funcionasse.
(E se houver uma maneira muito melhor de configurar um cluster vpn com IPs fixos do que minha configuração complicada, deixe-me saber)
EDITAR:
Com a ajuda da resposta abaixo, testei as seguintes declarações para o M2M1, que funciona bem:
# 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
EDIT2:
Caso alguém esteja interessado em brincar com ele, eu configurei um repositório do github