Luca Berra ha scritto:
On Thu, May 06, 2010 at 10:58:47PM +0200, Gelpi Andrea wrote:
I pacchetti in arrivo dall'esterno vengono ruotati correttamente verso
la DMZ e correttamente tornano indietro (i source nat e destination
nat funzionano come desiderato).
Purtroppo però questi pacchetti utilizzano sempre e comunque un solo
default gateway, non seguono cioè ciò che sta scritto nella varie
routing table.
Lo sai che se non dai nessun dettaglio restano chiacchiere da bar, vero?
suvvia facci vedere le table e le rule
Dunque la situazione è la seguente:
ISP1 mi fornisce la rete 1.1.1.0/28 attaccata ad eth0
ISP2 mi fornisce la rete 2.2.2.0/29 attaccata ad eth1
in /etc/iproute2/rt_tables ho aggiunto le tabelle ISP1 e ISP2
Poi lancio i seguenti comandi:
ip route add 1.1.1.0/28 dev eth0 source 1.1.1.2 table IPS1
ip route add default via 1.1.1.1 table ISP1
ip route add 127.0.0.0/8 dev lo table ISP1
ip route add 2.2.2.0/29 dev eth1 source 2.2.2.2 table ISP2
ip route add default via 2.2.2.1 table ISP2
ip route add 127.0.0.0/8 dev lo table ISP2
ip route del 1.1.1.0/28 dev eth0 source 1.1.1.2
ip route add 1.1.1.0/28 dev eth0 source 1.1.1.2
ip route del 2.2.2.0/29 dev eth1 source 2.2.2.2
ip route add 2.2.2.0/29 dev eth1 source 2.2.2.2
ip rule add from 1.1.1.0/28 table ISP1
ip rule add from 2.2.2.0/29 table ISP2
ip route del default
ip route add default via 2.2.2.1
Con le regole così impostate se da Internet provo a collegarmi ad un IP della rete 1.1.1.0/28 mi
rispondono tutti (a patto di averli definiti ovviamente in /etc/network/interfaces).
Stessa identica cosa se punto ad un IP della seconda rete.
Se ora aggiungo in iptables questa regola per raggiungere un server in DMZ.
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.6 -p icmp -j DNAT
--to-destination 192.168.2.92
Se ora da fuori lancio il ping verso 1.1.1.6 e seguo quello che succede con tcpdump -ni eth0
vedo solo le echo request. Non vedo le echo reply.
Se faccio tcpdump -ni eth2 (l'interfaccia dove c'è la DMZ) vedo le echo request e subito dopo la
echo replay.
Ora se faccio tcpdump -ni eth1 vedo uscire le echo reply con IP mittente
1.1.1.6.
Se ora lancio questo comando:
ip route add default scope global nexthop via 2.2.2.1 dev eth0 weight 99 nexthop via 1.1.1.1 dev
eth1 weight 1
le echo replay iniziano a funzionare.
Tuttavia se prima di questo ultimo comando in iptables ho la riga:
iptables -t nat -A PREROUTING -i eth1 -d 2.2.2.6 -p icmp -j DNAT
--to-destination 192.168.2.92
Con un solo default gateway che punta a 2.2.2.1 i ping funzionano.
Appena aggiungo il secondo default gateway i ping escono da 1.1.1.1 con IP
sorgente 2.2.2.6
ip route list cache mostra sempre due default gateway per ogni IP cachato e li mette in ordine
numerico, quindi tutto esce solo da 1.1.1.1 perchè è il primo.
Circa un paio di anni fa avevo usato questa configurazione senza problemi.
Le differenze erano una debian non virtualizzata tramite xen e un kernel
sicuramente più vecchio.
A me sembra che il routing non legga la rule table (quindi no policy) ma utilizzi sempre la main
routing table e basta per tutti gli IP che non sono definiti in /etc/network/interfaces (solo
per questi utilizza correttamente la policy di routing).
--
ing. Andrea Gelpi
***************************************************
La Terra non la abbiamo ereditata dai nostri avi,
ma la abbiamo presa in prestito dai nostri bambini.
***************************************************
We do not inherit the Earth from our parents,
but borrow it from our children.
***************************************************
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List