Ich vermute, dass der Fehler "rtnetlink reply: invalid argument" darauf zurückzuführen ist, dass entweder die IP-Adresse, die Maske und das Gateway nicht derselben Klasse angehören (Klasse A oder B oder C). oder weil eine "statische" Adresse mit einem DHCP-Adressbereich in Konflikt steht.
Die Tabelle für R8 in Ihrem Schema ist keine Routing-Tabelle, sondern beschreibt, was R8 mit Adressen macht. Wo zum Beispiel 10.0.0.0 steht, sollte dies das 10.0.0.0/24 Netzwerksegment und nicht die IP-Adresse bedeuten.
Bei Subnetzwerken, auf die von R8 aus nicht direkt zugegriffen werden kann, z. B. 16.0.0.0/24, leitet die Routing-Tabelle die Nachricht an den Router weiter, der dem Zielnetzwerk am nächsten liegt, und dieser Router leitet die Nachricht dann entsprechend weiter Routing-Tabelle. In diesem Fall werden an 16.0.0.X adressierte Nachrichten an das Gateway 10.0.0.2 weitergeleitet. Dies ist die Adresse von R7, die sie an den richtigen Empfänger weiterleitet.
Der in R8 ausgeführte Routing-Befehl sollte ungefähr so aussehen:
ip route add 16.0.0.0/24 via 10.0.0.2 src 10.0.0.1
Der Parameter src wird beim Hinzufügen einer Route zu einem Multihomed-Host verwendet, um die Kontrolle über die Quell-IP-Adresse zu haben, von der Ihr Host sendet. Es kann in einfachen Fällen weggelassen werden. Dadurch wird hier sichergestellt, dass die Rückmeldung über das Subnetz 10.0.0.0/24 zurückgegeben wird. Es können jedoch auch andere Werte verwendet werden, wenn wir aus irgendeinem Grund R7 bevorzugen, um die Nachricht nicht über dieses Teilnetz zurückzugeben.
Beachten Sie, dass der von Ihnen angegebene src nur den Verkehr beeinflusst, der von Ihrem Ende ausgeht. Wenn ein fremdes Paket weitergeleitet wird, hat es offensichtlich bereits eine Quell-IP-Adresse, sodass es normalerweise unverändert weitergeleitet wird (es sei denn, es wird NAT verwendet, und dies kann auch überschrieben werden).
Ich stelle fest, dass man im Allgemeinen nicht für jedes Ziel Routen angeben muss. So wie ein Computer in seiner Routing-Tabelle ein Standard-Gateway angeben kann, bei dem es sich um eine Sammeladresse handelt, die alle Nachrichten an Adressen empfängt, die er nicht kennt, verfügt auch ein Router über eine eigene Routing-Tabelle, die ein Gateway enthalten kann. Die Gateway-Adresse des Routers wird durch die Standardroute von dargestellt 0.0.0.0
.
Beachten Sie, dass es durchaus möglich ist, sogar eine Gateway-Schaltung im Netzwerk einzurichten, zum Beispiel:
R1 ➝ R4 ➝ R8 ➝ R7 ➝ R6 ➝ R2 ➝ R1.
Die Anzahl der Hops ist hier nicht optimiert, aber Nachrichten werden weiterhin von jedem Subnetz zu jedem anderen Subnetz gesendet. Ein gutes Netzwerkdesign umfasst normalerweise einen oder mehrere zentralisierte Router, um die Anzahl der Hops zu minimieren.
Die anderen sind mehr als einen Hop (Router) entfernt. Was den Router R8 betrifft, möchte er nur die zu verwendende Schnittstelle und die IP des nächsten Routers kennen, um das Zielnetzwerk zu erreichen. Dann geht er zum nächsten Router und dieser Router verwendet seine eigene Routing-Tabelle, um den nächsten zu bestimmen hüpfen. Um zum 15.0.0.0-Netzwerk zu gelangen, definiert die Routing-Tabelle die Schnittstelle 3 (13.0.0.4) und den Hop als nächsten Router (13.0.0.2). Sobald der Datenverkehr von R2 empfangen wurde, verwendet R2 seine eigene Routing-Tabelle, um die beste Route zum 15.0.0.0-Netzwerk zu ermitteln, das sich außerhalb der 15.0.0.1-Schnittstelle befindet.
quelle
Ich bin mir nicht sicher, woher Ihre Design- und Routing-Tabelle stammt. In einer Umgebung wie Ihrer werden die Routen zu den Remote-Netzwerken normalerweise über Routing-Protokolle (dh dynamisches Routing) definiert. Die Verwendung statischer Routen (vom Benutzer / Administrator definiert) mit allen redundanten Pfaden, die Sie haben, führt schließlich zu Routing-Schleifen oder schwarzen Löchern.
Mit anderen Worten, jedes Subnetz Ihres Diagramms kann tatsächlich über jede Schnittstelle von R8 erreicht werden, abhängig von der Konfiguration der anderen Router.
Zum Beispiel: Wenn Sie die Schnittstelle 1 von R8 als nächsten Hop für 14.0.0.0 definieren (was bedeutet, dass Pakete, die an eine IP des 14.0.0.0 /? Subnetzes gerichtet sind, über die Schnittstelle 1 gesendet werden), und wenn R4 (die tatsächliche Der nächste Sprung von Schnittstelle 1 von R8) hat eine weitere statische Aufladung von 14.0.0.0 bis R1. Ihr Paket wird R8-> R4-> R1-> Ziel kreuzen. Wenn Sie in diesem Beispiel Ihr Paket für 14.0.0.0 weiterhin an R4 senden, R4 jedoch mit einer anderen statischen Anweisung für 14.0.0.0 konfiguriert ist, die auf R8 verweist, haben Sie eine Routing-Schleife, und Ihr Paket springt zwischen diesen R8 und R4 bis zum Ablauf der TTL.
Die gleiche Theorie gilt für jedes andere entfernte Netzwerk wie 12.0.0.0, bei dem es weniger offensichtlich ist, ob R8 sein Paket an R2 oder R4 weiterleiten soll.
Das Wichtigste ist, dass IP-Pakete keinen Speicher haben. Sie werden lediglich durch Auswertung ihres Ziels weitergeleitet (dh Router kümmern sich nicht um die Schnittstelle, von der das Paket empfangen wurde - es sei denn, Sie verwenden Dinge wie Quell- Routing, aber das ist hier nicht der Fall).
In der von Ihnen veröffentlichten Tabelle wird nicht angezeigt, ob statisches oder dynamisches Routing verwendet wird (es fehlt auch das Subnetz dieser Netzwerke). Wenn dies jedoch keine bestimmte theoretische Übung ist, benötigen Sie dynamisches Routing.
Dynamisches Routing kann den besten Pfad von einem Router zu einem Zielnetzwerk definieren, indem verschiedene Parameter wie Anzahl der Sprünge, Bandbreite, Latenz usw. verwendet werden (abhängig vom spezifischen dynamischen Routing-Protokoll). Außerdem können sie Fehler redundanter Verbindungen ordnungsgemäß verwalten.
Wenn Sie sich für ein anderes Beispiel für 12.0.0.0 entscheiden, das auf Abstürze des R3- und R3-Routers hinweist, leiten Sie weiterhin Pakete, die beispielsweise für 12.0.0.5 bestimmt sind, an ein Schwarzes Loch weiter. Wenn Sie sich für den Lastausgleich auf 12.0.0.0 mit 2 Routen (mit derselben Metrik) durch R3 und R4 entscheiden, wenn R4 ausfällt (oder eine seiner Schnittstellen defekt ist), leitet R8 das Paket 1 weiter an R3, das Paket, weiter 2 bis R4, das Paket 3 bis R3 und so weiter. Dies führt zu scheinbar zufälligen Dingen, denn wenn die Pakete TCP verwenden, werden die fehlenden erneut übertragen, wodurch weniger offensichtlich wird, dass die Hälfte Ihres Datenverkehrs in den Papierkorb verschoben wird (z. B. zeitweiliger Leitungsverlust einiger Dienste, Langsamkeit usw.).
Wenn Sie Linux verwenden, kann Quagga die Software für dynamisches Routing sein. Es wird jedoch davon ausgegangen, dass andere Router ein dynamisches Routing-Protokoll ausführen.
Wenn Ihr Ziel jedoch darin besteht, eine statische Route festzulegen, sollten diese Befehle funktionieren (ich gehe von / 24 aus, aber wenn es klasse ist, könnte es eine / 8 sein):
gleich von:
Auf jeden Fall wird die zweite normalerweise in einem Multiaccess-Netzwerk bevorzugt (kein Multicast- / Broadcast-Verkehr erforderlich, keine Tonnen von ARP-Anforderungen usw.).
quelle