
Ich frage mich, ob ich einen VPS mit 2 Netzwerkschnittstellen (1.1.1.1 UND 2.2.2.2) habe und 1.1.1.1 als primär eingestellt ist ...
eth0 = 1.1.1.1
eth0:1 = 2.2.2.2
Jetzt möchte ich den gesamten Datenverkehr für domain.com (ich weiß nicht, ob die Domäne Cloudflare verwendet) über die IP 2.2.2.2 eth0:1 umleiten.
Beispiel 1:
Wenn ich es ausführe,
wget domain.com
wird es durch 2.2.2.2 eth0:1
gehen, aber wenn ich es ausführe,wget google.com
wird es durch 1.1.1.1 eth0 gehen
Beispiel 2:
Wenn ich beispielsweise zu „whatismyip.com“ gehe, um eth0 durchzureichen, wird angezeigt, dass meine IP „1.1.1.1“ ist.
Wenn ich jedoch zu „whatismyipaddress.com“ gehe, wird eth0:1 durchgereicht, sodass meine IP „2.2.2.2“ ist.
Antwort1
Dabei sind einige Dinge zu beachten:
Das Linux-Routing verarbeitet keine Domänennamen
Es gibt viele Konfigurationsoptionen für das Routing unter Linux, aber keine, die reine Domänennamen akzeptiert. Schließlich geht es hier um IP-Routing. Daher müssen Regeln für IP-Adressen definiert werden, die offensichtlich „kaputt gehen“, wenn sich die DNS-Einträge einer Domäne ändern.
Schnittstellenpräferenz
In diesem Fall gibt es zwei Schnittstellen, die eine Route zum selben Subnetz (0.0.0.0/0, auch bekannt als Internet) bereitstellen. Um dem Kernel mitzuteilen, dass er eine bestimmte Schnittstelle bevorzugen soll, müssen wir Policy-Based Routing (PBR) anwenden.
Wie der Name schon sagt, funktioniert Policy-Based Routing, indem eine Richtlinie (auch „Regel“ genannt) definiert wird, um zu bestimmen, welche Schnittstelle verwendet werden soll. Ohne Richtlinien wählt der Kernel die erste Route, die zum Netzwerk eines Ziels passt.
Routen, Regeln, Tabellen
Der Kernel verwendet Routen, um zu bestimmen, wie Pakete behandelt werden. Eine Route ist eine einfache Definition, die die Zieladresse und den zu verwendenden Link (Schnittstelle) enthält.
Routen werden in gruppiert tables
. Welche Tabelle verwendet wird, hängt von den definierten Richtlinien ab.
Eine policy
(oder Regel) teilt dem Kernel mit, welche Tabelle zum Weiterleiten von Paketen untersucht werden soll. Die Definition der Richtlinie umfasst die zu untersuchende Quelle, das Ziel und die Routing-Tabelle eines Pakets.
Aktuelle Routen und Richtlinien anzeigen
Um die aktuell vom System verwendeten Routen anzuzeigen, führen Sie aus
ip route
Hier werden alle Einträge in der main
Routing-Tabelle angezeigt. Auf andere Tabellen kann durch Ausführen zugegriffen werden ip route show table <tablename>
.
Um die aktuell verwendeten Richtlinien anzuzeigen, führen Sie aus
ip rule
Hier werden alle vom Kernel verwendeten Richtlinien/Regeln aufgelistet. Sie werden von oben nach unten durchlaufen, bis eine Regel auf das zu verarbeitende Paket zutrifft.
Beispiel
echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1
Diese Befehle erstellen eine neue Routing-Tabelle out1
und fügen sie 10.0.0.1
als Gateway für den Internetzugang hinzu. Der an 3.4.5.6
(dieser muss durch eine tatsächliche, aufgelöste IP-Adresse der Zieldomäne ersetzt werden) gerichtete Datenverkehr wird über das in der out1
Tabelle definierte Standard-Gateway unter Verwendung des angegebenen Geräts eth0
und der angegebenen IP gesendet 1.1.1.1
.
Ich empfehle Ihnen, einige vorhandene Tutorials und Anleitungen zu lesen, um sich mit der Terminologie vertraut zu machen. Suchen Sie nach iproute2
und linux advanced routing and traffic control
.
Und zu guter Letzt: Testen Sie Ihre Änderungen, bevor Sie sie auf einem Live-System anwenden. Fehler passieren, ich persönlich ziehe es vor, eine VM zu braten, anstatt einen Remote-Server.