In ordine: echo "1 retea1" >>/etc/iproute2/rt_tables echo "2 retea2" >>/etc/iproute2/rt_tables echo "3 retea3" >>/etc/iproute2/rt_tables
ip rule add from ip_retea_1 table retea1 ip rule add from ip_retea_2 table retea2 ip rule add from ip_retea_3 table retea4 unde ip_retea_x sunt adresele ip pe care ti le-au dat providerii. ip route add default via gw_retea_1 table retea1 ip route add default via gw_retea_2 table retea2 ip route add default via gw_retea_3 table retea3 si cam atat. PS: e un parametru in kernel la sectiunea networking, ceva cu mark based routing. trebuie bifata optiunea si recompilat kernelul. PPS: si nici suport pentru mai mult de 1 tabela de routare nu strica (urmand exemplul de mai sus ai 4). (asta pentru a doua problema, cea "nu merge situl daca nu e ruta default prin provierul X) pentru prima, copy/paste/modifici dupa gust: l#!/usr/bin/perl # Run from cron (set with "crontab -e") # example: "0-59/2 * * * * /path/to/switchisp" runs this every 2 minutes # Best IPs to test for general use may be last IPs at ISPs before routing out to Net # Best IP to test if a single remote site is most important is that site's # If perl not at /usr/bin/perl change first line to point to it # Before running install Net::Ping from http://freeware.roobik.com/netping/ # (untar, cd to directory, "perl Makefile.PL; make; make install") # or perl -MCPAN -eshell and install Net::Ping # This script is NOT Copyrighted :) use Net::Ping; # User settings # _____________ $ip = "/sbin/ip"; # Location of "ip" on system $ipt = "/sbin/iptables"; # Location of "iptables" on system $gw1 = "ip1_gw"; # Gateway 1 IP $dev1 = "eth1"; # Device (e.g., eth2) $tip1 = "ip_test_ping_1"; # Upstream IP to test $src1 = "source"; # Source address for outgoing packets $wei1 = "1"; # Weight $gw2 = "ip_gw_2"; # Gateway 2 IP $dev2 = "eth2"; # Device (e.g., eth1) $tip2 = "4.79.181.15"; # Upstream IP to test $src2 = "127.0.0.5"; # Source address for outgoing packets $wei2 = "2"; # Weight $pings = "4"; # Number of pings to send $good = "2"; # Number of pings that must be good $tab = "default"; # Table to set routes in $logfile = "/var/log/checkroutes.log"; # File to log messages to # create timestamp for log # ________________________ sub TimeStamp { # subroutine to create a "nice" looking timestamp # that doesn't rely on the system's 'date' command my @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); my @months = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', 'Oct','Nov','Dec'); my ($sec,$min,$hour,$dom,$mon,$year,$wday,$yday,$isd) = localtime(time); my $timestamp = sprintf("%3s %3s %02d %4d %02d:%02d:%02d", $days[$wday], $months[$mon], $dom, $year+1900, $hour, $min, $sec); return $timestamp; } # be sure routes are set via appropriate gateways to test IPs # ___________________________________________________________ $checkro = `$ip ro ls`; if (!($checkro =~ /$tip1/)) { system ("$ip ro add to $tip1 via $gw1 src $src1"); } if (!($checkro =~ /$tip2/)) { system ("$ip ro add to $tip2 via $gw2 src $src2"); } # test if $gw1 and/or $gw2 currently in table $tab # ________________________________________________ $checkgw = qx/$ip ro ls /; if ($checkgw =~ /$gw1/) { $check1 = 1; } else { $check1 = 0; } if ($checkgw =~ /$gw2/) { $check2 = 1; } else { $check2 = 0; } # ping the test IPs $tip1 and $tip2 # subroutine to create a "nice" looking timestamp # that doesn't rely on the system's 'date' command my @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); my @months = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', 'Oct','Nov','Dec'); my ($sec,$min,$hour,$dom,$mon,$year,$wday,$yday,$isd) = localtime(time); my $timestamp = sprintf("%3s %3s %02d %4d %02d:%02d:%02d", $days[$wday], $months[$mon], $dom, $year+1900, $hour, $min, $sec); return $timestamp; } # be sure routes are set via appropriate gateways to test IPs # ___________________________________________________________ $checkro = `$ip ro ls`; if (!($checkro =~ /$tip1/)) { system ("$ip ro add to $tip1 via $gw1 src $src1"); } if (!($checkro =~ /$tip2/)) { system ("$ip ro add to $tip2 via $gw2 src $src2"); } # test if $gw1 and/or $gw2 currently in table $tab # ________________________________________________ $checkgw = qx/$ip ro ls /; if ($checkgw =~ /$gw1/) { $check1 = 1; } else { $check1 = 0; } if ($checkgw =~ /$gw2/) { $check2 = 1; } else { $check2 = 0; } # ping the test IPs $tip1 and $tip2 # subroutine to create a "nice" looking timestamp # that doesn't rely on the system's 'date' command my @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); my @months = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', 'Oct','Nov','Dec'); my ($sec,$min,$hour,$dom,$mon,$year,$wday,$yday,$isd) = localtime(time); my $timestamp = sprintf("%3s %3s %02d %4d %02d:%02d:%02d", $days[$wday], $months[$mon], $dom, $year+1900, $hour, $min, $sec); return $timestamp; } # be sure routes are set via appropriate gateways to test IPs # ___________________________________________________________ $checkro = `$ip ro ls`; if (!($checkro =~ /$tip1/)) { system ("$ip ro add to $tip1 via $gw1 src $src1"); } if (!($checkro =~ /$tip2/)) { system ("$ip ro add to $tip2 via $gw2 src $src2"); } # test if $gw1 and/or $gw2 currently in table $tab # ________________________________________________ $checkgw = qx/$ip ro ls /; if ($checkgw =~ /$gw1/) { $check1 = 1; } else { $check1 = 0; } if ($checkgw =~ /$gw2/) { $check2 = 1; } else { $check2 = 0; } # ping the test IPs $tip1 and $tip2 # _________________________________ $i=0; $p = Net::Ping->new("icmp"); while ($i < $pings) { if ($p->ping($tip1)) { $ping1++; } $i++; } $p->close(); if ($ping1 >= $good) { $live1 = 1; } else { $live1 = 0; } $i=0; $p = Net::Ping->new("icmp"); while ($i < $pings) { if ($p->ping($tip2)) { $ping2++; } $i++; } $p->close(); if ($ping2 >= $good) { $live2 = 1; } else { $live2 = 0; } # If the current default in table $tab does not match the ping results then # if only one route's test IP is pingable change the default to that route # or if both test IPs are pingable change the default to use both # or if neither test IPs are pingable change the default to use both # (might as well continue to try them, if we're not going anywhere anyway) # _________________________________________________________________________ # add new default route # ________________________ if (($live1 == 1)&&($live2 == 0)) { system ("/calea/catre/un/script/aleator"); } elsif (($live1 == 0)&&($live2 == 1)) { system ("/calea/catre/alt/script"); } else { system ("/calea/catre/al/treilea/script"); # system ("echo OK"); } # log # ___ if (($live1 == 1)&&($live2 == 1)) { $log = "A is UP, B is UP"; } elsif (($live1 == 0)&&($live2 == 0)) { $log = "A is DOWN, B is DOWN (!!BIG FAT WARNING!!)"; } elsif (($live1 == 1)&&($live2 == 0)) { $log = "A is UP, B is DOWN"; } elsif (($live1 == 0)&&($live2 == 1)) { $log = "A is DOWN, B is up"; } open(LOG, ">>$logfile"); print LOG &TimeStamp . " - $log\n"; close(LOG); Se modifica/adauga chestii in script dupa gust si se ruleaza din cron. easy as that. On Saturday 09 September 2006 01:24, Laurentiu STEFAN wrote: > Da nu se poate gasi o solutzie la o problema fara sa se ajunga la discutzii > dastea? > > Eu cu un pic ajutor de la cunoscutzi am facut un programas care face o > chestie. Am pus programu aici in cazu in care mai are cineva nevoie de > el... am spus se hibe au, unele s-au rezolvat cu ajutor de la voi sau cu > ajutor de la alti amici. > > Acu a mai ramas hiba cu vizibilitatea din internet a tuturor interfetelor. > > Aici ar fi o solutzie sa declar la RNC toate IP-urile ca NS si programul > care ruta sa imi genereze fisierul pentru NS al domeniului in functie de > GW-ul sistemului la acel moment si in momentul in care trebuie sa schimbe > GW-ul sa schimbe si fisierul respectiv si sa reincarce NS-ul. > Problema e ca nu stiu cat de repede se propaga modificarea in cazu asta si > daca apare o interogare si nu ii raspunde primele 3 NS-uri declarate la RNC > il testeaza si pe al 4-lea? Sau dupa 2-3 erori renuntza si da ca nu exista > domeniu? > > On 9/8/06, Mircea MITU <[EMAIL PROTECTED]> wrote: > > On Fri, 2006-09-08 at 12:22 +0300, George-Cristian Bîrzan wrote: > > > > Mai citeste odata mailurile, nu ai nici o legatura. > > > > > > 1) O DATA, ANALFABETU' PULII! > > > > MarÅ si citeste DicÅ£ionarul Ortografic, Ortoepic Åi Morfologic al Limbii > > Române (DOOM 2). DupÄ ce-l termini Åi renunÅ£i sÄ mai imiÅ£i bizoni de > > 12 > > ani ce au descoperit dc++, poÅ£i veni sÄ-Å£i ceri scuze. > > > > MulÅ£umim, > > redacÅ£ia > > > > > > > > > > _______________________________________________ > > RLUG mailing list > > [email protected] > > http://lists.lug.ro/mailman/listinfo/rlug -- Florin Samareanu IT Consultant _____  1st. Sisesti St., Bucharest 1, Romania Phone: +4021 269.33.03 Fax: +4021 233.12.50 Mobile:+40 744.596.338  Email: [EMAIL PROTECTED] www.vectorsoftware.ro _______________________________________________ RLUG mailing list [email protected] http://lists.lug.ro/mailman/listinfo/rlug
