Was bedeuten die Einträge in meiner Routing-Tabelle eigentlich?

828
penitent_tangent

Ich habe eine VPN-Verbindung (über Open VPN implementiert), versuche jedoch, den Verkehr zu bestimmten IPs / Domänen umzuleiten, sodass sie nur meine nackte Internetverbindung verwenden. Nach meinen Recherchen scheint dies der beste Weg zu sein, Routing-Tabellen zu erstellen. Keines der Beispiele, die ich gefunden habe, hat funktioniert. Ich möchte also wirklich verstehen, was los ist, um die Problembehandlung effektiver zu gestalten.

Wenn ich bei ausgeschaltetem VPN "Route" starte, sieht es ziemlich vernünftig aus:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 192.168.1.0 * 255.255.255.0 U 1 0 0 eth1 

Ich vermute, die erste Zeile setzt das Standardverhalten - wir leiten über das Gateway. Wenn sich das Ziel irgendwo im Bereich 192.168.1. * / Mein internes Netzwerk befindet, wird in der zweiten Zeile ein Gateway von * aktiviert (ich denke, dies bedeutet, verwenden Sie den Standardwert aus der obigen Zeile - aber wenn ich ein Netzwerk hatte, das mehrere Oktette überspannt, ich könnte dies verwenden, um bestimmte Blöcke zu bestimmten Gateways zu lenken

Meine Erwartung war, dass, wenn ich das VPN einschalte, dies mehr oder weniger gleich bleiben würde, aber mein Gateway für "default" würde zu einer wizardly VPN-IP wechseln.

Wenn dieses Verständnis richtig ist, muss ich nur die IP hinzufügen, die ich als Ziel, das Router-Ziel (192.168.1.1) als Gateway und als Gateway umgehen möchte. Das Gateway und die Dinge funktionieren gut (wenn die Syntax dafür einfach wäre, würde ich das tun.) liebe es zu sehen).

Sobald ich das VPN einschalte, werden die Dinge jedoch unordentlich und ich beginne mein Wissen in Frage zu stellen:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 10.172.1.1 10.172.1.5 255.255.255.255 UGH 0 0 0 tun0 10.172.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 128.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0 168.1.6.15 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1 

Was geht hier vor sich? Kann jemand erklären, was diese zusätzlichen Zeilen sind und warum sie erscheinen / verschwinden, wenn ich den vpn umschalte?

Danke für Anregungen! Ich habe ein paar "Was ist ein Routingtisch" -Artikel gefunden, aber ich denke, dass sie für Leute geschrieben wurden, die viel klüger als ich sind - ich bin noch immer sehr neu in Linux und würde gerne einen idiotensicheren Ratschlag finden :)

2

1 Antwort auf die Frage

3
MariusMatutiae

Schöne und schwierige Frage.

Erstens ein allgemeiner Grundsatz: Wenn Sie in Routing-Tabellen mehrere Regeln haben, die für dasselbe Ziel gelten, wird die spezifischste verwendet. Wenn Sie sich beispielsweise Ihre zweite RT anschauen, möchten Sie vielleicht ein Ping an Google DNS 8.8.8.8 durchführen. Sowohl die erste als auch die zweite Zeile gelten, aber die erste Zeile ist etwas genauer, da sie eine restriktivere Netzmaske als die zweite hat: Die erste Zeile gilt für alle IP-Adressen im Bereich

 0.0.0.0 -> 127.255.255.255 

Die zweite Regel gilt für alle IP-Adressen, dh für alle Adressen im Bereich

 0.0.0.0 -> 255.255.255.255 

Daher wird die erste Regel verwendet, die enger / restriktiver / genauer ist: Pinging 8.8.8.8 muss durch dev tun0und IP-Adresse 10.172.1.5 gehen.

Zweiter Punkt: Ihre 2. RT enthält zwei Unicast-Routen : Diese sind Hin der vierten Spalte mit einem gekennzeichnet. Das Vorhandensein von Unicast-Routen wird deutlicher, wenn Sie anstelle des veralteten Befehls route/netstatden neuen Befehl verwenden:

 $ ip route show 

(das sollte man immer tun), weil hier Unicast - Routen durch den Ausdruck angegeben werden scope link .

Dies ist der Schlüssel zum Verständnis von (offenem) VPN-Routing. Das Handbuch besagt:

Gültigkeitsbereich SCOPE_VAL

der Umfang der Ziele, die durch das Routenpräfix abgedeckt werden. SCOPE_VAL kann eine Zahl oder eine Zeichenfolge aus der Datei / etc / iproute2 / rt_scopes sein. Wenn dieser Parameter nicht angegeben wird, nimmt ip den Gültigkeitsbereich global für alle Gateway-Unicast-Routen an, den Bereichslink für direkte Unicast- und Broadcast-Routen sowie den Geltungsbereich-Host für lokale Routen.

Was ist eine Unicast-Route ?

Eine statische Unicast-Route ist eine manuell konfigurierte Zuordnung einer IP-Adresse zu einem Next-Hop-Ziel, daher als zielspezifische Route bezeichnet. Fügen Sie statische Routen hinzu, wenn Sie den für ein bestimmtes Netzwerk / Host bestimmten Datenverkehr stattdessen über einen anderen Next-Hop weiterleiten möchten der Standardroute.

