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

Rispondere a