OpenBSD-Route über verschiedene Gateways mit derselben IP-Adresse, jedoch auf unterschiedlichen Schnittstellen

9

Ich habe mehrere VPN-Verbindungen, die dieselbe Gateway-IP verwenden (ich kann dies nicht ändern, da es außerhalb meiner Kontrolle liegt). Diese VPNs bieten alle Zugriff auf verschiedene Netzwerke, und die Netzwerke sind mindestens ein oder zwei Hops stromaufwärts, sodass in allen Fällen eine Gateway-IP erforderlich ist. Unter Linux kann ich einfach Folgendes tun, um zu den Netzwerken zu gelangen:

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

usw.

Linux platziert dann den Datenverkehr für jedes Zielnetzwerk auf den richtigen Schnittstellen, die auf das richtige Gateway ausgerichtet sind. Es spielt also keine Rolle, dass die Gateway-IP für jede Schnittstelle gleich ist.

Meine Frage ist, wie kann ich dies in OpenBSD erreichen? Ich habe es versucht und bin gescheitert. Meine Ergebnisse sind, dass ich für ein bestimmtes Ziel entweder:

  • Geben Sie eine Schnittstelle an (wenn das Ziel über diesen Link direkt erreichbar ist - was in meinem Fall nicht der Fall ist).
  • Geben Sie eine Gateway-IP an, da sich das Ziel nicht direkt auf der Verbindung befindet

Aber ich kann nicht herausfinden, wie man beides spezifiziert.

bao7uo
quelle
Sind Sie sicher, dass ein Gateway erforderlich ist? Wenn die Verbindung Ethernet ist und das Ziel mehr als einen Sprung entfernt ist, ist ein Gateway erforderlich. VPNs verhalten sich jedoch häufig als Punkt-zu-Punkt-Schnittstellen, für die kein Gateway erforderlich ist.
Kasperd
Ja, es ist definitiv erforderlich, denn obwohl die Schnittstellen Punkt-zu-Punkt sind, sind die Zielnetzwerke alle mehr als einen
Sprung
Punkt-zu-Punkt-Links interessieren sich nicht für Gateways.
Kasperd
ok, aber wie kann ich es dann zum Laufen bringen?
Bao7uo
Wie wäre es, wenn Sie die -TOption verwenden routeund eine Routing-Tabelle für jedes Ziel definieren? Ich denke, es bietet eine bessere "Isolierung" für Regeln pro Schnittstelle.
Melis

Antworten:

1

Verwenden Sie den Modifikator -ifp, um eine Route zu erstellen . Von der Manpage :

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.

So etwas funktioniert also:

# 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

Wenn sich Ihre Zielrouten überschneiden, können Sie pf- und Routenbezeichnungen verwenden, um Übereinstimmungen zu erstellen oder Domänen weiterzuleiten .

Vierbeiner
quelle
Danke dafür. Ich habe es versucht und konnte es nicht zum Laufen bringen. Ich denke nicht, -ifacetrifft zu, weil die Gateway-Adresse für einen Upstream-Router (nächster Hop) ist, nicht für eine IP einer Schnittstelle auf der openbsd-Box selbst. Als ich das -iface entfernte, funktionierte es, aber nur für die erste VPN-Schnittstelle. Ich kann es also tun -ifp tap0und es funktioniert, aber wenn ich es tue -ifp tap1, schlägt es fehl, no route to hostwenn ich versuche, die Route hinzuzufügen.
Bao7uo
Obwohl es das Problem nicht gelöst hat, habe ich Ihnen das Kopfgeld zugesprochen, weil ich dankbar bin, dass Sie versucht haben, zu helfen.
Bao7uo
Ich bin ehrlich verwirrt darüber, was Linux dort unter der Haube macht ... BSD macht das "Richtige", indem es sich darüber beschwert, dass GW nicht lokal ist. Haben Sie die -link -llinfoFlags zum Routenbefehl ausprobiert ? Ich denke auch, dass -ifacedies zutrifft (Sie erhalten den Fehler, ohne Tabellen / Domians weiterzuleiten, wie Sie bemerkt haben, da die Netzwerkroute in Konflikt steht und nicht erneut hinzugefügt werden kann). OpenVPN / tippen? Ich frage mich, was das "andere" Ende bereitstellt, wenn es sich um ein falsches ptp handelt.
Quadruplebucky