Monitorowanie starej lodówki czyli zaawansowane techniki informatyczne w służbie domu.

Dodano: 2016-08-21

Mam maluteńki domek letniskowy. Jako, że jest on maluteńki, wyposażenie kompletowane było na zasadzie "bierzemy co macie" - jest więc stare i nie rzadko kończy swój technologiczny żywot. Jednym z urzadzeń jest lodówka - model Zanussi pamiętający obrady okrągłego stołu w 89 roku.

Domek położony jest pośrodku niczego, milion lat świetlnych od jakiejkolwiek drogi, dotyka go więc problem większości wsi - okresowe zaniki prądu.  Połączenie lokalizacji, problemów z zasilaniem oraz wieku lodówki daje problem o którym chciałem napisać - zdarza się, że po przybyciu do domku wita nas w okolicach lodówki piękna kałuża wody fantazyjnie ukladająca się w kształt a to jakiegoś kontynentu, a to zwierzątka lub stwora rodem z "Gwiezdnych wojen".

Tak więc narodziła się konieczność diagnozy - czy też nasza wiekowa lodówka wydaje właśnie ostatnie tchnienie, czy też sieć energetyczna odmawia posłuszeństwa na tak długi okres, że lodówka zdąży się rozmrozić? Przerwę w dostawie prądu można wyłapać łatwo, ale jak długo ona trwa? Czy się powtarza? Jeżeli tak, to jak często i jak długo trwają przerwy?

Domek może i mały, wyposażenie stare i składkowe, ale dostęp do internetu musi być jak najlepszy :). W okolicy widać jedynie lasy, więc dostęp do internetu zapewnia nam Mikrotik SXT LTE na którym  w porywach udaje się wyciągnąć przyzwoite 10/10 Mbps - co jak na warunki polowe i naszą rodzinę w zupełności wystarcza (no dobra, dzieci jęczą że jak wszyscy włączają Youtube to rwie).

 

Niestety, sieć Play, w której mamy kartę sim routuje część ruchu w swojej sieci prywatnej,więc dostępu z zewnątrz do tego urządzenia nie ma. Ale nic nie stoi na przeszkodzie, aby nasz Mikrotik łączył się przez vpn do mojej sieci domowej, gdzie mam uruchomiony serwer vpn :). Szybko więc wygenerowałem certyfikaty dla nowego użytkownika, wgrałem na Mikrotika i skonfigurowałem połączenie:



Przy okazji, zapewniłem sobie dostęp z domku letniskowego do sieci domowej - wszystkie media domowe mam pod ręką :).

Kolejny problem to połączenie się z sieci domowej do mikrotika - serwer vpn nadaje adresy w sposób automatyczny. Można oczywiście grzebać po logach serwera vpn, ale zdecydowanie utrudnia to automatyzację monitoringu ;). Na szczęście mikrotik wspiera dynamiczny dns - pomyślałem. Niestety, jak się okazało, obecnie usługi te są płatne. A co będzie jeżeli zapomnę opłacić abonament, monitoring padnie i znów nie będę wiedział, co się dzieje z moją konającą lodówką?

Mikrotik jest naprawdę potężną platformą i wiele można na nim zrobić. Na przykład napisać skrypt, który będzie wysyłał do zdalnego serwera informację jaki adres aktualnie posiada na interfejsie vpn :). Oto i on:
 

:local newIP [/ip address get [find interface="ovpn-out1"] address];

/tool fetch url="https://serwer.sloneczko.net/dynamic.php?i=$newIP" mode=http user=domekletniskowy password=Sup3rt4jn3h4sl0

/file remove dddns.php

 

Skrypt dodany do schedulera na Mikrotiku raz na minutę odwołuje się do zdalnego serwera po bezpiecznym połączeniu https i po dokonaniu autoryzacji przekazuje aktualny adres jaki posiada aktualnie na interfejsie vpn.

Mając aktualny adres mojego Mikrotika, nic nie stoi na przeszkodzie aby stworzyć dla niego wpis w DNS, który skrypt będzie uaktualniał, jeżeli on się zmieni. Wydelegowałem więc domenę domekletniskowy.sloneczko.net na osobny serwer DNS, gdzie uruchomiłem serwer dns Pdns - dzieki temu mogę dokonać aktualizacji wpisu w bazie danych. I robi to skrypt dynamic.php:

<?php

$do = 0;
if (preg_match('/^10.10.10.[0-9]+/32+$/', $_GET['i'])) {
        $NewIP = preg_replace('//.*/', '', $_GET['i']);

        if (!file_exists('tmp/lastip')) {
                $do = 1;
                if(!$ipFile = fopen('tmp/lastip', "w+")) {
                        die("NOT OK");
                }
                fputs($ipFile, $NewIP);
                fclose($ipFile);
        }
        else {
                if(!$ipFile = fopen('tmp/lastip', "r")) {
                        die("NOT OK");
                }
                $LastIP = fread($ipFile, filesize('tmp/lastip'));
                fclose($ipFile);
                if ("$NewIP" == "$LastIP") {
                        die("OK");
                }
                else {
                        if(!$ipFile = fopen('tmp/lastip', "w+")) {
                                die("NOT OK");
                        }
                        fputs($ipFile, $NewIP);
                        fclose($ipFile);
                        $do = 1;
                }
        }

        if ($do == 1) {
                include('dbclass.php');
                $db = new Database();
                $db->init();

                $db->input("update records set content='".$NewIP."', change_date=UNIX_TIMESTAMP() where id='10'");
                $T_serial = $db -> get("select content from records where id='9'");
                $serial = preg_split("/ /", $T_serial);
                $serial[2]++;
                $db->input("update records set content='ns1.domekletniskowy.sloneczko.net biuro@sloneczko.net ".$serial[2]." 600  300 1814400 600' where id='9'");
                $db->close();
        }
}
else {
        echo ("Go away");
}
echo "OK";
?>

 

Tak więc mam już dostęp z domowego routera do mojego zdalnego Mikrotika, Mikrotik  raportuje mi swój aktualny adres, a w razie zmiany adresu skrypt dokonuje aktualizacji wpisu w DNS. Odwołując się więc do domeny domekletniskowy.sloneczko.net mam pełen dostęp do sieci w domku letniskowym :). Pozostało tylko na domowym routerze uruchomic dostęp z sieci w domu do sieci w domku letniskowym:

 

iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -d 10.10.10.0/24  -j SNAT --to 10.10.10.1

 

No dobra, mam wszystko połączone, działające, ale gdzie w tym wszystkim monitoring? Ano tu - można sobie teraz podpiąć lokalizację pod Smokeping (przy okazji kiwamy palcem Playowi za fatalne czasy odpowiedzi):
 

Można też dodać Mikrotika do Cacti i sprawdzić jaki ma uptime i kiedy się resetował:

 

 

Albo sprawdzić jaką mamy na działce temperaturę :)

 

 

Teraz pozostało nam tylko poczekać na kolejną kałużę przed lodówką... ;)

 

 

Spodobał Ci się wpis? Podziel się ze znajomymi!

Zobacz wszystkie wpisy na blogu