Ich habe ein System mit zwei Schnittstellen. Beide Schnittstellen sind mit dem Internet verbunden. Eine davon ist als Standardroute festgelegt. Ein Nebeneffekt davon ist, dass, wenn ein Paket auf der Nicht-Standardroutenschnittstelle eingeht, die Antwort über die Standardroutenschnittstelle zurückgesendet wird. Gibt es eine Möglichkeit, iptables (oder etwas anderes) zu verwenden, um die Verbindung zu verfolgen und die Antwort über die Schnittstelle, von der sie kam, zurückzusenden?
51
dev
geklappt, wenn ich den Parameter imip rule
Befehl weggelassen habe , also läuftip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
undup ip route add default via <gateway_IP> dev ppp0 table isp2
zu Ihrer / etc / network / interfaces unter der entsprechenden Schnittstelle hinzufügen .dev <interface>
ausip rule
es auf meinem Kasten zu bekommen. Wenn ich das richtig verstehe,dev <interface>
wurden Pakete herausgefiltert, die irgendwie auf der falschen Schnittstelle eingestellt waren, und die über die überschriebene Route auf die richtige Schnittstelle zurückgeschrieben werden mussten, aber die Regelfilterung nach Schnittstelle verhinderte dies.dev <interface>
aus demip rule
Befehl entfernen, damit dies funktionierte. Bitte aktualisieren Sie die Antwort! Abgesehen von diesem Detail wirkte es wie ein Zauber. Vielen Dank, @Peter!Mit den folgenden Befehlen wird eine alternative Routingtabelle
eth1
für Pakete erstellt, die die Markierung 1 aufweisen (mit Ausnahme von Paketen an localhost). Derip
Befehl stammt aus der iproute2- Suite (Ubuntu: iproute Install iproute http://bit.ly/software-small , iproute-doc Install iproute-doc http://bit.ly/software-small ).Die andere Hälfte des Auftrags besteht darin, Pakete zu erkennen, die die Markierung 1 erhalten müssen. Verwenden Sie dann
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
auf diesen Paketen, um sie durch Routing-Tabelle 1 weiterleiten zu lassen. Ich denke, das Folgende sollte es tun (ersetzen Sie 1.2.3.4 durch die Adresse der Nicht-Standard-Route-Schnittstelle):Ich bin mir nicht sicher, ob das ausreicht. Vielleicht ist eine andere Regel für die eingehenden Pakete erforderlich, um das conntrack-Modul anzuweisen, sie zu verfolgen.
quelle
Ich hatte Probleme mit den lokal generierten Paketen mit der von Peter vorgeschlagenen Lösung. Ich habe festgestellt, dass Folgendes dies korrigiert:
HINWEIS: In der vierten Zeile oben können Syntaxprobleme auftreten. In solchen Fällen könnte die Syntax für den 4. Befehl jetzt so lauten:
quelle
Ich gehe davon aus, dass Sie Linux verwenden und weiterhin eine RedHat / CentOS-basierte Distribution verwenden. Andere Unixe und Distributionen erfordern ähnliche Schritte - die Details sind jedoch unterschiedlich.
Beginnen Sie mit dem Testen (beachten Sie, dass dies der Antwort von @ Peter sehr ähnlich ist. Ich gehe von Folgendem aus:
Die Befehle lauten wie folgt:
Die Firewall ist in keiner Weise beteiligt. Antwortpakete wurden immer von der richtigen IP gesendet - aber zuvor wurden sie über die falsche Schnittstelle gesendet. Nun werden diese Pakete von der richtigen IP über die richtige Schnittstelle gesendet.
Unter der Annahme, dass das oben Gesagte funktioniert hat, können Sie die Regel- und Routenänderungen nun dauerhaft festlegen. Dies hängt davon ab, welche Version von Unix Sie verwenden. Nach wie vor gehe ich von einer RH / CentOS-basierten Linux-Distribution aus.
Testen Sie, ob die Netzwerkänderung dauerhaft ist:
Wenn das nicht funktioniert hat, müssen Sie in späteren Versionen von RH / CentOS auch eine von zwei Optionen wählen:
Persönlich bevorzuge ich die Installation des Regelpakets, da dies der einfachere, besser unterstützte Ansatz ist:
Eine weitere wichtige Empfehlung ist die Aktivierung der Arp-Filterung, da hierdurch andere verwandte Probleme mit dualen Netzwerkkonfigurationen vermieden werden. Fügen Sie mit RH / CentOS den folgenden Inhalt zur Datei /etc/sysctl.conf hinzu:
quelle