Route OpenBSD via différentes passerelles qui ont la même IP mais sur des interfaces différentes

9

J'ai plusieurs connexions VPN qui utilisent la même IP de passerelle (je n'ai pas la possibilité de changer cela car cela est hors de mon contrôle). Ces VPN fournissent tous un accès à différents réseaux, et les réseaux sont au moins un ou deux sauts en amont, donc une IP de passerelle est requise dans tous les cas. Avec Linux, pour router vers les réseaux, je peux simplement faire:

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 placera ensuite le trafic pour chaque réseau de destination sur les interfaces correctes, en direction de la bonne passerelle, donc peu importe que l'IP de la passerelle soit la même pour chaque interface.

Ma question est, comment puis-je y parvenir dans OpenBSD? J'ai essayé et échoué. Mes conclusions sont que pour une destination particulière, je peux soit:

  • spécifier une interface (si la destination est directement accessible sur ce lien - ce qui n'est pas le cas dans mon cas)
  • spécifier une IP de passerelle car la destination n'est pas directement sur le lien

Mais je ne sais pas comment spécifier les deux.

bao7uo
la source
Êtes-vous sûr qu'une passerelle est requise? Si la liaison est Ethernet et que la cible est à plus d'un saut, une passerelle est requise. Mais les VPN se comportent souvent comme des interfaces point à point qui n'ont pas besoin de passerelle.
kasperd
Oui, c'est absolument nécessaire car bien que les interfaces soient point à point, les réseaux de destination sont tous à plus d'un saut et il y a transfert IP et NAT impliqués
bao7uo
Les liens point à point ne se soucient pas des passerelles.
kasperd
ok, mais comment puis-je le faire fonctionner alors?
bao7uo
Que diriez-vous d'utiliser l' -Toption routeet de définir une table de routage pour chaque destination? Je pense qu'il fournit une meilleure "isolation" pour les règles par interface.
gmelis

Réponses:

1

Utilisez le modificateur -ifp pour router . Depuis la page de manuel :

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.

Donc, quelque chose comme ça fonctionne:

# 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 vos itinéraires de destination se chevauchent, vous pouvez utiliser les étiquettes pf et route pour les faire correspondre, ou les domaines de routage .

quadruplebucky
la source
Merci pour cela. Je l'ai essayé et je n'ai pas réussi à le faire fonctionner. Je ne pense pas que cela -ifaces'applique parce que l'adresse de la passerelle est pour un routeur en amont (saut suivant), pas une IP d'une interface sur la boîte openbsd elle-même. Lorsque j'ai supprimé le -iface, cela a fonctionné, mais uniquement pour la première interface VPN. Je peux donc le faire -ifp tap0et cela fonctionne, mais si je le fais, -ifp tap1il échoue no route to hostlorsque j'essaie d'ajouter l'itinéraire.
bao7uo
Même si cela n'a pas résolu le problème, je vous ai accordé la prime parce que je vous suis reconnaissant d'avoir essayé d'aider.
bao7uo
Je suis honnêtement déconcerté par ce que Linux fait sous le capot là-bas ... BSD fait la "bonne" chose en se plaignant du fait que gw n'est pas local. Avez-vous essayé les -link -llinfoindicateurs de la commande d'itinéraire? En outre, je pense que -ifacecela s'applique (vous obtenez l'erreur sans tables de routage / domians, comme vous l'avez noté, car la route réseau est en conflit et ne peut pas être ajoutée à nouveau). OpenVPN / tap? Vous vous demandez ce qui provisionne "l'autre" extrémité, si c'est un faux ptp.
quadruplebucky