Mit anderen Worten: Wenn diese Regel nicht vorhanden wäre, würde Pinging 8.8.8.8 durch 10.172.1.5 (in Ihrem Fall) gehen, aber es gibt kein Standardgateway auf tun0. Das Paket wird dann an die Schnittstelle eth0 übergeben, wo dies der Fall ist ein Standard-Gateway, und würde aus diesem gehen. Dies passiert jedoch normalerweise und Sie hätten kein (offenes) VPN. Stattdessen gibt es eine Unicast-Regel, und sie ist so restriktiv wie möglich: Sie zwingt Sie, unabhängig davon, an wen das Paket gerichtet ist, 10.172.1.1 als nächsten Hop zu kontaktieren.

Gut, was jetzt: Wie kontaktieren wir 10.172.1.1? dev tun0hat keine solche Regel, daher wird das Paket eth0in der Hoffnung auf ein besseres Glück weitergeleitet. Welche der verbleibenden Regeln können wir nun anwenden, um unser Ping-Paket weiterzuleiten? Tatsache ist, eth0hat auch eine Unicast-Route,

 168.1.6.15 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1 

was erzwingt, das Paket als nächsten Sprung an 168.1.6.15 zu senden. Und von da an liegt es nicht mehr in unserer Verantwortung.

Wir können diesen logischen Prozess wie folgt zusammenfassen:

Paket zu 8.8.8.8 ---> dev tun0 ---> 10.172.1.5 ---> 168.1.6.15

 (Rule #1)  (Rule #3) (Rule #6) 

Lose Enden :

Eine der verbleibenden Regeln, Regel Nr. 5

128.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0 

ergänzt Regel Nr. 1

0.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0 

Die beiden zusammen stellen Standardregeln für alle IP-Adressen in der Welt bereit, da sie jedoch etwas restriktiver sind als Regel Nr. 2

 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 

Sie haben Vorrang vor ihr und werden verwendet, um Ihren gesamten Internetverkehr über OpenVPN zu leiten. Tatsächlich ist die obige Regel überflüssig und wurde in älteren Versionen von OpenVPN gelöscht. Jetzt bleibt es jedoch an Ort und Stelle, weil es im Grunde nie aufgerufen wird und es einfacher macht, die RT # 1 erneut zu installieren, wenn das OpenVPN abgebrochen wird.

Regel Nr. 7 ist die übliche lokale LAN-Regel. Sie vermissen eine Regel wie

 10.172.1.0/24 dev tun0 proto kernel scope link src 10.172.1.5 

Dies ist, was für die Kontaktaufnahme mit PCs im Remote- LAN erforderlich wäre . Dies ist höchstwahrscheinlich auf die Tatsache zurückzuführen, dass Sie als OpenVPN-Server einen Pro-Pay-Dienst verwenden, der nicht den Zugriff auf die anderen lokalen Computer zulässt. Wenn dieses OpenVPN stattdessen diejenige wäre, die Sie von unterwegs aus mit Ihrem Heim-LAN verbinden, möchten Sie auf jeden Fall die Möglichkeit haben, die anderen PCs in Ihrem LAN zu kontaktieren, und Sie haben eine solche Regel.

Zum Schluss noch die Regel Nr. 4

 10.172.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 

ist mir völlig rätselhaft: Ich habe es auf keinem meiner (zahlreichen) OpenVPNs, und soweit ich es verstehe, erscheint es mir völlig überflüssig.

Was für eine Antwort! Das ist großartig, vielen Dank. Lass mich verdauen und hoffentlich bringt mich das ohne weitere klärende Fragen zum Rest des Weges ... schau dir diesen Raum an. penitent_tangent vor 8 Jahren 0
Vielen Dank! Aber wie kann ich mit der Remote-LAN-Regel einen anderen Computer ansprechen, z. B. 10.172.1.123? Muss es noch 168.1.6.15 verwenden? Wenn nicht, wie gehe ich nach draußen? trogne vor 6 Jahren 0
@trogne Tut mir leid, die Regeln einzuhalten, aber die Website fordert, dass Sie eine neue Frage in einem neuen Beitrag stellen. Wenn ja, beantworte ich gerne Ihre Frage! MariusMatutiae vor 6 Jahren 0
@MariusMatutiae Toll, ich habe eine neue Frage gepostet (# 1250118) trogne vor 6 Jahren 0
Ich folge der Routing-Reihenfolge in Ihrem '8.8.8.8'-Beispiel nicht. Ich stimme zu, dass Regel Nr. 1 zuerst gilt, sodass wir eine Route nach '10.172.1.15' benötigen. Aber ich denke, dass Regel Nr. 4 hier gilt (Zieladresse stimmt genau überein), und mit einem Gateway von '0.0.0.0' wird das Paket nur durch 'tun0' am Ende der Story gesendet. Ich verstehe wirklich nicht, wie Regel 3 und Regel 6 ausgelöst werden. Regel Nr. 3 hat die ... 15-Adresse als Gateway - warum sollte das übereinstimmen? Und wenn es passt, warum schauen wir dann nach ... 1 (die Zieladresse in der Regel). Es ist, als ob Quelle / Ziel vertauscht wurden? jwd vor 5 Jahren 0