Титла: Споделяне на интернет от 2 доставчика
Публикувано от: yuksbg в Nov 21, 2008, 15:07
Привет, малко се порових по чичко гугъл и разбрах че това което искам малко трудно ще стане под уиндовс. Та в форумите на убунту намерих следния скрипт #! /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 IP=/sbin/ip IPTABLES=/usr/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(){
#net
#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|eth2|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 Но това горното ми се вижда малко сложно та малко помощ ? пс: Идеята по принцип е следната: Имаме два доставчика бтк и някакъв частен по принцип ползваме частния и бтк само при спиране на частника та идеята е малко да се автоматизира този процес. На машинката имам инсталирано Убинту сървър с последните Update. Lan картите са 3 на брой > 1 вградена и 2 доп. добавени
Титла: Re: Споделяне на интернет от 2 доставчика
Публикувано от: laskov в Nov 21, 2008, 16:16
Изпълним файл /път/до/check_route #!/bin/sh
GW_4ASTNIK=11.12.13.14 GW_BTK=12.13.14.15
# Prevklyu4va default gateway avtomati4no if ping -c 3 $GW_4ASTNIK 1> /dev/null 2> /dev/null; then # echo "4ASTNIKA raboti ..." if ! /sbin/route -n | grep $GW_4ASTNIK 1> /dev/null 2> /dev/null; then # echo "... but is not default gw. Setting it default." route del default gw $GW_BTK route add default gw $GW_4ASTNIK cp /etc/resolv.conf.4ASTNIK /etc/resolv.conf echo "Default gw changed to 4ASTNIK" fi else # echo "4ASTNIKa NE raboti ..." if /sbin/route -n | grep $GW_4ASTNIK 1> /dev/null 2> /dev/null; then # echo "... but is default gw. Setting default to GW_BTK." route del default gw $GW_4ASTNIK route add default gw $GW_BTK cp /etc/resolv.conf.BTK /etc/resolv.conf echo "Default gw changed to GW_BTK" fi fi
В таблицата на crond добавяш 1-59/2 * * * * /път/до/check_route Скрипта се изпълнява на всеки 2 мин. Замести двата IP адреса с адресите, които трябва да са default gateway на доставчиците. Направи си два файла resolv.conf.BTK и resolv.conf.4ASTNIK като ползваш за образец файла resolv.conf и в тях постави DNS-ите на съответния доставчик. Скрипта трябва да се изпълнява с root права. Потребителят root ще получава писмо при всяка смяна на доставчика. Един от недостатъците е, че се пингва гейта и би могло да имаш пинг, но да нямаш нет ако доставчика ти има проблем.
Титла: Re: Споделяне на интернет от 2 доставчика
Публикувано от: yuksbg в Dec 14, 2008, 18:17
Благодаря ти за отговора ще го тествам другата седмица. Но днес като се рових окрих http://ebox-platform.com/usersguide/en/html-chunk/ch03s05.html
ще пробвам и 2та варианта и ще видим какво ще излезе ;)
|