Se da un router/firewall cu 2 conexiuni la net, via Provider1 respectiv 
Provider2. Fiecare conexiune pe cite o interfata. Se mai da un server de 
mail cu ip public, primit de la Provider1, conectat la o a treia 
interfata a router-ului.

Se doreste ca serverul de mail sa devina accesibil si cu ip-ul (unic) 
primit de la Provider2 si asignat interfetei externe a ruterului.

Ce am facut:

EXTERNAL_INTERFACE1 = eth0 (interfata spre provider1)
INTERNAL_INTERFACE = eth1 (interfata spre reteaua interna)
EXTERNAL_INTERFACE2 = eth2 (interfata spre provider2)
EXTERNAL_IP1=ip1 (primit de la provider1)
EXTERNAL_IP2=ip2 (primit de la provider2)
INTERNAL_IP=ip3 (primit de la provider1)
IP_MAIL=ip4 (primit tot de la provider1)

adaugat in firewall:
$IPT -t nat -A PREROUTING -p tcp -i $EXTERNAL_INTERFACE2 -d
$EXTERNAL_IP2 --dport 25 -j DNAT --to $INTERNAL_IP:25


/sbin/ip rule add from EXTERNAL_IP1 table provider1
/sbin/ip rule add from EXTERNAL_IP2 table provider2
/sbin/ip route add default via GW1 dev eth0 table provider1
/sbin/ip route add default via GW2 dev eth2 table provider2

nu exista nici o regula de SNAT sau ip nat.

problema: pachetele de raspuns la conexiuni initiate catre EXTERNAL_IP2 
pleaca folosind ca sursa EXTERNAL_IP2 (desi pina la trecerea prin 
router, pachetele de la serverul de mail au adresa sursa a acestuia 
(IP_MAIL), care, repet, e publica si primita de la provider1) dar prin 
interfata de iesire unde se afla ruta default (uzual eth0), ignorind 
regulile ip rule/route.

1. (partea de metafizica).ce anume rescrie IP-ul sursa al pachetelor 
(transformind din IP_MAIL in  EXTERNAL_IP2 )? iptables -j DNAT e asa 
destept incit daca pachetele sint raspunsuri la o conexiune DNAT-ata, sa 
rescrie sursa ?? asta deja miroase a SNAT ! si repet, nu exista nici un 
SNAT in scriptul de firewall
2. ce am gresit? de ce raspunsurile pleaca pe interfata default si nu 
prin interfata specificata de ip route? daca decizia de rutare e luata 
pe baza adresei serverului de mail (ceea ce ar justifica modul de 
comportare observat), de ce pachetele ies prin eth0 cu IP-ul interfetei 
eth2 (ceea ce se intimpla numai la conexiunei initiate via EXTERNAL_IP2 ) ?



PS: am incercat si sa folosesc -j mark ($IPT -t mangle -A PREROUTING -p 
tcp -i $EXTERNAL_INTERFACE2 -d $EXTERNAL_IP2 --dport 25 -j MARK 
--set-mark 5 ) si o regula de genul ip rule add fwmark 5 table provider2.
intrucit pachetele [de raspuns] dinspre serverul de mail nu sint 
mark-ate, nu a mers.

-- 
Don't worry, my dog's really friendly for a Doberman.



Raspunde prin e-mail lui