Erzwingen Sie den lokalen Netzwerkverkehr über den Switch

Erzwingen Sie den lokalen Netzwerkverkehr über den Switch

Ich habe eine Maschine mit drei Netzwerkkarten. Eine Karte ist mit einem WAN verbunden und die anderen beiden Karten sind mit demselben Switch mit demselben Subnetz (192.168.1.0/24) verbunden. Ich möchte Daten zwischen den beiden Karten senden, aber sicherstellen, dass die Daten tatsächlich durch den Switch gehen und nicht intern im Linux-Netzwerkstapel bleiben.

Wenn ich die beiden Karten normal einrichte und versuche, die eine von der anderen aus anzupingen, funktioniert es, aber Wireshark zeigt keinen Datenverkehr an, es geht also nichts an das Netzwerk.

Ich habe versucht, statische Routen zum Switch einzurichten, um den gesamten Datenverkehr über den Switch laufen zu lassen. Wenn ich das mache, werden die Pings nicht beantwortet und ich erhalte eine Flut unbeantworteter ARP-Anfragen, die versuchen, die andere Adresse zu finden. Aber jede Adresse kann einen anderen Rechner im Subnetz anpingen, und dieser Rechner kann jede der beiden Adressen anpingen.

Ich habe versucht, die ARP-Filtereinstellungen im Linux-Kernel zu ändern, aber ohne Erfolg.

Irgendwelche Vorschläge? Danke!

Außerdem gibt es Bonuspunkte für das Einrichten einer Netzwerkkarte mit IP-Aliasing, um dasselbe zu tun.

Antwort1

Ich bin neu hier, aber ich habe möglicherweise die Antwort auf diese Frage.

Das Betriebssystem wird versuchen zu erkennen, dass die andere Netzwerkkarte ein lokales Gerät ist. Ich denke, Sie können die 'Entwickler' Option zu 'IP-Route' um es aus der anderen Netzwerkkarte herauszuzwingen.

Ich habe beispielsweise eine IP-Adresse:

45.32.160.129

Und die Route für dieses Subnetz zeigt das Gerät dev ens3

45.32.160.0/24 dev ens3 proto kernel scope link src 45.32.160.129

Aber nehmen wir an, ich hätte eine andere Netzwerkkarte, ens4 bei 45.32.161.4/24:

45.32.161.0/24 dev ens4 proto kernel scope link src 45.32.161.4

dann können Sie die 'Entwickler' Option zu 'IP-Route', um das verwendete Gerät anzugeben. Auf diese Weise können Sie angeben, dass die andere Netzwerkkarte sich selbst für die ens3-IP verwendet, anstatt ens3 (sich selbst) zu verwenden, wenn Sie versuchen, vom lokalen Computer darauf zuzugreifen. Der Trick dabei ist, dass Sie auch Policy Routing verwenden müssen. Denn Sie können nicht zulassen, dass die Netzwerkkarte versucht, auf sich selbst zuzugreifen und auch die Schnittstelle der anderen Karte verlässt, da sie sich selbst nie finden wird. Sie müssen also mit Policy/Source Routing angeben, dass sie nur dann durch die andere Karte springen soll, wenn diese Karte versucht, darauf zuzugreifen. Das ist, wo Sie eine Quellübereinstimmung angeben müssten. Darüber hinaus müssten Sie sicherstellen, dass Sie in der Netzwerksoftware Ihrer Wahl, die Sie verwenden oder mit der Sie testen möchten, an die richtige IP-Quelladresse gebunden sind. Dies sollte sie zwingen, über den Switch auf die andere Netzwerkkarte zuzugreifen. Natürlich würden Sie dann dasselbe für die andere Karte tun, nur andersherum.

Dies könnte Ihr Problem lösen. Sehen Sie sich die 'IP-Route' Manpage für Routenpriorität und die 'Entwickler'-Parameter. Sehen Sie sich dann die Regelübereinstimmung an, um den Richtlinienteil durchzuführen. Es sollte ungefähr so ​​aussehen:

ip rule add from 45.32.161.4 lookup from1
ip rule add from 45.32.160.129 lookup from2

Fügen Sie dann die entgegengesetzten Routen hinzu:

ip route add 45.32.160.129 via 45.32.161.4 dev ens4 table from1
ip route add 45.32.161.4 via 45.32.160.129 dev ens3 table from2

Und Sie müssen diese Tabellen in /etc/iproute2 erstellen

verwandte Informationen