View Full Version : Problema Default Gateway
*) Gateway/Firewall(iptables) Linux con 5 Ethernet
*) 3 LAN diverse: Tecnica(10.42.10.X), Amministrativa(10.45.10.X) e DMZ(10.43.10.X)
*) 2 Uplink ADSL: 2 Router ADSL con 8 indirizzi pubblici ciascuno
Tutto è configurato ad-hoc, il problema è che io vorrei che la DMZ uscisse in Internet con un router ADSL(eth3), mentre l'area Tecnica e l'area Amministrativa con l'altro router(eth0).
Il problema è che ci può essere solo un Default Gateway, quindi o si esce con l'eth0 o con l'eth3, ma non entrambi. Da qui o Internet funziona solo per la DMZ o solo per Tecnica/Amministrativa...
Come si può far coesistere il tutto? :help:
Cioè le "route" dovrebbero dipendere non solo dalla destinazione, ma anche dalla sorgente... :(
1mPHUNit0
23-05-2006, 15:53
Tutto configurato ad hoc per quella topologia
....tu vuoi cambiare topologia....indi configurazioni.
Ummm...non smanetto da un tot...lascio la mano.
Tutto configurato ad hoc per quella topologia
....tu vuoi cambiare topologia....indi configurazioni.
Ummm...non smanetto da un tot...lascio la mano.
In iptables ho mappato correttamente la DMZ con l'eth3 e l'area Tec/Amm con l'eth0, ma il problema è che ovviamente la destinazione 0.0.0.0/0 è associata all'interfaccia eth0, quindi la DMZ non può andare in Internet perché lei può usare solo l'eth3 come scheda di destinazione.
Se fosse possibile avere 2 default gataway sulla stessa macchina da scegliere in base alla NIC sorgente sarebbe fatta... :muro:
ilsensine
23-05-2006, 16:11
*) Gateway/Firewall(iptables) Linux con 5 Ethernet
*) 3 LAN diverse: Tecnica(10.42.10.X), Amministrativa(10.45.10.X) e DMZ(10.43.10.X)
*) 2 Uplink ADSL: 2 Router ADSL con 8 indirizzi pubblici ciascuno
Tutto è configurato ad-hoc, il problema è che io vorrei che la DMZ uscisse in Internet con un router ADSL(eth3), mentre l'area Tecnica e l'area Amministrativa con l'altro router(eth0).
Il problema è che ci può essere solo un Default Gateway, quindi o si esce con l'eth0 o con l'eth3, ma non entrambi. Da qui o Internet funziona solo per la DMZ o solo per Tecnica/Amministrativa...
Come si può far coesistere il tutto? :help:
Utilizzando più default gateway (sì, se ne può creare più di uno).
Prova così:
Innanzitutto crei le default route in questa maniera:
route add default dev eth0 gw [gateway per eth0]
route add default dev eth3 gw [gateway per eth3]
Quindi crei le regole di postrouting in questa maniera:
iptables -t nat -A POSTROUTING -s [subnet DMZ] -j SNAT --to-souce [IP di eth3]
iptables -t nat -A POSTROUTING -s [subnet area tecnica/amministrativa] -j SNAT --to-souce [IP di eth0]
Rigorosamente non testato, ma in via di principio potrebbe andare.
ilsensine
23-05-2006, 16:22
Preciso: ho testato due diverse default route per vedere se il kernel passava automaticamente dall'una all'altra se la prima non era raggiungibile, e il risultato è stato positivo. Da vedere se, in presenza di un ip sorgente forzato a quello di una particolare interfaccia, il kernel sceglie automaticamente la default route per quella interfaccia. Tu sei la cavia ideale per questo esperimento ;)
Questo è l'output del comando "route -n":
81.XXX.XXX.XXX 0.0.0.0 255.255.255.248 U 0 0 0 eth0
88.XXX.XXX.XXX 0.0.0.0 255.255.255.248 U 0 0 0 eth3
10.42.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.43.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
10.45.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth4
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 81.XXX.XXX.XXX 0.0.0.0 UG 0 0 0 eth0
Queste sono le righe presenti in IPTABLES:
$IPTABLES -t nat -A POSTROUTING -s $NET_TEC -o $IF_EXT -d 0.0.0.0/0 -j SNAT --to $IP_EXT
$IPTABLES -t nat -A POSTROUTING -s $NET_AMM -o $IF_EXT -d 0.0.0.0/0 -j SNAT --to $IP_EXT
$IPTABLES -t nat -A POSTROUTING -s $NET_DMZ -o $IF_CLI -d 0.0.0.0/0 -j SNAT --to $IP_CLI
Ho dovuto mettere questa per fare navigare la DMZ:
$IPTABLES -t nat -A POSTROUTING -s $NET_DMZ -o $IF_EXT -d 0.0.0.0/0 -j SNAT --to $IP_EXT
NB:
IF_EXT=eth0
IF_CLI=eth3
IP_EXT=indirizzo pubblico del mio gateway/firewall su una linea(NIC eth0)
IP_CLI=indirizzo pubblico del mio gateway/firewall su una linea(NIC eth3)
Come si vede dal comando "route" il default gw per gli indirizzi sconosciuti è cmq via l'eth0... :mc:
ilsensine
23-05-2006, 16:42
Ripeto, aggiungi manualmente un secondo default gateway via eth3:
route add default dev eth3 gw <gateway per eth3>
Ripeto, aggiungi manualmente un secondo default gateway via eth3:
route add default dev eth3 gw <gateway per eth3>
Ok! ti farò sapere lunedì prox perché adesso non lo posso provare... :(
1mPHUNit0
23-05-2006, 16:56
Che fortuna che hai sensine....porca, anche io vorrei un lab....
chi le ricordava quelle regole iptable sul nat....azz leggere non basta.
ilsensine
23-05-2006, 16:57
Occhio alla regola
-o $IF_CLI
se il primo default gw è l'altro, questa regola non verrà mai matchata. Per le prove iniziali, elimina semplicemente le regole su -o in postrouting.
ilsensine
24-05-2006, 07:37
Ci ho ripensato, quel metodo non può funzionare per principio. La tabella "postrouting" viene invocata - lo dice il nome - solo _dopo_ che le decisioni di routing sono state prese. Quindi se il pacchetto è stato destinato a eth0, non puoi più cambiare la destinazione nella fase postrouting.
Il problema sembra un pò più complicato di quello che sembrava all'inizio, ma ho trovato forse come dovresti procedere. Spulciando tra la documentazione del kernel ho trovato la voce "IP: policy routing", con questa descrizione:
Normally, a router decides what to do with a received packet based
solely on the packet's final destination address. If you say Y here,
the Linux router will also be able to take the packet's source
address into account. [...]
If you are interested in this, please see the preliminary
documentation at http://www.compendium.com.ar/policy-routing.txt
and ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex
In quei documenti si dice sostanzialmente questo: innanzitutto al posto del normale elenco di regole che puoi inserire tramite "route", possono essere create delle tabelle di routing, tramite il comando "ip route". Come sia la sintassi esatta di questo comando non l'ho ben capito, è il punto su cui dovresti documentarti. Quindi, puoi inserire delle regole per specificare quale tabella usare in base all'ip sorgente. Copio pari pari l'esempio nel primo link:
4.2.2. Routing by source
This is probably the most used feature of policy routing.
ip ru add from 10.20.30.40 table 5
generates the rule
1: from 10.20.30.40 lookup 5
(preference can differ, it assigns the first unused one)
That means: for all packets originated from the IP 10.20.30.40
use routing table 5.
A te ora capire che bestia è "ip route"...
Siccome il forum era down stavo giusto dando un'occhiata al man di "ip" con particolare riferimento alla parametro "table"... :D
Cmq era quello che dicevo anch'io, nella fase di POSTROUTING la decisione è già stata fatta... :(
Ho trovato questo link abbastanza esaustivo: http://lartc.org/howto/lartc.rpdb.multiple-links.html
MAN IP: http://www.die.net/doc/linux/man/man8/ip.8.html
:)
Se ho capito bene vuoi fare la seguente cosa:
Tecnica(10.42.10.X), Amministrativa(10.45.10.X) --> Router ADSL0
DMZ(10.43.10.X) --> Router ADSL1
Dove lavoro ho dovuto configurare + o - la stessa cosa, ovvero differenziare la navigazione in base agli IP sorgenti tramite 3 Router. Ecco come ho fatto (avevo trovato un sito ben fatto che spiegava molto bene iproute, se lo trovo lo linko):
- ti definisci una route in rt_tables (/etc/iproute2/): es '200 alteroute'
- definisci una rule: es 'ip rule add fwmark 1 table alteroute' *
- setti il gw: es 'ip route add default table alteroute dev eth3 via IP-router' *
- modifichi iptable (mangle): es. '-A PREROUTING -s 10.43.10.0/255.255.255.0 -j MARK --set-mark 0x1
- eventuali source nat
in questo modo tutti gli IP della DMZ verrano re-diretti sulla eth3
* questi comandi vengono persi se si riavvia la macchina, io li ho messi in rc.local
Regards!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.