Ich habe eine Maschine mit mehreren Schnittstellen, die ich nach Belieben konfigurieren kann, zum Beispiel:
- eth1: 192.168.1.1
- eth2: 192.168.2.2
Ich möchte den gesamten Datenverkehr, der über die andere Schnittstelle an eine dieser lokalen Adressen gesendet wird, weiterleiten. Beispielsweise sollten alle Anforderungen an einen iperf-, ftp-, http-Server unter 192.168.1.1 nicht nur intern weitergeleitet, sondern über eth2 weitergeleitet werden (und das externe Netzwerk übernimmt die Weiterleitung des Pakets an eth1).
Ich habe versucht, verschiedene Befehle wie iptables, ip route usw. zu lesen, aber nichts hat funktioniert.
Das Verhalten, das ich am ehesten erreichen konnte, war:
ip route change to 192.168.1.1/24 dev eth2
die alle 192.168.1.x auf eth2 senden, außer 192.168.1.1, die noch intern geroutet wird. Könnte ich dann NAT-Weiterleitungen für den gesamten Datenverkehr durchführen, der an gefälschte 192.168.1.2 auf eth1 gerichtet ist und intern auf 192.168.1.1 umgeleitet wurde? Ich kämpfe eigentlich mit Iptables, aber es ist zu hart für mich.
Ziel dieses Setups ist das Testen von Schnittstellentreibern ohne Verwendung von zwei PCs.
Ich benutze Linux, aber wenn Sie wissen, wie man das mit Windows macht, kaufe ich es!
Bearbeiten:
Das externe Netzwerk ist nur ein Crossover-Kabel zwischen eth1 und eth2. Angenommen, ich habe einen http-Server auf meinem Computer. Jetzt möchte ich vom selben Computer auf diesen Server zugreifen, aber ich möchte den TCP / IP-Verkehr zwingen, über dieses eth1 / eth2-Kabel zu gehen. Wie muss ich meine Schnittstellen dafür konfigurieren?
quelle
Antworten:
Ich habe Caladonas Antwort erweitert, da ich keine Antwortpakete sehen konnte. Für dieses Beispiel:
Lokale iptable-PC-Routen werden auf SNAT- und DNAT-ausgehenden Datenverkehr zur gefälschten IP-Adresse eingestellt.
Die Regeln machen Folgendes:
Zusammenfassend kann das lokale System jetzt mit einer 'virtuellen' Maschine mit den Adressen 192.168.1.100 und 192.168.2.100 kommunizieren.
Als nächstes müssen Sie Ihren lokalen PC zwingen, den externen Router zu verwenden, um Ihre gefälschte IP zu erreichen. Dazu erstellen Sie eine direkte Route zu den IPs über den Router. Sie möchten sicherstellen, dass Sie die Pakete auf das Gegenteil des Zielsubnetzes zwingen.
Damit dies alles funktioniert, muss der externe Router wissen, wie er die gefälschten IP-Adressen auf Ihrem lokalen PC erreicht. Sie können dies tun, indem Sie Proxy-ARPs für Ihr System aktivieren.
Mit diesem Setup können Sie die gefälschten IP-Adressen nun wie ein echtes System auf Ihrem lokalen PC behandeln. Durch das Senden von Daten an das Subnetz .1 werden Pakete aus der Schnittstelle .2 herausgefordert. Durch das Senden von Daten an das Subnetz .2 werden Pakete aus der Schnittstelle .1 herausgefordert.
quelle
Ich habe das Folgende unter Linux erfolgreich verwendet, um den Durchsatz einer neuen 10-Gbit / s-Dual-Port-Karte im "Loopback" -Modus zu testen, d. H. Einen Port direkt in den anderen gesteckt. Dies ist alles nur ein bisschen Voodoo, nur um Pakete aus der Leitung zu zwingen, aber wenn Sie dies nicht tun, wird Linux den Verkehr durch den Kernel kurzschließen (daher die Frage des OP). Bei der obigen Antwort von Casey bin ich mir nicht sicher, ob es wirklich notwendig war, einen externen Router zu haben, oder nicht, aber das Folgende ist völlig eigenständig. Die beiden Schnittstellen sind eth2 und eth3.
Geben Sie den Schnittstellen IPs und ordnen Sie sie in separaten Netzwerken zu:
Als nächstes richten wir ein doppeltes NAT-Szenario ein: zwei neue gefälschte Netzwerke, mit denen das andere erreicht wird. Versorgen Sie unterwegs Ihr falsches Netzwerk mit NAT. Bestimmen Sie auf dem Weg dorthin das Ziel. Und umgekehrt für das andere Netzwerk:
Sagen Sie dem System nun, wie es zu den gefälschten Netzwerken kommt, und füllen Sie die Arp-Einträge vorab aus (stellen Sie sicher, dass Sie Ihre MAC-Adressen ersetzen, verwenden Sie meine nicht):
Dies täuscht Linux genug, um tatsächlich Pakete auf den Draht zu legen. Beispielsweise:
eth2 erlischt, die Quell-IP 10.50.0.1 wird auf 10.60.0.1 NATted und bei eth3 wird das Ziel 10.60.1.1 auf 10.50.1.1 NATted. Und die Antwort nimmt eine ähnliche Reise.
Verwenden Sie nun iperf, um den Durchsatz zu testen. Binden Sie an die richtigen IPs und stellen Sie sicher, welche IP Sie kontaktieren (die falsche Adresse des anderen Endes):
Vergewissern Sie sich, dass der Datenverkehr wirklich zum Kabel fließt:
Sie können auch / proc / interrupts ansehen, um sicherzugehen, dass die Karte verwendet wird:
Wie auch immer, ich fand diesen Beitrag auf der Suche nach einer Lösung, danke für die Fragen und Antworten und hoffe, dass dies jemand anderem hilft, diesen Beitrag in Zukunft zu finden.
quelle
Wie immer - ich bin ein bisschen spät dran -, aber heutzutage könnte man Netzwerk-Namespaces verwenden, um die Schnittstellen zu isolieren und lokale Weiterleitungen zu verhindern (und mit iptables zu fummeln :)).
Erstellen Sie Namespaces (alle mit den erforderlichen Berechtigungen, zB als root):
Beachten Sie, dass auf die Schnittstellen status / config jetzt im Kontext des zugewiesenen Namespaces zugegriffen werden muss. Sie werden also nicht angezeigt , wenn Sie einen nackten IP-Link ausführen, da dieser im Kontext des Standardnamespaces ausgeführt wird. Das Ausführen eines Befehls in einem Namespace kann mit ausgeführt werden
als Präfix.
Weisen Sie jetzt den Schnittstellen Namespaces zu, wenden Sie config an und richten Sie die Schnittstellen ein:
Jetzt können Sie die Anwendungen im Namespace ausführen - für den iperf-Serverlauf
und der Kunde:
Der Datenverkehr wird nun über die physischen Schnittstellen gesendet, da der gesamte Netzwerkstack, die Schnittstelle, das Routing ... durch die Namespaces isoliert ist und der Kernel nicht in der Lage ist, die im Datenverkehr verwendeten Adressen mit lokalen (verfügbaren) Schnittstellen abzugleichen.
Wenn Sie mit Ihren Experimenten fertig sind, löschen Sie einfach die Namespaces:
Die Schnittstellen werden dem Standard-Namespace neu zugewiesen und alle im Namespace vorgenommenen Konfigurationen verschwinden (z. B. müssen zugewiesene IP-Adressen nicht gelöscht werden).
quelle
Ok, es ist mir endlich gelungen, meine Konfiguration einzurichten.
Die Idee ist, eine andere gefälschte Adresse zu verwenden, um die Route dieser gefälschten Adresse zur Schnittstelle 2 zu erzwingen und dann die gefälschte Adresse mit der realen Adresse 2 mit NAT / iptables zu übersetzen.
Meine Einrichtung besteht eigentlich aus einem Router, den ich zwischen IF1 (Schnittstelle 1) und IF2 telnet kann
In meiner Konfiguration befinden sich FAKE_ADDR und IF1_ADDR im selben Subnetz.
Und auf dem Router:
Wenn ich etwas an FAKE_ADDR sende, wird pkt über IF1 an den Router weitergeleitet und erneut an IF2. Dann wird FAKE_IP durch IF2_ADDR ersetzt. Das Paket wird vom Server verarbeitet, das Ergebnis wird von IF2_ADDR, das durch FAKE_ADDR ersetzt wird, an IF1_ADDR zurückgesendet.
Möglicherweise ist es möglich, eine einfachere Konfiguration mit nur einem Crossover-Kabel zu verwenden, aber da ich nicht versucht habe, habe ich es vorgezogen, meine funktionierende Lösung anzugeben.
quelle
Die Antwort von Thomas Tannhäuser war genau richtig!
Ich hatte eine ähnliche Situation: eine einzelne Maschine mit zwei enet-Schnittstellen. Mein Plan war, eine Schnittstelle als Server (Empfänger) und die andere als Client (Absender) zu verwenden. Jede Schnittstelle wäre mit dem Router verbunden und iperf würde den Datenverkehr durch den Router leiten, um den Durchsatz, die PPS, die Verzögerung usw. zu messen.
Leider war der Ansatz von iptables nicht intuitiv und mit Problemen behaftet. Nach ein paar frustrierenden Stunden gab ich diesen Angriffsplan auf. Inspiriert von Thomas Vorschlag, machte ich ein paar Hausaufgaben zu Linux IP Namespaces und begann die Einfachheit und Eleganz dieser Lösung zu schätzen.
Nachfolgend finden Sie eine Liste der genauen Befehle, mit denen ich den Fedora FC26 für diese Funktion konfiguriert habe. Die beiden Schnittstellen sind enp1s0 und enp3s0. Der Router verfügt über zwei Schnittstellen mit den Adressen 192.168.2.112 und 172.16.16.2. Jeder FC26 ENET-Anschluss ist direkt mit der entsprechenden Router-Schnittstelle verbunden.
quelle
Es hört sich so an, als ob Sie Ihre Linux-Box in eine Router / Bridge / Gateway / Firewall-Box verwandeln möchten. Die folgenden Ressourcen könnten das sein, wonach Sie suchen:
Das Linux-Router-Projekt
Liste der Router- oder Firewall-Distributionen
Linux LiveCD Router
Linux Journal - Der Linux Router
Update basierend auf weiteren Informationen:
Ich glaube nicht, dass Sie tun können, was Sie wollen. Das Betriebssystem wird immer auf seine interne Routingtabelle schauen und beide IP-Adressen lokal "sehen". Es wird dann den Verkehr innerhalb des Betriebssystems leiten und niemals auf die Leitung legen. Sie benötigen eine zweite Maschine oder zwei virtuelle Maschinen (siehe Xen ).
quelle
Eine Menge Dinge, die hier zu erledigen sind, daher kann ich meine Genauigkeit nicht vollständig garantieren, aber die ursprüngliche Frage scheint nach einer Technik zu suchen, die als "an sich selbst senden" bekannt ist . Die verknüpfte Suche zeigt, was meiner Meinung nach der am besten gepflegte Kernel-Patch ist, wie Top-Link + Diskussionen und Patches mit anderen Ansätzen auf verschiedenen Mailinglisten, insbesondere. LKML.
Ich denke, man sollte sich auch die Netzwerk-Namespaces ansehen , die mit iproute2s "ip netns" erstellt wurden . Dies erfordert auch etwas zusätzliche Schnittstellen- und Routing-Magie und ist daher möglicherweise nicht weniger komplex als der massive Iptables-Hoopla in den anderen Antworten.
Kommentare sind auf jeden Fall willkommen, wenn jemand etwas Nützliches dabei findet - das Wie, das Was, das Wo Ihrer Implementierung.
quelle
Überprüfen Sie diesen Artikel. Hier werden die detaillierten Schritte zum Aktivieren des Internetzugriffs auf eine VirtualBox VM mithilfe der NAT-Weiterleitung aufgeführt.
http://jackal777.wordpress.com/2012/02/13/virtualbox-host-only-networking-nat-for-internet-access/
quelle
Hier ist, wie ich es für IPV6 zum Laufen gebracht habe
zugewiesene statische IPS
Richten Sie nur Host-Routen zu "FAKE" -Adressen ein
bevölkerte die Nachbar-Tabelle ... wie die Arp
hat die ip6tables-Einträge hinzugefügt
quelle