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ą… 😉