Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-10-03 20:12:18

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Łącze zapasowe

Witam
Sytuacja wygląda tak:
Klient łączy się do serwera openvpn posiada głowne połaczenie z internetem i 3g skonfigurowane przez wvdial, może się podłączyc po 3g bądź normlanie, potrzebuje skryptu który w razie awarii łącza głownego łączył się z 3g w tle sprawdzając czy łącze główne wrociło.
Widze to mniejwięcej tak:

ping -I eth0 wp.pl -jest odpowiedz jest ok.
ping -I eth0 wp.pl - brak odpowiedzi (powiedzmy x3 (trzy utacone pakiety) przełączam na 3g
wvdial 3g &
i dalej...
ping -I eth0 wp.pl - połaczenia wróciło - killall -9 wvdial , poo- (wyłaczenie modemu)

Jak to ugryźć uczę się dopiero skryptowania.

Offline

 

#2  2014-10-04 12:31:50

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: Łącze zapasowe

Skoro klient, to na tym zarobisz. Sam podałeś wszystkie polecenia a nie chce Ci się tego sklecić w jedną całość?

Koncepcja może być, jeżeli to prośba "napiszcie bo nie chce mi się poszukać" to w dziale ogłoszenia wraz z proponowanym wynagrodzeniem :)

Jak będziesz miał napisane cokolwiek, do sprawdzenia, itp. to wtedy pisz tutaj.


