Im 1. Teil der IP-Routing-Serie haben wir die Grundlagen des Linux-IP-Routings gelernt.
Der Route-Befehl wird zum Anzeigen/Manipulieren der IP-Routing-Tabelle verwendet. Es wird hauptsächlich verwendet, um statische Routen zu bestimmten Hosts oder Netzwerken über eine Schnittstelle einzurichten.
In diesem Artikel werden wir sehen, wie man die Routing-Tabellen in Linux mit dem route-Befehl manipuliert.
Wir erklären zunächst anhand einiger grundlegender Beispiele für Route-Befehle, wie Routing durchgeführt wird, und erklären dann anhand einer beispielhaften Netzwerkarchitektur, wie Sie Routen in Ihrem Netzwerk einrichten.
Ich. Wie erfolgt das Routing?
1. Vorhandene Routen anzeigen
Der Befehl route zeigt standardmäßig die Details der Kernel-Routing-Tabelleneinträge an. In diesem Beispiel lautet die IP-Adresse des Systems, auf dem der Route-Befehl ausgeführt wird, 192.168.1.157
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Der obige Befehl zeigt, dass, wenn das Ziel innerhalb des Netzwerkbereichs 192.168.1.0 – 192.168.1.255 liegt, das Gateway * ist, also 0.0.0.0.
Wenn Pakete innerhalb dieses IP-Bereichs gesendet werden, wird die MAC-Adresse des Ziels über das ARP-Protokoll gefunden und das Paket wird an die MAC-Adresse gesendet.
Wenn Sie nicht wissen, was ARP ist, sollten Sie zuerst verstehen, wie das ARP-Protokoll funktioniert.
Um Pakete an Ziele zu senden, die nicht innerhalb dieses IP-Bereichs liegen, werden die Pakete an ein Standard-Gateway weitergeleitet, das über das weitere Routing für dieses Paket entscheidet. Wir werden dies in Kürze sehen.
Standardmäßig zeigt der Befehl route den Hostnamen in seiner Ausgabe an. Wir können es anfordern, die numerische IP-Adresse mit der Option -n wie unten gezeigt anzuzeigen.
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.1.10 0.0.0.0 UG 0 0 0 eth0
2. Hinzufügen eines Standard-Gateways
Wir können angeben, dass die Pakete, die nicht innerhalb des Netzwerks sind, an eine Gateway-Adresse weitergeleitet werden müssen.
Der folgende route add-Befehl setzt das Standard-Gateway auf 192.168.1.10.
$ route add default gw 192.168.1.10
Nun zeigt der route-Befehl folgende Einträge an.
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 default gateway.co.in 0.0.0.0 UG 0 0 0 eth0
Jetzt haben wir gerade ein Standard-Gateway zu unserer Maschine hinzugefügt. Um zu überprüfen, ob es ordnungsgemäß funktioniert, pingen Sie einen externen Host (z. B. google.com) an, um ein ICMP-Paket zu senden.
$ ping www.google.com
Das Folgende ist die Ereignissequenz, die passiert, wenn der obige Ping-Befehl ausgeführt wird.
- Erst wird der DNS-Server abgefragt, um die IP-Adresse von google.com zu erhalten (zum Beispiel:74.125.236.34)
- Die Zieladresse ( 74.125.236.34 ) liegt nicht innerhalb der Netzwerkreichweite.
- In Layer-3 (IP-Header) wird die ZIEL-IP also als „74.125.236.34“ festgelegt.
- In Layer-2 wird die ZIEL-MAC-Adresse als MAC-Adresse des Standard-Gateways (MAC 192.168.1.10) ausgefüllt. Der MAC wird wie zuvor beschrieben mithilfe von ARP gefunden.
- Wenn das Paket gesendet wird, sendet der Netzwerk-Switch (der auf Layer-2 arbeitet) das Paket an das Standard-Gateway, da die Ziel-MAC die des Gateways ist.
- Sobald das Gateway das Paket empfangen hat, leitet es die Pakete basierend auf seiner Routing-Tabelle weiter.
Die obigen 2 Beispiele hätten eine gute Vorstellung davon gegeben, wie das Routing innerhalb eines Netzwerks durchgeführt wird. Jetzt werden wir andere Befehlszeilenoptionen sehen, die mit dem Befehl route verfügbar sind.
3. Informationen zum Routing-Cache des Kernels auflisten
Der Kernel verwaltet die Routing-Cache-Informationen, um die Pakete schneller zu routen. Wir können die Routing-Cache-Informationen des Kernels auflisten, indem wir das Flag -C verwenden.
$ route -Cn Kernel IP routing cache Source Destination Gateway Flags Metric Ref Use Iface 192.168.1.157 192.168.1.51 192.168.1.51 0 0 1 eth0 192.168.1.157 74.125.236.69 192.168.1.10 0 0 0 eth0 . . .
4. Routing zu einem bestimmten Host oder Netzwerk ablehnen
Manchmal möchten wir das Routing der Pakete zu einem bestimmten Host/Netzwerk ablehnen. Fügen Sie dazu den folgenden Eintrag hinzu.
$ route add -host 192.168.1.51 reject
Wie Sie unten sehen, können wir nicht auf diesen bestimmten Host zugreifen (d. h. .51-Host, den wir gerade abgelehnt haben).
$ ping 192.168.1.51 connect: Network is unreachable
Wir können jedoch immer noch auf andere Hosts im Netzwerk zugreifen (z. B. ist der .52-Host immer noch zugänglich).
$ ping 192.168.1.53 PING 192.168.1.53 (192.168.1.53) 56(84) bytes of data. 64 bytes from 192.168.1.53: icmp_seq=1 ttl=64 time=7.77 ms
Wenn Sie ein ganzes Netzwerk ( 192.168.1.1 – 192.168.1.255 ) ablehnen möchten, fügen Sie den folgenden Eintrag hinzu.
$ route add -net 192.168.1.0 netmask 255.255.255.0 reject
Jetzt können Sie auf keinen der Hosts in diesem Netzwerk zugreifen (z. B.:.51, .52, .53 usw.)
$ ping 192.168.1.51 connect: Network is unreachable $ ping 192.168.1.52 connect: Network is unreachable $ ping 192.168.1.53 connect: Network is unreachable
II. Eine beispielhafte Netzwerkarchitektur (um das Routing zu verstehen)
Lassen Sie uns für die restlichen Beispiele die folgende beispielhafte Netzwerkarchitektur verwenden.
Im Diagramm unten haben wir 2 einzelne Netzwerke ( 192.168.1.0 und 192.168.3.0, mit der Subnetzmaske 255.255.255.0 ).
Wir haben auch eine „GATEWAY“-Maschine mit 3 Netzwerkkarten. Die 1. Karte ist mit 192.168.1.0 verbunden, die 2. Karte ist mit 192.168.3.0 verbunden und die 3. Karte ist mit der Außenwelt verbunden.
5. Machen Sie 192.168.3.* zugänglich von 192.168.1.*
Jetzt müssen wir einen Routing-Eintrag hinzufügen, damit wir 192.168.3 pingen können. Serie IP-Adressen von 192.168.1. Serie. Der gemeinsame Punkt, den wir haben, ist die GATEWAY-Maschine.
Daher wird auf jeder Maschine im 192.168.1.*-Netzwerk ein Standard-Gateway hinzugefügt, wie unten gezeigt.
$ route add default gw 192.168.1.10
Wenn jetzt 192.168.1.1 192.168.3.1 pingt, geht es über 192.168.1.10 zum GATEWAY.
Fügen Sie in GATEWAY den folgenden Routing-Eintrag hinzu.
$ route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.10
Jetzt werden alle Pakete, die an das 192.168.3.*-Netzwerk adressiert sind, über die 192.168.3.10-Schnittstelle weitergeleitet, die dann die Pakete an die adressierte Maschine liefert.
6. Machen Sie 192.168.1.* zugänglich von 192.168.3.*
Es ist dem, was wir früher gemacht haben, sehr ähnlich.
Daher wird auf jeder Maschine im 192.168.3.*-Netzwerk ein Standard-Gateway hinzugefügt, wie unten gezeigt.
$ route add default gw 192.168.3.10
Fügen Sie in GATEWAY den folgenden Routing-Eintrag hinzu.
$ route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.10
Jetzt können 192.168.3.*-Rechner 192.168.1.*-Rechner anpingen.
7. Internetzugang zulassen ( Außenwelt )
In den beiden vorherigen Beispielen haben wir die 2 verschiedenen Netzwerke miteinander verbunden.
Jetzt müssen wir von diesen 2 verschiedenen Netzwerken aus auf das Internet zugreifen. Dafür können wir der 125.250.60.59 ein Standard-Routing (wenn keine Routing-Regel zutrifft) hinzufügen, das wie folgt mit der Außenwelt verbunden ist.
$ route add default gw 125.250.60.59
So funktioniert es:
- Wenn Sie nun versuchen, von einem dieser Computer (z. B. von 192.168.3.2) auf das Internet zuzugreifen (z. B. pingen Sie google.com), geschieht Folgendes.
- Da das Ziel (google.com) nicht innerhalb der 3.*-Serie liegt, wird es über die 3.10-Schnittstelle an GATEWAY weitergeleitet
- Im GATEWAY prüft es, ob das Ziel innerhalb des 1.*-Bereichs liegt. In diesem Beispiel ist dies nicht der Fall.
- Es prüft dann, ob das Ziel innerhalb des Bereichs 2.* liegt. In diesem Beispiel ist es nicht
- Schließlich nimmt es die Standardroute, um die Pakete weiterzuleiten (d. h. über die Schnittstelle 125.250.60.59, die mit der Außenwelt verbunden ist).