Zwei Schnittstellen, zwei Adressen, zwei Gateways?

14

Ich besitze ein System mit zwei Netzwerkschnittstellen mit unterschiedlichen IP-Adressen, die sich beide im öffentlichen Adressbereich befinden (beim ersten jedoch über NAT) und beide unterschiedliche Gateways haben. (Lange Geschichte, es ist zu Testzwecken)

Das Problem ist, dass im Moment, wenn ich versuche, die Adresse auf der zweiten Schnittstelle anzupingen, die Standardroute über die erste Schnittstelle angezeigt wird - und nie richtig ankommt.

Ist es möglich, sicherzustellen, dass Antworten immer über dieselbe Netzwerkschnittstelle (und mit derselben Quell-IP) gesendet werden, wie sie eingegangen sind? Und wenn ja, wie?

Shadur
quelle
1
Möglicherweise eine Variante dazu: unix.stackexchange.com/questions/4420/…
Shawn J. Goff

Antworten:

16

Sie verstehen das Problem falsch. Nicht jedes Paket ist eine Antwort und nicht jedes Paket kann mit einem anderen Paket abgeglichen werden, so dass "dieselbe Netzwerkschnittstelle, an der sie eingegangen sind" Sinn macht. Sie möchten das Gateway für ein Paket anhand seiner Quell-IP-Adresse auswählen.

Dies wird als quellbasiertes Routing oder Richtlinienrouting bezeichnet. Sie können dies mit einer einfachen iptablesRegel tun. Am besten richten Sie jedoch zwei Routing-Tabellen ein, eine für jede öffentliche Quelladresse:

Erstellen Sie zunächst zwei Tabellen (Ersetzen Sie <NAME1> und <NAME2> durch sinnvolle Namen für Ihre beiden Anbieter, ebenso wie IP1, DEV1 usw.):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Fügen Sie jeder Routingtabelle ein Gateway hinzu (falls erforderlich):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Dann eine Standardroute:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Dann die Regeln zur Auswahl der Routentabelle anhand der Quelladresse:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Weitere Informationen finden Sie unter Routing für mehrere Uplinks / Anbieter .

David Schwartz
quelle
Sie haben geschrieben: 'Nicht jedes Paket ist eine Antwort, und nicht jedes Paket kann mit einem anderen Paket abgeglichen werden, sodass "dieselbe Netzwerkschnittstelle, an der sie eingegangen sind" Sinn macht. Können Sie das näher erläutern? Ich verstehe, dass nicht jedes Paket eine Antwort ist und nicht jedes Paket einem anderen "Quell" -Paket zugeordnet werden kann. Wenn wir diese Pakete von der Prüfung ausschließen, weil sie keine Probleme verursachen und uns daher nicht beschäftigen, warum können die verbleibenden Pakete nicht an dieselbe Netzwerkschnittstelle weitergeleitet werden, an der sie eingegangen sind?
Andrew Savinykh
@ AndrewSavinykh Das würde nicht das ganze Problem lösen. Insbesondere kam es zu einer Unterbrechung, wenn ein ausgehendes Paket, das lokal stammte (z. B. eine ausgehende Ping-Anforderung), die falsche Schnittstelle für seine Quell-IP-Adresse ausging und vom Gateway verworfen wurde. Das Problem besteht, wie ich bereits erklärt habe, darin, sicherzustellen, dass die Pakete entsprechend ihrer Quell-IP-Adresse über das Gateway gesendet werden.
David Schwartz
David, ich möchte das Gleiche wie OP erreichen, kann es aber nicht. Ich habe hier eine Frage gepostet: serverfault.com/questions/992624/… , wäre toll, wenn Sie einen Blick darauf
werfen
6

Die Antwort von David Schwartz ist ausgezeichnet, aber Sie können die Routing-Regeln ein wenig vereinfachen, indem Sie nur eine zusätzliche Tabelle haben und Ihre Standardroute für die andere verwenden. Ich habe einen Server, der sich hinter zwei NAT-Gateways befindet, und habe kürzlich das Szenario zwischen mehreren VMs neu erstellt. Mein /etc/network/interfacessieht so aus:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(Dies ist für ein Setup, bei dem die beiden ISPs Optus und iiNet sind, daher der Tabellenname 'optus'.)

Dies plus die Zeile in /etc/iproute2/rt_tables Erstellen der Tabelle sollten alles sein, was Sie brauchen. Sie haben zwei IP-Adressen. Verkehr von 192.168.13.13 wird über 192.168.13.11 ausgehen, und Verkehr von 192.168.13.213 wird über 192.168.13.10 ausgehen. Konfigurieren Sie diese beiden Gateways so, dass die Portweiterleitung ordnungsgemäß erfolgt (192.168.13.11 leitet Daten an 192.168.13.13 weiter und 192.168.13.10 leitet Daten an 192.168.13.213 weiter), und der Rest sollte für sich selbst sorgen.

Möglicherweise müssen Sie die Dinge ein wenig für Ihre Situation optimieren, da Sie öffentliche IPs direkt verwenden, aber so etwas sollte immer noch funktionieren. Außerdem ist es /etc/network/interfaceszwei Jahre später, wenn das System neu gestartet werden muss, viel einfacher, diese Dinge zu erledigen und diese Datei dann zu verwalten, als sich zu merken, wie Sie sie eingerichtet haben!

rosuav
quelle