[url=http://mhroczny.net][b]strona domowa[/b][/url] || [url=http://dug.net.pl][b]polski portal debiana[/b][/url]

Offline

 

#3  2014-10-04 19:28:03

  krasnij - oj tam

krasnij
oj tam
Skąd: z JO73VT
Zarejestrowany: 2012-05-04
Serwis

Re: Łącze zapasowe

Proponowałbym, zamiast polecenia ping użyć wget. Poczytaj man wgeta. Masz tam parametry typu "tries" i "timeout". Np.

Kod:

wget -q --tries=5  --timeout=20  http://google.com

Reszta, to już prosty bash, którego polecam się samodzielnie poduczyć.  Protip: uzyj polecenia "if" .

Masz tu kurs basha: http://www.fizyka.umk.pl/~karolamik/unix/skrypty/bash.pdf

Ostatnio edytowany przez krasnij (2014-10-04 19:28:15)


Pozdrawiam i życzę sukcesów :)
[url=https://pgp.mit.edu/pks/lookup?op=get&search=0xA0C69B3CD46838AF]Mój Public Key[/url]
[url=http://www.keros-it.com]Serwis komputerowy i elektroniczny - Świdwin[/url]
The truth is out there

Offline

 

#4  2014-10-04 19:46:29

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

[quote=milyges]Skoro klient, to na tym zarobisz. Sam podałeś wszystkie polecenia a nie chce Ci się tego sklecić w jedną całość?

Koncepcja może być, jeżeli to prośba "napiszcie bo nie chce mi się poszukać" to w dziale ogłoszenia wraz z proponowanym wynagrodzeniem :)

Jak będziesz miał napisane cokolwiek, do sprawdzenia, itp. to wtedy pisz tutaj.[/quote]
Mialem na mysli realcje Host-Client ;(.

Offline

 

#5  2014-10-05 06:40:38

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

Zatem napisałem pierwszą wersje (bardziej poglądową)

Kod:

#!/bin/bash
rm /root/skrypt/ping
sleep 1
ping -I eth0 -c 5 wp.pl  >> /root/skrypt/ping
sleep 10
bp=`grep -c "100%" /root/skrypt/ping`
if [  $bp -eq 1 ] ; then
echo "BRAK POLACZENIA, AKTYWUJE LACZE ZAPASOWE"
wvdial 3g &
else
echo "Jest OK"
fi

Planowałem skrypt odpalać w jakimś odstępie czasowym z crona ale jeżeli by już się zdarzyło że na interfejsie eth0 faktycznie zabraklo by internetu to skrypt bez końca odpalał by modem, pytanie czy jest jakas opcja żeby sobie taki skrypt działał cały czas w pętli w tle?

Offline

 

#6  2014-10-05 11:25:40

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Łącze zapasowe

Na rybkę (fragment większej całości):

Kod:

if [ $bp -eq 1 ] ; then
  if [ ! -f /root/skrypt/3g ] ; then
    echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE"
    touch /root/skrypt/3g
    wvdial 3g &
  fi
else
  if [ -f /root/skrypt/3g ] ; then
     #tutaj polecenie zamknięcia połączenia 3g, nie znam się ale sobie dopisz
     rm /root/skrypt/3g
  fi
  echo "JEST OK"
fi

I to do crona

Poza tym komplikujesz sytuację (ale rozumiem że czytanie manuali uważasz za stratę czasu):

If  ping  does  not receive any reply packets at all it will exit with
       code 1. If a packet count and deadline are both specified,  and  fewer
       than  count packets are received by the time the deadline has arrived,
       it will also exit with code 1.  On other error it exits with  code  2.
       Otherwise it exits with code 0. This makes it possible to use the exit
       code to see if a host is alive or not.[/quote]
Czyli wystarczy:

Kod:

if ! ping -I eth0 -c 5 wp.pl >/dev/null ; then

zamiast bawić się w grepowanie wyników pinga.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#7  2014-10-05 14:32:22

  mkwiatkowski - Nowy użytkownik

mkwiatkowski
Nowy użytkownik
Skąd: Earth
Zarejestrowany: 2014-09-04

Re: Łącze zapasowe

Kod ethanaka jest najbliższy sensownemu rozwiązaniu, tylko co jeśli zostanie utracony 1 pakiet? :)
W bash'u występuje konstrukcja $() poza tym unix'owo jest grep.
Ale to zadanie domowe.

Ostatnio edytowany przez mkwiatkowski (2014-10-05 14:38:13)


Errant, qui in prosperis rebus impetus fortunae
in omne tempus fugisse se putant

Offline

 

#8  2014-10-06 01:33:01

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

Dzięki wielkie!, niestety

Kod:

if ! ping -I eth0 -c 5 wp.pl >/dev/null ; then

Nie chciało działać więc zostałem przy grepie, ponadto rozwiązuje on problem jednego nieaktywnego pakietu bo wyszukuje tylko slowo 100% które występuje w wynikach tylko w wypadku utracenia wszystkich 5 pakietów.
Póki co skrypt jest jescze bez polecen bo na ta chwile nie mam dostępu fizycznego do tej maszyny ale jutro dopisze do końca.
Skrypt:

Kod:

#!/bin/bash
ping -I eth0 -c 5 wp.pl  >> /root/skrypt/ping #Zapis wyników programu ping
sleep 10 # Czas potrzebny na wykonanie programu z zapasem
bp=`grep -c "100%" /root/skrypt/ping` #Analiza wyników programu ping
if [ $bp -eq 1 ] ; then
  if [ ! -f /root/skrypt/3g ] ; then
    echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE"
    touch  /root/skrypt/3g #Tworzenie pliku kontrolnego 3g
    echo "3G Aktywne" #wvdial 3g &
  fi
else
  if [ -f /root/skrypt/3g ] ; then
     echo "Powrót połączcenia na łączu głównym, wyłączam łącze zapasowe"
     #killall -9 wvdial
     #poof
     rm /root/skrypt/3g #Usuniecie pliku kontrolnego 3g
  fi
  echo "JEST OK"
fi
rm /root/skrypt/ping #Usunięcie plikow wynikowych programu ping.

Ostatnio edytowany przez Firell (2014-10-06 01:35:24)

Offline

 

#9  2014-10-06 09:15:47

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Łącze zapasowe

[quote=Firell]Dzięki wielkie!, niestety

Kod:

if ! ping -I eth0 -c 5 wp.pl >/dev/null ; then

Nie chciało działać więc zostałem przy grepie, ponadto rozwiązuje on problem jednego nieaktywnego pakietu bo wyszukuje tylko slowo 100% które występuje w wynikach tylko w wypadku utracenia wszystkich 5 pakietów.[/quote]
Zawsze możesz sprawdzić czy $? == 1 (to powinno dać pewność że wszystkie pakiety są utracone)

A jeśli już koniecznie musisz pisać coś do pliku, to:

Kod:

ping -I eth0 -c 5 wp.pl  > /root/skrypt/ping #Zapis wyników programu ping

a nie

Kod:

ping -I eth0 -c 5 wp.pl  >> /root/skrypt/ping #Zapis wyników programu ping

Zgadnij dlaczego?

Przy okazji wyjaśnij do czego Ci ten sleep, bo albo czegoś nie rozumiesz albo nie wiem...

Jeszcze jedno: bezpieczniej będzie pingować znany adres IP (np. 194.204.152.34 - DNS tepsy) a nie wp.pl - że nie wspomnę o kilku hostach i podjęciu decyzji o przejściu na łącze zapasowe dopiero wtedy, kiedy wszystkie przestają odpowiadać.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#10  2014-10-07 01:35:29

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

Hmm, możliwe że czegoś nie rozumiem jak najbardziej ale widze to tak:
> - zapis do pliku
>> zapis do pliku linia po lini
Jeśli się mylę proszę Mnie poprawić.
Co do adresów kwestia umowna myslałem na dnsami od googli 8.8.8.8.
Co do sleep , faktycznie chyba nie jest potrzebny jak się głębiej zastanowić, nie chciałem żeby skrypt wydał polecenie pingowania po czym przeszedł do przeszukiwania pliku ktory nie zdążył jeszce się utworzyć ale teraz do Mnie dotarło że ping sam w sobie musi się wykonać i następne polecenia będą wykonywane po wykonaniu poprzedniego zatem sleep usuwam, dzięki.

Kod:

#!/bin/bash
ping -I eth0 -c 5 8.8.8.8  >> /root/skrypt/ping #Ping pierwszego hosta
ping -I eth0 -c 5 194.204.152.34  >> /root/skrypt/ping2 #Ping drugiego hosta
bp=`grep -c "100%" /root/skrypt/ping` #Analiza wyników ping
bp2=`grep -c "100%" /root/skrypt/ping2` #Analiza wyników programu ping2
bpp=$[ bp + bp2 ] #Dodanie do siebie wyników z pingów 

if [ $bpp -eq 2 ] ; then
        if [ ! -f /root/skrypt/3g ] ; then
   echo "BRAK POŁĄCZENIA AKTYWUJĘ ZAPASOWE"
    touch  /root/skrypt/3g #Tworzenie pliku kontrolnego 3g
    echo "3G Wlaczone" #wvdial PLAY &
  fi
else
        if [ -f /root/skrypt/3g ] ; then
     echo "Powrót połączcenia na łączu głównym, wyłączam łącze zapasowe"
     #killall -9 wvdial
     #poof
     rm /root/skrypt/3g #Usuniecie pliku kontrolnego 3g
  fi

zmienne bp oraz bp2 zwracają wartość 1 jeżeli wszystkie 5 pakietów zostanie utracone, zatem jeżeli zmienna bpp (później je jakoś ludzko ponazywam) przyjmie wartość 2 (5 prob nie udanych na każdy z hostów) to wtedy rozpocznie sie aktywacja łącza zapasowego, jeżeli przynajmniej jeden z hostów odpowie łącze 3g się wyłączy.


Oczywiście cały czas jestem w trakcie usprawniania tego małego skryptu więc wszelkie sugestie i krytyka mile widziane ;)

