Binden an eine bestimmte Netzwerkschnittstelle auf einem Linux-Server mit mehreren Gateways

318
Adam Gausmann

Ich versuche, ein Serverprogramm auf meinem lokalen Computer auszuführen. Es gibt 2 Wege zum Internet:

  • 10.0.0.1/24on eth0ist das Gateway und das Subnetz auf der Schnittstelle mit der schnellsten Verbindung; Eine Firewall verhindert jedoch den Zugriff auf Server, die an TCP-Ports gebunden sind.
  • 10.8.0.1/24Ein eth1ist das Gateway und das Subnetz auf der langsameren Schnittstelle. Ich habe jedoch die Kontrolle über das Gateway-Gerät und kann es erfolgreich weiterleiten, und der Server ist im Internet sichtbar.

Auf meiner Maschine habe ich folgende Routen:

default via 10.0.0.1 dev eth0 src 10.0.0.x metric 203 default via 10.8.0.1 dev eth1 metric 800 10.8.0.0/24 dev eth1 proto kernel scope link src 10.8.0.y 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.x metric 203

Natürlich eth0würde die Route via unter normalen Umständen Vorrang haben. Für die Portweiterleitung meines Servers muss jedoch das Standardgateway der eth1Schnittstelle verwendet werden, ohne dass der gesamte andere Verkehr über dieselbe Schnittstelle umgeleitet wird.

Was ich bisher versucht habe, ist, den Server an die Adresse zu binden, 10.8.0.ywas bedeutet, dass nur Verbindungen akzeptiert werden, deren Ziel diese IP-Adresse ist. Es hat jedoch nicht funktioniert, um den Verkehr in die entgegengesetzte Richtung zu leiten. Ich habe mit überprüft, tcpdump -i eth1 -p 25561dass eingehende Verbindungen empfangen werden, aber wenn beide Überwachung eth0und eth1ich habe keine eine ausgehende Antwort sehen. Die Verbindung wird auf dem Remote-Client nach Ablauf einer Antwort abgemeldet.

Hat jemand anderes versucht, etwas Ähnliches zu tun und kann Ihnen Einblick geben, wie ich es einrichten muss?

1
Normalerweise benötigen Sie die Verwendung von "ip route table" kombiniert mit "ip rule", um eine Quell-IP mit einer passenden Zielroute zu verknüpfen. Schauen Sie sich http://lartc.org/howto/lartc.rpdb.multiple-links.html an. Betrachten Sie als lokalen Rechner den mit Provider 1 und Provider 2 verbundenen Linux-Router, um den dortigen Erläuterungen zu folgen. Sie können dann sogar iptables verwenden, um den richtigen Anbieter auszuwählen (z. B. durch Auswahl der richtigen Quell-IP). A.B vor 7 Jahren 0
Auch bei der Verwendung von Routingtabellen (wie auf der Seite von lartc.org) glaube ich nicht, dass dies überhaupt erforderlich ist. Andernfalls können Sie dies vielleicht durch Deaktivieren von rp_filter (umgekehrte Pfadfilterung) zum Laufen bringen. Schauen Sie sich https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt (Eintrag rp_filter) an. Deaktiviere es sowohl für "all" als auch für "eth1". A.B vor 7 Jahren 0

0 Antworten auf die Frage