Jak wiemy w dzisiejszych czasach każdy musi sobie jakoś radzić, a wiec i nasza społeczność też znalazła sposób aby ominąć lokalna sieć w systemach MultiRoom i puścić usługę w dalsze zakątki pajęczyny.
Usługodawca nie ułatwia nam sprawy w zakresie diagnostyki połączeń szczególnie w sieci lokalnej wycinając protokół diagnostyczny na dekoderach co prowadzi do braku możliwości diagnozy poprawnego fizycznego połączenia miedzy dekoderami w warstwie 2 sieci.
To najbardziej mnie frustrowało, że problem dopiero dostrzegamy gdy znika obraz na którymś z tv systemu MR, a pani na infolinii każe mi sprawdzić ustawienia DNS-a na interfejsie dekoderów.
Podczas awarii nawet w sieci LAN pierwszym punktem zanim gdzieś zadzwonimy powinno być sprawdzenie fizycznego połączenia miedzy dekoderami, bo to może się wtyczka przekrzywić, switch oszaleć, czy kabel uszkodzić. Niby w dekoderach cyfry jest wbudowany w interfejs narzędzie diagnostyczny ale nie raz się już przekonałem, że to raczej żart, a jego główną zaletą jest zawieszanie się ;) i najczęściej pomocny bywa jedynie przy fabrycznym resecie dekodera.
"Jak tu żyć" - parafrazując słynnego swego czasu rolnika, a może jednak da się coś zrobić. Z pomocą przychodzi nam protokół ARP i jego mechanizmy komunikacji w warstwie drugiej. Jego podstawowa zaleta jest taka, że działa w oparciu tylko o warstwę druga i domenę rozgłoszeniową.
Na razie odniesiemy się do routera EDGERouter choć na Tomato jest to jeszcze prostsze (może dla tego że więcej czasu w grzebaniu po systemie tam się spędziło).
I to tak na prawdę wszystko co nam potrzebne jest do realizacji celu.
Teraz wystarczy tylko napisać skrypt ;). Każdy może sobie to zrobić we własnym zakresie i przypływie weny twórczej.
Dla niewtajemniczonych podzielę się własnym wytworem fantazji.
Wiemy już po lekturze przenoszenia skryptu smpt-cli jak należy go zapisać na routerze i nadać mu prawa
#!/bin/bash
clear
R1="0*Cinek_Router_Server_OVPN"
R2="192.168.2.153*Cinek_MR_Server_MR"
R3="192.168.2.152*Cinek_MR_Client_MR_1"
R4="192.168.2.1*Marian_Rouer_Client_OVPN_1"
R5="192.168.2.2*Marian_MR_Client_MR_1_Marian"
R6="192.168.2.3*Marian_MR_Client_MR_2_Michal"
R7="192.168.2.10*Grzesiek_Router_Client_OVPN_2"
R8="192.168.2.11*Grzesiek_RR_Client_RR_1"
R9="0*Brak"
R10="0*Brak"
R11="0*Brak"
R12="0*Brak"
BR="br0"
for A in $R1 $R2 $R3 $R4 $R5 $R6 $R7 $R8 $R9 $R10 $R11 $R12
do
IP=`echo "$A" |awk -F"*" '{printf $1}'`
OPIS=`echo "$A" |awk -F"*" '{printf $2}'`
if [ "$IP" != 0 ] then
PING=`sudo /usr/sbin/arping -I "$BR" "$IP" -c 5 |grep "0 reply" |wc -l`
if [ "$PING" = 1 ] then
echo "---------------------------------------------------------------------"
echo `date`
echo "Brak_polaczenia ----- $OPIS ----- $IP"
fi
if [ "$PING" = 0 ] then
echo "---------------------------------------------------------------------"
echo `date`
echo "OK ----- $OPIS ----- $IP"
echo "---------------------------------------------------------------------"
fi
fi
done
exit 0
Trochę o konfiguracji:
- R1-R12 to zmienne definiujące nasze IP i opisy routerów i dekoderów, a separatorem jest *
Pierwsze pole wpisujemy IP dekodera/routera(most vpn), a drugie opis (może być dowolny lecz ciągłym tekstem bez spacji). Zalecam rozdzielenie opisów między dekoderami a routerami bo to w czytelny sposób wyświetli nam wynik i pomoże zlokalizować usterkę.
- Aby wykluczyć dana zmienna R w sprawdzaniu bo np.: nie mamy takiej ilości sprzętu w sieci wystarczy zamiast IP wpisać 0.
- BR to bridge do którego wpięliśmy interfejs tap na routerze
Jest to skrypt, który sprawdza nam połączenie w czasie rzeczywistym czyli odpalamy konsole i dostajemy wynik:
Skrypt umieszczony w lokalizacji /config
IP wszystkich uprzedzeń wymienionych w tym przypadku musi być stałe nadane z palca lub przez statyczny DHCP - by to miało sens.
---------------------------------------------------------------------
Sat May 1 11:57:07 CEST 2021
OK ----- Cinek_MR_Server_MR ----- 192.168.2.153
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:12 CEST 2021
OK ----- Cinek_MR_Client_MR_1 ----- 192.168.2.152
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:18 CEST 2021
OK ----- Marian_Rouer_Client_OVPN_1 ----- 192.168.2.1
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:23 CEST 2021
OK ----- Marian_MR_Client_MR_1_Marian ----- 192.168.2.2
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:28 CEST 2021
OK ----- Marian_MR_Client_MR_2_Michal ----- 192.168.2.3
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:33 CEST 2021
OK ----- Grzesiek_Router_Client_OVPN_2 ----- 192.168.2.10
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:38 CEST 2021
OK ----- Grzesiek_MR_Client_MR_1 ----- 192.168.2.11
---------------------------------------------------------------------
ubnt@ubnt:~$
Tak wygląda wynik gdy wszystko jest w porządku. Połączenie między routerem na którym stoi serwer vpn jest z każdym elementem sieci vpn (końcówka tunelu reprezentowana przez IP routerów i klientami czyli IP dekoderów) w drugiej warstwie sieciowej.
---------------------------------------------------------------------
Sat May 1 11:57:07 CEST 2021
Brak_polaczenia ----- Cinek_MR_Server_MR ----- 192.168.2.153
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:12 CEST 2021
Brak_polaczenia ----- Cinek_MR_Client_MR_1 ----- 192.168.2.152
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:18 CEST 2021
OK ----- Marian_Rouer_Client_OVPN_1 ----- 192.168.2.1
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:23 CEST 2021
OK ----- Marian_MR_Client_MR_1_Marian ----- 192.168.2.2
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:28 CEST 2021
Brak_polaczenia ----- Marian_MR_Client_MR_2_Michal ----- 192.168.2.3
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:33 CEST 2021
OK ----- Grzesiek_Router_Client_OVPN_2 ----- 192.168.2.10
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:38 CEST 2021
OK ----- Grzesiek_MR_Client_MR_1 ----- 192.168.2.11
---------------------------------------------------------------------
ubnt@ubnt:~$
Gdy widzimy, że brak połączenia występuje tylko na dekoderach MR klienckich, a nasze połączenie spinających tunel jest OK przyczyny problemu szukamy fizycznie od kabla wpiętego w końcówkę klienta vpn po nasz dekoder. Najczęściej reset fabryczny dekodera klienckiego pomaga.
Co innego gdy nasz serwer MR nie odpowiada to mimo iż cała sieć działa sprawnie padnie nam usługa MR na klienckich dekoderach - tak właśnie wykryłem niesprawność sprzętowo/softwarową w trybie czuwania dekodera matki i skończył życie w serwisie (wymiana na nowy).
Ostatni wariant to gdy nie mamy połączenia z końcówką tunelu vpn:
---------------------------------------------------------------------
Sat May 1 11:57:07 CEST 2021
OK ----- Cinek_MR_Server_MR ----- 192.168.2.153
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:12 CEST 2021
OK ----- Cinek_MR_Client_MR_1 ----- 192.168.2.152
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:18 CEST 2021
Brak_polaczenia ----- Marian_Rouer_Client_OVPN_1 ----- 192.168.2.1
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:23 CEST 2021
Brak_polaczenia ----- Marian_MR_Client_MR_1_Marian ----- 192.168.2.2
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:28 CEST 2021
Brak_polaczenia ----- Marian_MR_Client_MR_2_Michal ----- 192.168.2.3
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:33 CEST 2021
OK ----- Grzesiek_Router_Client_OVPN_2 ----- 192.168.2.10
---------------------------------------------------------------------
---------------------------------------------------------------------
Sat May 1 11:57:38 CEST 2021
OK ----- Grzesiek_MR_Client_MR_1 ----- 192.168.2.11
---------------------------------------------------------------------
Oznacza to że automatycznie cały segment sieci VPN będzie zgłaszał brak połączenia czyli wszystkie dekodery umieszczone w tym segmencie. Zazwyczaj oznacza to na problem z nawiązaniem połączenia vpn - padł tunel vpn/router/konfiguracja vpn lub brakiem prądu w danej lokalizacji.
Powyższy opis przedstawia nam sytuacje detekcji problemu w czasie rzeczywistym - ale chodzi nam bardziej o to by skrypt czuwał za nas i tylko podczas wykrycia jakiegoś problemu dał nam znać byśmy mogli zadziałać zanim ktoś zgłosi problem ;)
Do tego nam był potrzebny klient smtp na EDGERouter: https://openlinksys.info/forum/viewth...d_id=22604
Skoro mamy go już zainstalowanego i przetestowaliśmy odbiór naszej poczty to zabierzmy się za skrypt.
#!/bin/bash
R1="0*Cinek_Router_Server_OVPN"
R2="192.168.2.153*Cinek_MR_Server_MR"
R3="192.168.2.152*Cinek_MR_Client_MR_1"
R4="192.168.2.1*Marian_Rouer_Client_OVPN_1"
R5="192.168.2.2*Marian_MR_Client_MR_2_Marian"
R6="192.168.2.3*Marian_MR_Client_MR_3_Michal"
R7="192.168.2.10*Grzesiek_Router-Client_OVPN_2"
R8="192.168.2.11*Grzesiek_MR_Client_MR_4"
R9="0*Brak"
R10="0*Brak"
R11="0*Brak"
R12="0*Brak"
LOK="/config/mail.txt"
TEST="/config/test"
BR=br0
PASS="hasło do poczty"
ADR="adres naszej poczty"
HOST_SMTP="adres naszego serwera smtp np dla o2 to poczta.o2.pl, dla interii poczta.interia.pl itd"
LINIA=28
echo "1" >> $TEST
DEL_LOG=`grep "1" < "$TEST" | wc -l`
if [ $DEL_LOG -ge 2 ] then
if [ -e "$LOK" ] then
rm "$LOK"
if [ -e "$TEST" ] then
rm "$TEST"
fi
fi
fi
for A in $R1 $R2 $R3 $R4 $R5 $R6 $R7 $R8 $R9 $R10 $R11 $R12
do
IP=`echo "$A" |awk -F"*" '{printf $1}'`
OPIS=`echo "$A" |awk -F"*" '{printf $2}'`
if [ "$IP" != 0 ] then
PING=`sudo /usr/sbin/arping -I "$BR" "$IP" -c 5 |grep "0 reply" |wc -l`
if [ "$PING" = 1 ] then
echo "-------------------------------------------------------------------------" >> "$LOK"
echo `date` >> "$LOK"
echo "Brak_polaczenia ----- $OPIS ----- $IP" >> "$LOK"
echo "-------------------------------------------------------------------------" >> "$LOK"
fi
if [ "$PING" = 0 ] then
echo "-------------------------------------------------------------------------" >> "$LOK"
echo `date` >> "$LOK"
echo "OK ----- $OPIS ----- $IP" >> "$LOK"
echo "-------------------------------------------------------------------------" >> "$LOK"
sudo chmod 777 "$LOK"
fi
fi
done
for B in $R1 $R2 $R3 $R4 $R5 $R6 $R7 $R8 $R9 $R10 $R11 $R12
do
IP=`echo "$B" |awk -F"*" '{printf $1}'`
OPIS=`echo "$B" |awk -F"*" '{printf $2}'`
if [ "$IP" != 0 ] then
MAIL=`grep "Brak_polaczenia" < "$LOK" | grep $OPIS | wc -l`
if [ $MAIL -ge 2 ] then
tail -n "$LINIA" /config/mail.txt > /config/mail1.txt
/config/smtp-cli --host="$HOST_SMTP" --port=587 -4 --hello-host=EDGERouter --disable-starttls --disable-ssl --auth-login --missing-modules-ok --user="$ADR" --pass="$PASS" --from="$ADR" --to="$ADR" --subject="MultiRoom Zawieszony" --body-plain="/config/mail1.txt"
rm "$LOK"
fi
fi
done
exit 0
Zapisuje sobie go w lokalizacji pod nazwą - jak widać /config/WatchL2MR_EDGE.sh
Konfiguracja:
R1-R12 - to samo co w skrypcie poprzednim
LOK,TEST - pliki pomocnicze nie należy zmieniać jak nie trzeba
BR - to samo co w skrypcie poprzednim
PASS - hasło do naszego serwera pocztowego
ADR - adres naszej poczty
HOST_SMTP - adres naszego serwera SMTP
LINIA - liczba zależna od zdefiniowanych zmiennych R*4 u mnie mam 7 IP sprzętu więc 7*4=28
Zasada działania skryptu:
Skrypt w zależności od zdefiniowanego interwału w harmonogramie - u mnie co 15 min sprawdza nam połączenia między urządzeniami jeśli wynik będzie OK to nic nie robi.
Jednak gdy wykryje brak połączenia odnotowuje to i przy kolejnym sprawdzeniu jeśli brak połączenia powtórzy się na danym urządzeniu wysyła do nas maila co 1,5h przy interwale 15 min - ta zwłoka wynika z wykluczeniem chwilowego zaniku prądu lub przejściowych problemów.
Skrypt będzie tak długo spamował naszą pocztę, aż na połączeniach w zdefiniowanych zmiennych R nie wróci status OK.
Teraz trzeba skrypt umieścić w harmonogramie:
Odpalamy GUI i wchodzimy w zakładkę: Config tree
Przechodzimy w drzewie Configuration do pozycji
-system
-- task-scheduler
--- task
rozwijamy zakładkę:
W okienku task wpisujemy nazwę zadania: Dowolnie (Watch)
Updatelist
Dodadzą nam się kolejne pozycje pod zakładka task
- Watch
crontab-spec
interval
Tutaj wybieramy jedna z opcji crontab - https://pl.wikipedia.org/wiki/Crontab lub interwał
Dla mnie wystarczający jest interwał 15 min więc wpisuje 15m
ostatnia zakładka to executable wpisuje w niej ścieżkę do skryptu
arguments
path /config/WatchL2MR_EDGE.sh
I to by było na tyle, wynudzonych zapraszam na piwo ;).
Edytowany przez hermes-80 dnia 01-05-2021 14:39
=============================================================== Netgear WNR3500L v1 Podziękowania dla administracji Openlinksys.info!
· Łącznie użytkowników: 24,115 · Najnowszy użytkownik: Ja
Czat
Musisz się zalogować, aby opublikować wiadomość.
Maniek91PL
06-11-2024 22:37
dzięki !
maxikaaz
29-10-2024 14:27
@Maniek91PL - Administration=> Admin Access, i tam masz "Allow Wireless Access" do zaznaczenia
Maniek91PL
26-10-2024 22:07
siemka! ktoś przypomni co się ustawiało jeśli nie mogę wejść od strony wifi do tomato? od lan działa
overflow2
04-10-2024 17:34
Kupowałem Asusy n10u albo n12d1 ale nie widzę ich, chyba już nie produkują, Chodzi o coś nowego i taniego. Transfery niewielkie.
maxikaaz
04-10-2024 09:38
@overflow2 patrząc po dostępności funkcji w nowych kompilacjach, to chyba nawet WRT54G/GL jeszcze ma OpenVPN, albo jakiś odpowiednik... zależy, na jakie transfery liczysz.
overflow2
30-09-2024 20:53
Jaki aktualnie najtańszy router do tomato do openvpn?
maxikaaz
27-07-2024 15:07
@servee - na początek router do rozebrania i obejrzenia, ciężko wróżyć tak tylko po objawach
maxikaaz
27-07-2024 14:55
@servee - cały kontroler nie pada tak sobie z powodu "zbiegu okoliczności", więc prawdopodobnie gdzieś przepięcie.
servee
25-07-2024 13:33
@maxikaaz: działało, aż pewnego pięknego dnia przestało działać. W tym dniu była też burza, ale to raczej zbieg okoliczności.
maxikaaz
25-07-2024 11:38
@servee - o ile problem jest w obrębie samych wyjść (dławiki, warystory), to naprawialne, ale jeśli w samym SoC - to nienaprawialne ze względu na koszta. A co było przyczyną?