Adicionando várias rotas estáticas para o mesmo host a diferentes gateways

1

Eu tenho 2 clientes openvpn conectados a dois servidores diferentes, nos dispositivos tun0 e tun1.

Eu preciso adicionar duas rotas estáticas para o mesmo IP do host e mapeá-las para dois gateways e dispositivos diferentes.

Eu executei estes dois comandos:

route add -host 69.30.217.90 gw 10.197.2.1 dev tun0
route add -host 69.30.217.90 gw 10.197.14.1 dev tun1

Quando faço uma solicitação CURL e especifico o dispositivo a ser usado, somente a segunda rota funciona. Uma vez que eu deletei (parando a instância openvpn) a primeira rota funciona.

Existe alguma maneira de fazer as duas rotas funcionarem, dependendo de qual dispositivo eu uso para fazer a solicitação?

EDITAR:

Devo acrescentar que este é um exemplo simplificado.

Eu realmente preciso ter até 5 túneis openvpn ao mesmo tempo, e o tempo de vida da rota é de ~ 1s, apenas o suficiente para fazer uma única solicitação de onda.

Meu propósito é testar os servidores VPN se eles estiverem funcionando adequadamente, de maneira semelhante a um cliente durante o uso normal, conectando-se ao servidor, fazendo uma solicitação através do túnel e comparando com a resposta esperada.

A execução de uma única instância do daemon de teste funciona muito bem, no entanto, o conjunto de testes completo demora aproximadamente 20 segundos e levaria muito tempo para testar centenas de servidores. Eu posso executar vários deles em paralelo, no entanto, eles acabam pisando nas rotas uns dos outros.

    
por Yegor 28.12.2015 / 23:51

1 resposta

0

Eu tive problemas de correspondência por oif. Eu suspeito (mas não tenho certeza) porque a decisão da interface de saída é tomada depois de decidir qual entrada de rota usar.

Mas você pode combinar o endereço IP de saída e fazer o roteamento de políticas.

Por exemplo:

echo "100 TUN" >> /etc/iproute2/rt_tables
ip route add 10.197.2.0/24 dev tun0 table TUN
ip route add 69.30.217.90 via 10.197.2.1 dev tun0 table TUN 
ip rule add from 10.197.2.8 table TUN

O echo cria um alias para a tabela de roteamento # 100 (daqui em diante TUN) para que possa ser referido pelo nome nos comandos iproute2.

O primeiro comando de rota adiciona a rede básica no link para tun0 na tabela TUN. Isso deve ser definido para a mesma rede que a rota pré-existente em sua tabela padrão.

O segundo comando route adiciona o host e o gateway específicos associados ao tun0 na tabela TUN.

Finalmente, a regra corresponde aos pacotes pelo IP de origem. O valor aqui deve ser alterado para o endereço da interface local no tun0 ou toda a rede não sobreposta também funcionaria. Ele direciona os pacotes que correspondem a essa regra para usar a tabela TUN, que seria roteada de acordo com as rotas que adicionamos anteriormente a essa tabela.

Você pode querer experimentar a regra de correspondência oif. Isso nunca funcionou para mim, mas ymmv:

ip rule add oif tun0 table TUN
    
por 29.12.2015 / 06:12

Tags