2010-04-29 17 views
5

Ho un comp con 2 carte eth, collegate con patch-cord (cavo ethern diretto dal 1 ° al 2 °).linux: disabilita l'uso del loopback e invia i dati via filo tra 2 carte et di un comp

Il linux è installato, voglio inviare i dati dalla prima scheda di rete al 2 °. E voglio forzare il pacchetto a passare via cavo. Posso configurare qualsiasi ip sulle carte.

Con ping ottengo contatori su schede costanti.

E 'possibile con prese tcp/ip?

PS. Ho bisogno di scrivere un programma. che invierà pacchetti via eth, quindi domanda relativa allo stackoverflow. Ci può essere qualche modo dipendente dal sistema operativo, mi aiuteranno anche

+0

Possibile duplicato di http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface – osgx

+0

Questo è stato chiuso fuori tema due anni dopo la risposta alla domanda. Eppure le risposte descrivono i programmi, e l'asker dice che stanno scrivendo un programma. Sì, questo è anche in argomento per altri siti Stack Exchange. Lo contrassegnerò per essere riaperto. – dcorking

+0

dcorking, l'attività può essere risolta utilizzando solo gli strumenti relativi al sistema operativo, senza creare nuovi programmi. La risposta di z22 assomiglia a ciò che è necessario. E a http://serverfault.com/questions/127636/force-local-ip-traffic-to-an-external-interface serverfault abbiamo la soluzione corretta. – osgx

risposta

0

Dovresti essere in grado di scrivere un programma che lo faccia utilizzando le prese a pacchetto (famiglia di protocolli PF_PACKET), ma dovrai gestire le intestazioni per l'IP e gli strati superiori da soli.

+1

Quindi non posso forzare che i pacchetti TCP o IP non siano loopback? – osgx

+0

Non credo, ma potresti provare ad aggiungere una route host per ogni IP attraverso l'interfaccia opposta. – caf

5

Dai un'occhiata alla tabella di routing locale locale. Con gli strumenti iproute2 installati fare ip route show table locale. Come puoi vedere, tutti i pacchetti destinati ai tuoi IP locali non passano mai attraverso le NIC poiché sono contrassegnati come locale.

Per forzare i pacchetti andare via scheda Ethernet rimuovere la route appropriata (ad esempio percorso IP elimina 192.168.122.1 dev eth0 table locale). Per ripristinare questa rotta basta impostare l'interfaccia verso il basso e verso l'alto: il kernel farebbe il lavoro per inserire questi percorsi.

+0

L'idea sembra buona.Certo, non è più possibile eseguire il ping sull'interfaccia locale, ma a quanto pare non è possibile eseguire il ping su qualsiasi rete (sembra che il kernel non accetti più pacchetti per questo IP). – Jezz

4

Ho provato il route IP ... tabella locale sopra. O non funziona o sto facendo qualcosa di sbagliato.

Il trucco è utilizzare una serie di indirizzi IP fittizi per forzare il kernel a instradarlo attraverso il cavo e NAT per cambiarlo nuovamente all'indirizzo IP reale.

Lascia che eth0 ed eth1 siano le due schede ethernet; IP0 e IP1 il suo indirizzo IP; MAC0 e MAC1 rispettivamente il suo indirizzo MAC. Utilizzeremo due indirizzi IP fittizi: IP00 e 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 

Utilizzare gli indirizzi IP fittizi IP00 e IP11 anziché quello reale.