Re: [Lug-bg] рутиране 2 ИСП 2 локални
- Subject: Re: [Lug-bg] рутиране 2 ИСП 2 локални
- From: "Vladimir Vitkov" <vvitkov@xxxxxxxxx>
- Date: Tue, 15 Jan 2008 23:35:34 +0200
Здрасти, добър вечер, приятна бира и т.н.
Първо за да балансираш в кернела ти трябват няколко опции най-вече
MULTIPATH_* и поне една от MULTIPATH_ дисциплините. Лично аз съм фен
на WRR (Weighted Round Robin)
Второ в скрипта ти липсва блокиране на рутирането през доставчик т.е.
на края във всяка таблица трябва да имаш prohibit за да може все пак в
някакъв момент да се стигне и до другия доставчик.
трето http://www.getoto.net/2007/06/the-perfect-soho-router-part-4/pref/bg/
към средата на страницата има даден пример за работещо балансиране на
два доставчика със един вътрешен сегмент. Предполагам че ще ти свърши
работа. Ползвам го от доста време и работи безпроблемно (е почти,
понеже ползвам нетис и онлайн при изпадане на нетис малко бавно се
завърта трафика към онлайн но и за това си има мръсни нимера)
On 15/01/2008, valentin Petkov <skyval@xxxxxxxxx> wrote:
> Здр,
>
> Къде ли не питах и не четох ... сам тук ми остана надецдата някой да ми
> помогне.
> Ползвам скрипта по-доло за рутиране на интернета от 2 доставчика и две
> локални мрежи и се опитвам да направя load balancing обаче нещо така и не се
> получава. Нито ползва двете мрежи, нито ако дръпна едната другата да подържа
> ... с две думи нищо не прави, а видима причина за това няма? Ще съм особенно
> благодарен ако някой ми подъде едно рамо да го оправим този скрипт, че вече
> от няколко седмици си блъскам главата над него :(
> Ип адресите няма да ги пиша, то си ги има в скрипта.
>
> Та скрипта е:
>
>
> #! /bin/sh
> # Load balancing script by mambang
> # using 4 nics, 2 isp, 2 lan segment
> #
> PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
> IFCONFIG=/sbin/ifconfig
> NETWORK=/etc/init.d/networking
> IP=/sbin/ip
> IPTABLES=/sbin/iptables
>
> #Device 1 connected to ISP1
> DEV1=eth3
> NET1=84.54.160.198
> SUB1=84.54.160.0/30
> GW1=84.54.160.197
>
> #Device 2 connected to ISP2
> DEV2=eth0
> NET2=192.168.1.2
> SUB2=192.168.1.0/24
> GW2=192.168.1.1
>
> #LAN device connected to LAN group1
> DEV3=eth1
> LAN1=192.168.0.1
> SUB3=192.168.0.0/24
>
> #LAN device connected to LAN group2
> DEV4=eth2
> LAN2=192.168.142.1
> SUB4=192.168.142.0/24
>
>
> #---------------------DO THIS MANUALLY------------
> #echo "1 T1" >> /etc/$IProute2/rt_tables
> #echo "2 T2" >> /etc/$IProute2/rt_tables
> #-------------------------------------------------
>
> START_ROUTING(){
> #segement1
> $IP route add $SUB1 dev $DEV1 src $NET1 table T1
> $IP route add $SUB3 dev $DEV3 src $LAN1 table T1
> $IP route add default via $GW1 table T1
>
> #segment2
> $IP route add $SUB2 dev $DEV2 src $NET2 table T2
> $IP route add $SUB4 dev $DEV4 src LAN2 table T1
> $IP route add default via $GW2 table T2
>
> #rules for all segment
> $IP rule add from $NET1 table T1
> $IP rule add from $LAN1 table T1
> $IP rule add from $NET2 table T2
> $IP rule add from $LAN2 table T1
>
> #using iptable to mark packets
> $IPTABLES -t mangle -A OUTPUT --source $SUB3 -j MARK --set-mark 0x10
> $IPTABLES -t mangle -A OUTPUT --source $SUB4 -j MARK --set-mark 0x20
> $IPTABLES -t nat -A POSTROUTING -o $DEV1 -j SNAT --to-source=$NET1
> $IPTABLES -t nat -A POSTROUTING -o $DEV2 -j SNAT --to-source=$NET2
>
> #default gateway for other
> $IP route add default via $GW1
>
> #avoids incoming packets from rejected
> echo 0 > /proc/sys/net/ipv4/conf/$DEV1/rp_filter
> echo 0 > /proc/sys/net/ipv4/conf/$DEV2/rp_filter
>
> # adding rule for fwmark
> $IP rule add fwmark 0x10 pri 100 table T1
> $IP rule add fwmark 0x20 pri 101 table T2
>
> # make sure packets comes and returns using same route
> ip rule add from $NET1 pri 200 table T1
> ip rule add from $NET2 pri 300 table T2
>
> }
>
> BALANCING(){
> #load balancing
> #$IP route add default scope global nexthop via $GW1 dev $DEV1 weight 1 \
> #nexthop via $GW2 dev $DEV2 weight 1
> $IP route replace default equalize \
> nexthop via $GW1 dev $DEV1 \
> nexthop via $GW2 dev $DEV2
> }
>
>
> #-------------flushes all route and rule-------------------
> REMOVE_TABLE(){
> ALLDEV="eth0|eth1|et h2|eth3|lo"
> ALLTABLES="T1|T2"
> keepers="dev ($ALLDEV)"
> tables="lookup ($ALLTABLES)"
>
>
> echo
> echo ***Before
> echo "Rules..."
> $IP ru sh
> echo""
> echo "Routes..."
> $IP ro sh
> echo "Rules for table T1..."
> $IP ro sh table T1
> echo""
> echo "Rules for table T2..."
> $IP ro sh table T2
> echo""
>
> $IP route delete default &>/dev/null
> $IP route show | awk -v k="$keepers" '$0 !~ k \
> { print " $IP route delete " $0 | "bash" }'
>
> for wan in ${ALLTABLES//|/ }; do
> $IP route flush table $wan &>/dev/null
> done
>
> $IP rule show | awk -v k="$tables" '$0 ~ k \
> { sub(/from all/,""); print "ip rule del " substr($0, 5) | "bash" }'
> echo ""
> $IP rule show | awk -v k="$tables" '$0 ~ k \
> { sub(/from all/,""); print "ip rule del " substr($0, 7) | "bash" }'
> echo ""
> echo "ALL Tables and Rules Deleted"
>
> echo "Adding default gateway ....."
> $IP route add default via $GW1
>
> $IP route flush cache
> echo
> echo "***After"
> echo "Rules..."
> $IP ru sh
> echo "Routes..."
> $IP ro sh
> echo "Rules for table T1..."
> $IP ro sh table T1
> echo "Rules for table T2..."
> $IP ro sh table T2
> }
>
>
> case "$1" in
> start)
> echo "Creating new routing tables ....."
> START_ROUTING
> echo "Start load balancing rules ....."
> BALANCING
> echo "DONE....New routing has been added."
> #Flush routing cache
> $IP route flush cache
> ;;
> stop)
> REMOVE_TABLE
> echo "DONE....Default routing has been restore."
> echo ""
> echo "Flushing iptables mangle rules ....:
> iptables -F -t mangle
> echo "DONE"
> ;;
> *)
> N=/etc/init.d/splitgateway
> echo "Cara Guna: $N {start|stop}" >&2
> exit 1
> ;;
> esac
>
> exit 0
>
> # end of script
>
>
> Принципно в локалната мрежа имам интернет, но и така не ми балансира м/у
> двата доставчика а си кара само на единия.
> И също един последен въпрос...
> Тъй като знам ип адресите по класове на доставчика как да ги изкарвам през
> съответния гейтуей ....???
>
> Наистина ще се надявам някой да помогне!
>
>
>
> _______________________________________________
> Lug-bg mailing list
> Lug-bg@xxxxxxxxxxxxxxxxxx
> http://linux-bulgaria.org/mailman/listinfo/lug-bg
>
>
--
С уважение,
Владимир Витков
http://www.netsecad.com
http://www.supportbg.com
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|