2010-04-29 2 views
5

Ich habe eine comp mit 2 eth karten, verbunden mit patch-kabel (direkte eth. Kabel von 1st bis 2nd).linux: deaktivieren mit loopback und senden daten über draht zwischen 2 eth karten einer comp

Der Linux ist installiert, ich möchte Daten von der 1. Netzwerkkarte zu 2. senden. Und ich möchte das Paket zwingen, über Kabel zu gehen. Ich kann jede IP auf Karten einrichten.

Mit Ping bekomme ich Zähler auf Karten konstant.

Ist es möglich mit TCP/IP-Sockets?

PS. Ich muss ein Programm schreiben. Das wird Pakete über eth senden, also stackoverflow-bezogene Frage. Es kann einige OS-abhängige Weise geben, sie werden mir auch helfen

+0

Mögliches Duplikat von http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface – osgx

+0

Dies wurde als Off-Topic zwei Jahre nach der Beantwortung der Frage geschlossen. Doch die Antworten beschreiben Programme, und der Fragesteller sagt, dass sie ein Programm schreiben. Ja, das ist auch Thema für andere Stack Exchange-Site. Ich werde dies als wieder geöffnet kennzeichnen. – dcorking

+0

dcorking, kann die Aufgabe mit nur Betriebssystem-bezogenen Tools gelöst werden, ohne neue Programme zu erstellen. Die Antwort von z22 sieht wie benötigt aus. Und bei serverfault http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface haben wir die richtige Lösung. – osgx

Antwort

0

Sie sollten in der Lage sein, ein Programm zu schreiben, das das tut Paketsockets (Protokollfamilie PF_PACKET), aber Sie müssen die Header für die IP behandeln und höhere Schichten selbst.

+1

Also kann ich nicht erzwingen, TCP oder IP-Pakete werden nicht Loopbacked? – osgx

+0

Ich glaube nicht, aber Sie könnten versuchen, eine Host-Route für jede IP über die gegenüberliegende Schnittstelle hinzuzufügen. – caf

5

Werfen Sie einen Blick in lokale Routing-Tabelle. Mit iproute2 tools installiert tun ip route zeigen Tabelle lokal. Wie Sie sehen können, würden alle Pakete, die für Ihre lokalen IPs bestimmt sind, niemals durch NICs gehen, da sie als local markiert sind.

Um Pakete über Ethernet-Karte zu erzwingen entfernen Sie die entsprechende Route (d. H. ip Route löschen 192.168.122.1 dev eth0 Tabelle lokal). Um diese Route wiederherzustellen, setzen Sie die Schnittstelle einfach nach unten und oben: Der Kernel würde die Arbeit tun, um diese Routen einzufügen.

+0

Idee scheint gut.Sicher, es ist nicht mehr möglich, lokale Schnittstelle zu pingen, aber es scheint, dass es nicht möglich ist, irgendetwas im Netzwerk zu pingen (es scheint, dass der Kernel keine Pakete für diese IP mehr akzeptiert). – Jezz

4

Ich versuchte die IP-Route ... Tabelle lokale Methode oben. Entweder funktioniert es nicht oder ich mache etwas falsch.

Der Trick besteht darin, einen Satz von Dummy-IP-Adressen zu verwenden, um den Kernel zu zwingen, es über die Leitung zu routen, und NAT, um es zurück zu der realen IP-Adresse zu ändern.

Lassen Sie eth0 und eth1 die beiden Ethernet-Karten sein; IP0 und IP1 seine IP-Adresse; MAC0 und MAC1 seine MAC-Adresse. Wir werden zwei Dummy-IP-Adressen verwenden: IP00 und IP11.

arp -s IP00 MAC0 
arp -s IP11 MAC1 
ip route add IP00 dev eth1 
ip route add IP11 dev eth0 
iptables -t nat -A POSTROUTING -d IP11 -j SNAT --to-source IP00 
iptables -t nat -A POSTROUTING -d IP00 -j SNAT --to-source IP11 
iptables -t nat -A PREROUTING -d IP00 -j DNAT --to-destination IP0 
iptables -t nat -A PREROUTING -d IP11 -j DNAT --to-destination IP1 

Verwenden Sie die Pseudo-IP-Adressen IP00 und IP11 anstelle der echten.

Verwandte Themen