Newsgroup: it.comp.os.linux.sys
Titolo: Problema con le route : doppio gateway (LUNGO)

Salve a tutti,
provo ad illustrarvi un problema di cui proprio non riesco a venire a
capo.
La struttura della mia rete è LAN | DMZ | INTERNET, nella DMZ c'è
il firewall che ha due schede di rete :
eth0   inet addr:aa.bb.cc.156
eth0:1 inet addr:aa.bb.cc.157
eth0:2 inet addr:aa.bb.cc.158
eth0:3 inet addr:aa.bb.cc.159
eth0:4 inet addr:aa.bb.cc.154
eth1   inet addr:192.168.99.1
eth0 ha tutti quegli alias in quanto il firewall a seconda delle richieste
che riceve (www o mail ed altre cosucce) le direziona ai PC in DMZ.
Sempre eth0 è collegata ad un hub a 10Mb insieme al router il cui
indirizzo di gateway è aa.bb.cc.129.
eth1 è la scheda lato lan. 
La situazione standard prevede che le route sul firewall siano impostate
così :
Kernel IP routing table
Destination  Gateway      Genmask         Flags Metric Ref Use Iface 
aa.bb.cc.128 0.0.0.0      255.255.255.224 U     0      0   0   eth0 
192.168.99.0 0.0.0.0      255.255.255.0   U     0      0   0   eth1
127.0.0.0    0.0.0.0      255.0.0.0       U     0      0   0   lo 
0.0.0.0      aa.bb.cc.129 0.0.0.0         UG    0      0   0   eth0
Sempre sul firewall viene fatto il masquerading tramite iptables
con questo comando :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Fin qui tutto ok, webserver e mailserver servono le richieste e la
LAN naviga attraverso l'ip pubblico aa.bb.cc.156.
Succede che mi installano un nuovo router, metto il lato LAN di
questo sullo stesso hub dell'altro ed configuro un nuovo alias per la
scheda di rete eth0 del firewall :
eth0:5 inet addr:xx.zz.yy.226
Imposto nel file /etc/sysconfig/network il parametro GATEWAY a quello di
questa nuova classe di indirizzi xx.yy.zz.225 e le nuove route diventano :
Kernel IP routing table
Destination  Gateway      Genmask         Flags Metric Ref Use Iface
xx.yy.zz.224 0.0.0.0      255.255.255.240 U     0      0   0   eth0
aa.bb.cc.128 0.0.0.0      255.255.255.224 U     0      0   0   eth0
192.168.99.0 0.0.0.0      255.255.255.0   U     0      0   0   eth1
127.0.0.0    0.0.0.0      255.0.0.0       U     0      0   0
lo0.0.0.0    xx.yy.zz.225 0.0.0.0         UG    0      0   0   eth0
Da qui in poi la rete interna naviga a supervelocità (la nuova linea
è infatti mooolto più veloce), ma chiaramente dall'esterno non si riesce
a vedere ne il sito, nè il server di posta. Dico chiaramente perchè ho
intuito che essendoci il gateway impostato sull'indirizzo xx.yy.zz.225
tutte le richieste che arrivano al sito (e cioè agli ip aa.bb.cc.*)
vengono evase passando dal gateway di default che non è quello quello di
prima...
A questo punto il problema è : come posso fare in modo che sito e
mailserver rispondano sempre allo stesso gateway ed invece la rete locale
risponda a quello nuovo, in modo da separare anche i carichi di dati ?
Ho provato asmanettare con i comandi per il policy routing ip route add
etc. ma non sono riuscito a cavare un ragno da un buco.
Una birra per chi mi risolve il problema, non scherzo mica, ve la spedisco :-)
Ciao !
-- 
RaSca
"Il regno dei cieli è simile ad un mercante che va in cerca di perle
preziose. Trovatane una di grande valore va, vende tuttii suoi averi e la
compra" - Gesù Cristo
http://web.tiscali.it/rascasoft

 etc. ma non sono riuscito a cavare un ragno da un buco.
Non so se si possa fare una cosa del genere, però secondo me NON dovresti
smanettare con il comando route, che instrada pacchetti solamente
controllando gli indirizzi IP, ma col comando iptables, in grado di "aprire"
il pacchetto TCP e leggerlo. Una volta letto lo si può "interpretare e
instradare" e, imho, l'unico in grado di farlo è iptables... Il problema
però è che una volta che iptables instrada un pacchetto ad una applicazione
(è volgare, lo so...), si dimentica di lui e passa ad altro. L'applicazione,
per esempio apache, interpreta la richiesta e risponde, ma usando il gateway
predefinito. Se fai in modo che iptables analizzi anche la risposta di
apache, come fai a dirgli che è stato apache ad inviarla e non è la
richiesta di un client? Forse il problema lo puoi risolvere usando un proxy
e facendolo andare su una porta diversa dalla 80, così puoi instradare tutto
il traffico passante dalla 80 su un gateway diverso (sempre ammettendo che
iptables riesca a gestire questa cosa). Per la posta il problema non
sussiste se permetti agli utenti di usare, come unico smtp, il tuo server. A
quel punto puoi tranquillamente instradare il traffico passante dalla 25 sul
gw che vuoi..
Oppure forse si può usare un proxyarp e indirizzare tutto il traffico
proveniente da una determinata serie di macaddress su un gw e il resto su un
altro, ma sto teorizzando tutto, in quanto questi argomenti non mi
appartengono ancora tantissimo... Ci sono persone all'interno del ng che
conoscono infinitamente bene la materia...
Ciao,
Max

 Regalala al primo clochard che incontri per strada, nel caso. :)
Volentieri, però prima spiegami chi è un clochard.


 Ciao.
Ok, ora è chiaro. Va bene, se risolvo lo faccio.
Cmq grazie, fino ad ora sei stato parecchio illuminante.
Ti faccio sapere comunque come proseguono i lavori.


 Ti faccio sapere comunque come proseguono i lavori.
Bene la soluzione al problema è quella che diceva Whip, corretta come di
seguito :
echo "222 alternateroute" >/etc/iproute2/t_tables
ip rule add fwmark 1 table alternateroute
ip route add default table alternateroute dev eth0 via aa.bb.cc.129
ip route flush cache
iptables -t mangle -I PREROUTING -i eth1 -s 192.168.99.2 -J MARK
--set-mark 1
iptables -t mangle -I PREROUTING -i eth1 -s 192.168.99.3 -J MARK
--set-mark 1
dove 192.168.99.2 e 3 sono gli indirizzi lato dmz di web e mail server.
Così tutto esce da dove dovrebbe uscire...


 Cosě tutto esce da dove dovrebbe uscire...
Favoloso! Grande whip =)
Max

 echo "222 alternateroute" >/etc/iproute2/t_tables
s/t_t/rt_t/
Giusto per lasciare un'informazione usabile ai posteri. :)
-- 
Per non dimenticare:
http://snipurl.com/SdC_ed_il_vino
Le sigarette a volte danno buoni consigli:
http://snipurl.com/sigarette