Титла: Backup isp Публикувано от: nahap в Mar 31, 2008, 08:17 Здравейте,
С FreeBSD 4.11 съм. Някой може ли да ми посочи линк за скрипт за load balance м/у 2 доставчика. искам ако паде едната връзка, автоматично да почне да рутира през другата. Мерси предварително. Титла: Backup isp Публикувано от: neter в Mar 31, 2008, 08:27 Разгледай тази наскорошна тема и връзките, към които води. Тук има и други теми по въпроса. Научи се да използваш търсачката, а когато стигнеш до по-точен проблем - питай
![]() edit: А всъщност, защо ти е load balancing? Щом вторият доставчик ще се ползва само за бекъп, то закачи 2-та доставчика на 2 лан карти, задай маскиранията и рутиранията да минават през интерфейса на основния доставчик и пусни един скрипт, който с най-елементарен ping да проверява наличието на връзка през този интерфейс. Когато скриптът установи липса на връзка, го направи да смени името на интерфейса във файла с правилата или просто си направи още един файл с правила за другия интерфейс. Скриптът ще изчисти старите правила и ще зареди новите, като може да продължи да проверява за свързаност през интерфейса на основния доставчик и когато връзката се възстанови, скриптът ще пренапише правилата отново. Ако целта ти не е едновременно ползване и на двата доставчика, а просто единия да седи като бекъп, това е по-добрата схема. Титла: Backup isp Публикувано от: nahap в Mar 31, 2008, 15:24 Благодаря за съвета. Да в действителност не ми трябва load balance..само failover. Така че остава варианта със скрипта който сменя рутинга
![]() Титла: Backup isp Публикувано от: neter в Mar 31, 2008, 15:45 Пробвай да го направиш, а ако срещнеш някакви спънки при реализирането му - ще помагаме
![]() Титла: Backup isp Публикувано от: nahap в Apr 01, 2008, 09:57 намерих този скрипт..така като гледам ми се струва че ще сработи, но по-опростен вариант не можах да измисля. Ще ти пиша като почна процедурата да видим какво ще стане
![]() #!/usr/bin/perl use Net::Frame::Device; use Net::Ping; $uplink1_interface="fxp0"; $uplink2_interface="sis1"; $lan_interface="bge0"; $primary_gateway="0.0.0.0"; $secondary_gateway="0.0.0.0"; # print current date and time ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time); $year=$year+1900; print "GMT Time: $year-$mon-$mday $hour:$min:$sec\n"; my $device_uplink1 = Net::Frame::Device->new(dev => $uplink1_interface); my $device_uplink2 = Net::Frame::Device->new(dev => $uplink2_interface); my $device_lan = Net::Frame::Device->new(dev => $lan_interface); print "Current default gateway:", $device_lan->gatewayIp, "\n"; print "Primary default gateway:", $primary_gateway, "\n"; print "Secondary gateway:", $secondary_gateway, "\n"; print "Checking primary internet uplink ...\n"; if (check_uplink($primary_gateway)) { if ($device_lan->gatewayIp ne $primary_gateway) { # set default route to $primary_gateway `route delete default`; `route add default $primary_gateway`; # Change uplink interface to uplink1_interface change_nat_interface($uplink1_interface); # restart IPFW and NATD daemon `/etc/rc.d/ipfw restart`; print "Default gateway has been changed to $primary_gateway via interface $uplink1_interface\n"; } else { print "Current default gateway is set to primary gateway and is ok\n"; } } elsif (check_uplink($secondary_gateway)) { if ($device_lan->gatewayIp ne $secondary_gateway) { # set default route to $secondary_gateway `route delete default`; `route add default $secondary_gateway`; # Change uplink interface to uplink2_interface change_nat_interface($uplink2_interface); # restart IPFW and NATD daemon `/etc/rc.d/ipfw restart`; print "Default gateway has been changed to $secondary_gateway via interface $uplink2_interface\n"; } else { print "Current default gateway is set to secondary gateway and is ok\n"; } } else { print "Any uplink is up and working\n"; } print "----\n"; ###################################################### # Ping IP address and decide if it's reachable or not # 1.parameter: IP ###################################################### sub check_uplink { my ($ip) = @_; my $p = Net::Ping->new("icmp"); my $ok = $p->ping($ip); $p->close(); return $ok; # 0 - false; 1 - true } ###################################################### # Change NATD interface file # 1.parameter: network interface ###################################################### sub change_nat_interface { my ($nat_if) = @_; $filename="/tmp/natd_iface"; if (open(F, "> $filename")) { print "change_nat_iface: writing $nat_if to $filename\n"; print F $nat_if; close F; } else { print "change_nat_iface: Cannot write to $filename\n"; return 0; } return 1; # 0 - false; 1 - true } |