Ostatnio edytowany przez Firell (2014-10-07 02:37:53)

Offline

 

#11  2014-10-07 09:17:28

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: Łącze zapasowe

Napewno zamienić

Kod:

ping -I eth0 -c 5 8.8.8.8  >> /root/skrypt/ping #Ping pierwszego hosta
ping -I eth0 -c 5 194.204.152.34  >> /root/skrypt/ping2 #Ping drugiego hosta

na

Kod:

ping -I eth0 -c 5 8.8.8.8  > /root/skrypt/ping #Ping pierwszego hosta
ping -I eth0 -c 5 194.204.152.34  > /root/skrypt/ping2 #Ping drugiego hosta

Offline

 

#12  2014-10-07 12:48:41

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Łącze zapasowe

> - zapis do pliku (niszczy poprzednią zawartość
>> - dołączenie do istniejącego pliku (za poprzednią zawartością.
to tak na szybko bo na telefonie się nie będę rozpisywać


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#13  2014-10-07 19:17:06

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

Aha czaje , w takim razie to bez różnicy skoro plik i tak jest usuwany po fakcie dobrze myśle?

Offline

 

#14  2014-10-07 20:03:20

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Łącze zapasowe

ech....

Kod:

#!/bin/bash

#prog utraconych pakietow [%]
prog=5
ip=x.x.x.x


pingResult=100
pingResult=$(ping -q -w10 $ip | grep -o "[0-9]*%" | tr -d %) > /dev/null 2>&1

if [ "$pingResult" -gt "$prog" ]; then
       ....
fi

Ale każdy ma jakieś zboczenia, niektórzy lubią zarżnąć dysk bzdurnymi zapisami.

Pomijam fakt, że jest to głupi sposób monitoringu.

Offline

 

#15  2014-10-08 04:40:09

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

Dobra, kolejny problem się pojawił....
Mianowicie łącze znika włącza sie 3g super! Tyle że wszystkie połączenia (tak mi się przynajmniej wydaje) dalej idą przez eth0, przykladowo po wykryciu niedziałającego eth0 ping wp.pl gubi wszystkie pakietu ale ping -I ppp0 już odpowiada... Co należy zrobić aby 3g przy aktywacji stał się łączem domyślnym?
Zmiana bramy? to raczej jest przypisane do konkretnego interfejsu?

Offline

 

#16  2014-10-08 08:46:30

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Łącze zapasowe

Kod:

# route add default gw x.x.x.x ppp0
#route del default gw y.y.y.y eth0

Polecam uzupełnić wiedzę o routing
Na deser krótki algorytm:
1) wykrycie utrate połaczenia z bramą operatora
2) przełączenie na łacze zapasowe
  a) podniesienie interfejsu
  b) zmiana tras domyślnych
  c) przełączenie Firewall
  d) reset połączeń
