domanda che pensavo fosse facile e invece si sta rivelando abbastanza ostica, spero qualcuno mi salvi
ho un pc con 4 schede di rete e un piccolo problem di routing da risolvere; la topologia è riportata in ascii art qui http://pastebin.com/f4LYhW19
in sostanza ho 4 schede di rete, la prima collegata su una rete in cui gira un client particolare, l'ultima collegata su una rete su cui gira un server particolare
le reti della seconda e terza interfaccia sono direttamente collegate tra loro tramite un router che effettua delle manipolazioni particolari sui pacchetti
quello che vorrei è, credo, abbastanza semplice
tutto il traffico in ingresso alla prima interfaccia deve essere dirottato sulla seconda, tutto il traffico in uscita dalla terza
interfaccia deve essere dirottato sulla quarta
specularmente tutto il traffico in arrivo sulla quarta interfaccia deve essere dirottato sulla terza e tutto il traffico in uscita dalla seconda interfaccia deve essere dirottato sulla prima
spero che l'immagine sia più chiara della descrizione a parole. vorrei che i pacchetti seguissero la linea fatta dagli asterischi. per ora se lancio un ping su una macchina connessa sulla rete 10.0.0.0 verso 10.0.4.2, questo viene direttamente intercettato dall'interfaccia eth2. idem un pacchetto diretto diretto da 10.0.0.* a 192.168.27.* viene raccolto direttamente da eth3
come devo impostare le regole di route?
per ora un mio amico mi ha suggerito di aggiungere due tabelle di routing in /etc/iproute2/rt_table
200 eth0_to_eth1
201 eth2_to_eth3
e quindi
questo dovrebbe implementare le regole della sola andata, eppure funziona a metàcodice:#!/bin/sh IPT=$(which iptables) IPT_M="$IPT -t mangle" $IPT_M -N MARK_FROM_ETH0 $IPT_M -N MARK_FROM_ETH2 $IPT_M -A PREROUTING -i eth0 -m state --state RELATED,ESTABLISHED -j CONNMARK --restiore-mark $IPT_M -A PREROUTING -i eth0 -m state --state NEW -j MARK_FROM_ETH0 $IPT_M -A MARK_FROM_ETH0 -j MARK --set-mark 10 $IPT_M -A MARK_FROM_ETH0 -j CONNMARK --save-mark $IPT_M -A PREROUTING -i eth2 -m state --state RELATED,ESTABLISHED -j CONNMARK --restore-mark $IPT_M -A PREROUTING -i eth2 -m state --state NEW -j MARK_FROM_ETH2 $IPT_M -A MARK_FROM_ETH2 -j MARK --set-mark 11 $IPT_M -A MARK_FROM_ETH2 -j CONNMARK --save-mark # setup tabella eth0_to_eth1 ip route add 127.0.0.0/8 dev lo table eth0_to_eth1 ip route add 10.0.0.0/24 dev eth0 table eth0_to_eth1 ip route add 10.0.1.0/24 dev eth1 table eth0_to_eth1 ip route add 192.168.27.0/24 via 10.0.1.z table eth0_to_eth1 # z = ip del router esterno che poi rigira i pacchetti in eth2 # setup tabella eth2_to_eth3 ip route add 127.0.0.0/8 dev lo table eth2_to_eth3 ip route add 10.0.4.0/24 dev eth2 table eth2_to_eth3 ip route add 192.168.27.0/24 dev eth3 table eth2_to_eth3 # aggancio le tabelle con il mark dei pacchetti ip rule add from all fwmark 10 table eth0_to_eth1 ip rule add from all fwmark 11 table eth2_to_eth3
dalla rete 10.0.0.0/24 riesco a pingare la rete 192.168.27.0/24, ma la comunicazione non passa attraverso il percorso definito dalle regole --> tramite wireshark non vedo attività su eth1 ed eth2 ma solo su eth1/eth3
riesco invece a pingare correttamente (attraverso il giusto percorso) gli host di 10.0.1.0/24 e quelli di 10.0.4.0/24 ad eccezione di 10.0.4.2 che viene pingato direttamente...
qualche anima pia mi illumina?
grazie mille!