[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 2 lacza i policy routing



pomoge Ci (mam nadzieje ;) ), bo w koncu tez rozwiazalam ten problem. ;) 
Przypuszczalnie w Twojej sytuacji zapomniales o rp_filter lub forwardzie 
gdzies, ale napisze wiecej - bo mi zadzialalo ladnie i dziala do dzis ;)

Moja sytuacja byla podobna, chociaz ja postanowilam sobie pozostawic dwa lacza 
WAN na jednej sieciowce z kilku wzgledow, a jednym z nich jest brak potrzeby 
wylaczenia rp_filter i do tego jeszcze kilka innych ciekawych efektow. ;) 
Czyli wedlug Twojego schematu (majac  dwie sieciowki "zewnetrzne") sprawdz 
czy masz 0 w:
/proc/sys/net/ipv4/conf/*/rp_filter
[o problemach z tym napisane jest np. w dokumentacji kernela lub tu  
http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html#AEN634 ]

Na poczatku do testow byc moze bedziesz chcial tez przepuscic pelen FORWARD na 
sieciowkach.

Ja wychodze z punktu, gdzie mam postawione interfejsy oraz domyslny routing.
Stworzylam sobie generalnie dwie reguly routingu - jedna zeby w ogole moc sie 
dogadac przed drugie lacze, zrobic taki routing dla ogolnego ruchu:

# routing dla drugiego lacza
/bin/ip rule add from A.B.C.0/X table zewn2  
/bin/ip route add default via A.B.C.1 dev eth0 table zewn2 

a druga do markowanych pakietow:

/bin/ip rule add fwmark 2 table www_out
/bin/ip route add default via A.B.C.1 dev eth0 table www_out
# odswiez tablice
/bin/ip route flush cache

W preroutingu mam markowanie tylko tych ludzi, ktorzy wchodza z LANu na 
sieciowke eth1:
${iptables} -A PREROUTING -i eth1 -t mangle -p tcp --dport 80 -j MARK 
--set-mark 2

I w postroutingu robie jeszcze nat-a, poniewaz operuje na eth1 na 
nieroutowanych klasach adresow:

for netaddr in `cat ${local_nat}`; do
    # markowane adresy najpierw natuj na lacze zew2
    ${iptables} -t nat -A POSTROUTING -s ${netaddr} -m mark --mark 0x2 -j SNAT 
--to ${zewn2}
    #pozostale na drugie lacze
    ${iptables} -t nat -A POSTROUTING -s ${netaddr} -o eth0 -j SNAT 
--to-source ${zewn1}
done

${local_nat} to adresy moich lokalnych sieci.
I to chyba wszystko. :-) 

pozdr,
M



Reply to: