Ich habe ein Netzwerk, das als Schleife konfiguriert werden muss. Es besteht aus 3 Knoten, von denen jeder über zwei Schnittstellen verfügt. Das folgende Diagramm erklärt es.
+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
| 10.0.3.1 10.0.1.1 10.0.1.2 10.0.2.2 10.0.2.3 10.0.3.3 |
+--<----------------------------<--------------------------------------------+
Ich möchte einen Ping von Knoten 1 zu Knoten 3 senden, sodass die Anforderung über Knoten 2 geht und die Antwort von Knoten 3 direkt an Knoten 1 geht.
node1$ ping 10.0.2.3
Ich habe die Knoten wie folgt konfiguriert:
node1# route add -net 10.0.2.0/24 gw 10.0.1.2
node2# route add -net 10.0.3.0/24 gw 10.0.2.3
node3# route add -net 10.0.1.0/24 gw 10.0.3.1
Beim Ausführen des Pings kommt die Anfrage von Knoten 1 bei Knoten 3 an. Knoten 3 antwortet jedoch nicht und generiert nicht einmal eine Antwort (zumindest kann ich das mit Wireshark erfassen).
Können Sie mir bitte einen Hinweis geben?
TA
Antwort1
Wenn ein Knoten denQuelleIP-Adresse für ein Paket, von dem es stammt. Sofern keine anderen Einschränkungen bestehen, wird normalerweise die IP-Adresse ausgewählt, die dem nächsten Hop auf der Route zum Ziel des Pakets „am nächsten“ ist.
Aus der Sicht von Knoten 1 ist der nächste Hop zu Knoten 3 10.0.1.2
. Die am nächsten zu liegende IP-Adresse von Knoten 1 10.0.1.2
ist 10.0.1.1
, nicht 10.0.3.1
. (Eine IP-Adresse im selben Subnetz wie das Ziel gilt als „näher“ am Ziel als eine IP-Adresse, die sich nicht im selben Subnetz befindet.)
Überprüfen Sie die Quell-IP-Adresse des Pings. Höchstwahrscheinlich ist es 10.0.1.1
, nicht 10.0.3.1
. Wenn Knoten 3 keine Route zu hat 10.0.1.1
, kann er nicht antworten.
Antwort2
Die Knoten scheitern korrekterweise an der Wiederholung, um ein außer Kontrolle geratenes Bridge-Broadcasting zu verhindern. Ich empfehle Ihnen, das Spanning Tree Protocol auszuführen. Dadurch können Sie voll funktionsfähige Routen zwischen allen Knoten einrichten. Mir fällt keine andere Möglichkeit ein, dies zu tun, es sei denn, Sie sind bereit, die Konnektivität zwischen bestimmten Links auf Ebene 2 oder 3 einzuschränken.
Antwort3
( /sbin/route
ist veraltet, verwenden Sie ip route
stattdessen).
Wenn Ihre Pakete nur in eine Richtung reisen sollen, bedeutet das, dass jeder Knoten den nächsten Knoten als Gateway verwenden muss, unabhängig vom Ziel.
node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1
Bei den meisten Distributionen ist die Rückwärtspfadfilterung jedoch häufig standardmäßig aktiviert. Die Rückwärtspfadfilterung ist ein Filter für eingehende Pakete, der zu prüfen versucht, ob eine Antwort auf dieses Paket an dieselbe Schnittstelle geht, an der das Paket empfangen wird. Dies ist eine gute Sache in einem normalen Netzwerk, in dem das Routing symmetrisch ist. In Ihrem Fall benötigen Sie jedoch asymmetrisches Routing. Daher können Sie die Rückwärtspfadfilterung an der Schnittstelle, an der Sie Pakete empfangen, einfach deaktivieren oder zumindest reduzieren, sodass nur geprüft wird, ob die Quell-IP geroutet werden kann:
node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2
Dokumentationen zum Reverse Path Filtering und anderen Reglern finden Sie in der Kerneldokumentation unter Documentation/networking/ip-sysctl.txt
. Wo Sie diese finden, hängt von Ihrer Distribution ab (oder suchen Sie einfach im Internet nach ip-sysctl.txt
).
Viel Spaß beim Loopen!