3) nasłuch na łączu głównym
4) wykrycie powrotu funkcjonalności dla łacza głównego
  a) podniesienie interfejsu
  b) zmiana tras domyślnych
  c) przełączenie Firewall
  d) reset połączeń
5) zwolnienie interfejsu zapasowego

Offline

 

#17  2014-10-08 10:34:40

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: Łącze zapasowe

Ja polecam najpierw zrobić ręcznie przełączanie a potem automat, po co komu sterowanie brama garażową jak się nie ma garażu :)

Offline

 

#18  2014-10-10 09:29:01

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

no super...brame na łącze podstawaowe spoko moge przypisac na sztywno ale skąd mam wiedziec jaką brame dostane przez 3g?

Offline

 

#19  2014-10-10 10:11:07

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: Łącze zapasowe

Usuń najpierw wpis do bramy na eth0 połącz się przez 3g i będziesz miał gotowe połączenie.

Jak będziesz powracał na łączę eth0 to najpierw rozłącz się z 3g potem dodaj wpis bramy na eth0.

Offline

 

#20  2014-10-10 12:16:25

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Łącze zapasowe

[quote=Firell]no super...brame na łącze podstawaowe spoko moge przypisac na sztywno ale skąd mam wiedziec jaką brame dostane przez 3g?[/quote]
Z DHCP operatora?

Offline

 

#21  2014-10-10 12:33:14

  Firell - Użytkownik

Firell
Użytkownik
Zarejestrowany: 2014-10-03

Re: Łącze zapasowe

No owszem, tylko jeżeli mam ustawić brame domyślną w ten sposób

Kod:

# route add default gw x.x.x.x ppp0
#route del default gw y.y.y.y eth0

to musze ją znać chyba że się mylę?

Offline

 

#22  2014-10-10 12:42:33

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Łącze zapasowe

nie jestem pewien, ale

Kod:

ip r d 0/0
ip r a 0/0 dev ppp0

nie będzie działać?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#23  2014-10-10 12:59:51

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: Łącze zapasowe

tyle co ja wiem o sieciach to nie będzie działać bo brama musi być konkretnym IP.
Po co tyle kombinować, przed podniesieniem łącza 3g wyrzucić ustawienia bramy, podnieść interfejs 3g i brama sama się wpisze w tablicę routingu.

Ostatnio edytowany przez djjanek (2014-10-10 13:00:11)

Offline

 

#24  2014-10-10 13:33:55

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Łącze zapasowe

u mnie tak działa routing na ipv6 (podaję tylko dev bez adresu ip)...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#25  2014-10-10 15:27:07

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Łącze zapasowe

[quote=djjanek]tyle co ja wiem o sieciach to nie będzie działać bo brama musi być konkretnym IP.
Po co tyle kombinować, przed podniesieniem łącza 3g wyrzucić ustawienia bramy, podnieść interfejs 3g i brama sama się wpisze w tablicę routingu.[/quote]
No raczej wszystkie skrypty lub narzędzia startujące PPP uzupełnią lub podadzą to co dostaną od dostawcy. I tutaj zdjęcie trasy domyślnej powinno spowodować z automatu dodanie trasy na nową bramę ( tą z PPP ).

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.013 seconds, 10 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00137 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.224.39.74' WHERE u.id=1
0.00080 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.224.39.74', 1714623475)
0.00057 SELECT * FROM punbb_online WHERE logged<1714623175
0.00067 DELETE FROM punbb_online WHERE ident='18.217.203.172'
0.00051 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26501 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00346 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26501 ORDER BY p.id LIMIT 0,25
0.00088 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26501
Total query time: 0.00846 s