Automatyczny wybór dost

Masz problemy z siecią bądź internetem? Zapytaj tu
viper_lasser
Posty: 12
Rejestracja: 04 marca 2008, 13:10

Automatyczny wybór dostępnego połączenia (DSL, GPRS)

Post autor: viper_lasser »

Witam.
W jaki sposób mogę skonfigurować Debiana żeby przy utracie normalnego połączenia kablowego (DSL) system przełączył się na połączenie z telefonu komórkowego (przez rs232), a w przypadku powrotu normalnego połączenia z powrotem przeszedł na to pierwsze a to połączenie telefoniczne by zakończył.

Pod tym adresem:
http://7thguard.net/news.php?id=2672
znalazłem tylko opis wykrywający modem i automatycznie się łączący.

Z góry dziękuję za wskazówki.
szpuni
Beginner
Posty: 112
Rejestracja: 15 stycznia 2007, 15:25
Lokalizacja: dublin

Post autor: szpuni »

Ja bym tutaj napisal sobie jakis skrypt, ktory testuje polaczenie na aktualnie dzialajacym laczu i po utracie np. ping do swiata zewnetrznego zmienial regułki firewala i NAT-u tak zeby wychodzily przez druga brame.

Kilka linijek w bashu i powinno dzialac.
Ale mysle ze Perl jest lepszym rozwiazaniem do tego celu.
viper_lasser
Posty: 12
Rejestracja: 04 marca 2008, 13:10

Post autor: viper_lasser »

@Szpuni: Mógłbyś udostępnić jakiś prototyp tego skryptu. Basha nie znam a perla tylko trochę.

http://articles.techrepublic.com.com/51 ... 2650.html#
Tutaj znalazłem tylko powiadomienia o padnięciu sieci (skrypt w perlu):

Kod: Zaznacz cały

<code>
The network status script

#!/usr/bin/perl

 # this script must be run from cron

# defines

$ping1   = "192.168.10.5";

 $ping2   = "10.0.0.28";

 $admin   = "admin";

 $netdev  = "eth0";

 $msgbody = "I think the network is down!";

 $msgsub  = "Network Down!";

sub pingtest($$) {
  my ($ping) = @_;
  system(sprintf("ping -q -I %s -c 1 %s>/dev/null", $netdev, $ping));
  $retcode = $? >> 8;
  # ping returns 1 if unable to connect
  return $retcode;

 }

$test1 = &pingtest($ping1);

if ($test1 eq "1") {
  $test2 = &pingtest($ping2);
  if ($test2 eq "1") {
    print("Shutting down $netdev...\n");
    system(sprintf("ifdown %s", $netdev));
    print("Bringing up $netdev...\n");
    system(sprintf("ifup %s", $netdev));
    $rtest1 = &pingtest($ping1);
    if ($rtest1 eq "1") {
      $rtest2 = &pingtest($ping2);
      if ($rtest2 eq "1") {
        system(sprintf("echo \"%s\"|/bin/mail -s \"%s\" %s", $msgbody,

 $msgsub, $admin));

        exit(1);

      }
    }
  }

 }

exit(0);
</code>
szpuni
Beginner
Posty: 112
Rejestracja: 15 stycznia 2007, 15:25
Lokalizacja: dublin

Post autor: szpuni »

Ta czesc mozesz wykozystac mysle, tylko najpierw sprawdz czy to dziala bo wydaje mi sie ze trzeba bedzie to troche zmienic.

Kod: Zaznacz cały

sub pingtest($$) {
  my ($ping) = @_;
  system(sprintf("ping -q -I %s -c 1 %s>/dev/null", $netdev, $ping));
  $retcode = $? >> 8;
  # ping returns 1 if unable to connect
  return $retcode;

 } 
Nie znam niestety funkcji sprintf zeby stwierdzic to na 100%
Otworz nowy temat w czesci programowanie moze ktos ci tam wiecej pomoze, bo guru z perla to ja tez nie jestem ;)

Pozniej test do bramy czy odpowiada jak nie to regułki firewala i NATu i route oczywiscie, na nowa brame.
Skrypt dodany to CRON zalozmy co minute albo mniej zalezy od ciebie i zrobione.

U mnie ludziska robia to recznie.
Maja skrypt startbackupline ktory ma tylko reguły do firewalla, natu i domyslnej sciezki i po prostu wpisuja to recznie jak im internet padnie w firmie
ODPOWIEDZ