Ruta OpenBSD a través de diferentes puertas de enlace que tienen la misma IP pero en diferentes interfaces

9

Tengo varias conexiones VPN que usan la misma puerta de enlace IP (no tengo la capacidad de cambiar esto, ya que está fuera de mi control). Todas estas VPN proporcionan acceso a diferentes redes, y las redes tienen al menos uno o dos saltos aguas arriba, por lo que se requiere una IP de puerta de enlace en todos los casos. Con Linux, para enrutar a las redes, simplemente puedo hacer:

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.

Linux colocará el tráfico para cada red de destino en las interfaces correctas, en dirección a la puerta de enlace correcta, por lo que no importa que la IP de la puerta de enlace sea la misma para cada interfaz.

Mi pregunta es, ¿cómo puedo lograr esto en OpenBSD? Lo he intentado y he fallado. Mis hallazgos son que para un destino en particular, puedo:

  • especificar una interfaz (si el destino es directamente accesible en ese enlace, que no es en mi caso)
  • especifique una IP de puerta de enlace porque el destino no está directamente en el enlace

Pero no puedo entender cómo especificar ambos.

bao7uo
fuente
¿Estás seguro de que se requiere una puerta de enlace? Si el enlace es Ethernet y el objetivo está a más de un salto, se requiere una puerta de enlace. Pero las VPN a menudo se comportan como interfaces punto a punto que no necesitan una puerta de enlace.
kasperd
Sí, sin duda es necesario ya que aunque las interfaces son de punto a punto, las redes de destino son todos más de un salto de distancia y hay reenvío IP y NAT implicados
bao7uo
Los enlaces punto a punto no se preocupan por las puertas de enlace.
Kasperd
ok, pero ¿cómo puedo hacer que funcione entonces?
bao7uo
¿Qué tal usar la -Topción routey definir una tabla de enrutamiento para cada destino? Creo que proporciona un mejor "aislamiento" para las reglas por interfaz.
gmelis

Respuestas:

1

Use el modificador -ifp para enrutar . Desde la página del 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.

Entonces algo como esto 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

Si sus rutas de destino se superponen, puede usar etiquetas de ruta y pf para unir o enrutar dominios .

quadruplebucky
fuente
Gracias por esto. Lo he intentado y no pude hacerlo funcionar. No creo que se -ifaceaplique porque la dirección de la puerta de enlace es para un enrutador ascendente (siguiente salto), no una IP de una interfaz en el cuadro openbsd en sí. Cuando eliminé la cara, funcionó, pero solo para la primera interfaz VPN. Entonces puedo hacerlo -ifp tap0y funciona, pero si lo hago -ifp tap1, falla no route to hostcuando trato de agregar la ruta.
bao7uo
Aunque no resolvió el problema, te he otorgado la recompensa porque estoy agradecido de que hayas intentado ayudar.
bao7uo
Sinceramente, estoy desconcertado por lo que Linux está haciendo debajo del capó ... BSD está haciendo lo "correcto" al quejarse de que gw no es local. ¿Has probado las -link -llinfobanderas del comando de ruta? Además, creo que -ifacesí se aplica (se obtiene el error sin enrutar tablas / dominios, como notó, porque la ruta de red entra en conflicto y no se puede agregar nuevamente). OpenVPN / tap? Preguntándose qué está aprovisionando el "otro" extremo, si es un ptp falso
quadruplebucky