Rota do OpenBSD através de diferentes gateways que possuem o mesmo IP, mas em interfaces diferentes

9

Tenho várias conexões VPN que usam o mesmo IP de gateway (não tenho a capacidade de alterar isso, pois está fora de meu controle). Todas essas VPNs fornecem acesso a redes diferentes, e as redes são pelo menos um ou dois saltos a montante, portanto, um IP de gateway é necessário em todos os casos. Com o Linux, para rotear para as redes, eu posso simplesmente fazer:

ip route add $destination_1 via $gateway_ip dev $interface_1
ip route add $destination_2 via $gateway_ip dev $interface_2
ip route add $destination_3 via $gateway_ip dev $interface_3

etc.

O Linux colocará o tráfego de cada rede de destino nas interfaces corretas, para o gateway correto, portanto, não importa que o IP do gateway seja o mesmo para cada interface.

Minha pergunta é: como posso conseguir isso no OpenBSD? Eu tentei e falhei. Minhas conclusões são de que, para um destino específico, posso:

  • especifique uma interface (se o destino estiver diretamente acessível nesse link - o que não acontece no meu caso)
  • especifique um IP de gateway porque o destino não está diretamente no link

Mas não consigo descobrir como especificar os dois.

bao7uo
fonte
Tem certeza de que um gateway é necessário? Se o link for Ethernet e o destino estiver a mais de um salto, será necessário um gateway. Mas as VPNs geralmente se comportam como interfaces ponto a ponto que não precisam de um gateway.
precisa saber é o seguinte
Sim, é definitivamente necessária como embora as interfaces são ponto-a-ponto, as redes de destino são todos mais de um hop de distância e há o encaminhamento de IP e NAT envolvidos
bao7uo
Links ponto a ponto não se importam com gateways.
precisa saber é o seguinte
ok, mas como posso fazê-lo funcionar?
precisa saber é
Que tal usar a -Topção routee definir uma tabela de roteamento para cada destino? Eu acho que fornece melhor "isolamento" para as regras de interface.
gmelis

Respostas:

1

Use o modificador -ifp para rotear . Na página do manual :

In a change or add command where the destination and gateway are not
sufficient to specify the route, the -ifp or -ifa modifiers may be 
used to determine the interface name or interface address.

Então, algo assim funciona:

# for  arg in tun0 tun1 tun2; do ifconfig $arg  192.168.11.1/24; done
# route add 10/8 -iface 192.168.11.1 -ifp tun0
add net 10/8: gateway 192.168.11.1
# route add 172.16/12 -iface 192.168.11.1 -ifp tun1
add net 172.16/12: gateway 192.168.11.1
# route add 192.168.254/24 -iface 192.168.11.1 -ifp tun2
add net 192.168.254/24: gateway 192.168.11.1
# route show -inet
Routing tables

Internet:
Destination        Gateway            Flags   Refs      Use   Mtu  Prio 
Iface
10/8               192.168.11.1       GS         0        0     -     8 tun0
localhost          localhost          UHl        0       22 32768     1 lo0
172.16/12          192.168.11.1       S          0        0     -     8 tun1
192.168.11.1       192.168.11.1       UHhl       1        4     -     1 tun0
[...my real routes omitted...]
192.168.254/24     192.168.11.1       S          0        0     -     8 tun2

Se as rotas de destino estiverem sobrepostas, você poderá usar pf e etiquetas de rota para corresponder ou domínios de roteamento .

quadruplebucky
fonte
Obrigado por isso. Eu tentei e não consegui fazê-lo funcionar. Eu não acho que -ifacese aplica porque o endereço do gateway é para um roteador upstream (próximo salto), não para um IP de uma interface na própria caixa do openbsd. Quando removi o -iface, ele funcionou, mas apenas para a primeira interface VPN. Para que eu possa fazer -ifp tap0e funcione, mas se o fizer -ifp tap1falhar no route to hostquando tento adicionar a rota.
bao7uo
Mesmo que não tenha resolvido o problema, eu lhe concedi a recompensa porque sou grato por você ter tentado ajudar.
precisa saber é
Sinceramente estou intrigado com o que o linux está fazendo sob o capô lá ... O BSD está fazendo a coisa "certa" reclamando sobre o gw não ser local. Você já tentou as -link -llinfobandeiras no comando route? Além disso, acho -ifaceque se aplica (você obtém o erro sem rotear tabelas / domians, como você observou, porque a rota de rede entra em conflito e não pode ser adicionada novamente). OpenVPN / torneira? Imaginando o que está provisionando o "outro" fim, se é um ptp falso.
Quadruplebucky