Ładowanie

ZeroTier – domowy VPN bez publicznego adresu IP

🇵🇱->🇬🇧 Go to english version of this post / Przejdź do angielskiej wersji tego wpisu

W poprzednich wpisach z cyklu smart home opisałem jak zrobić w swoim domu „inteligentne” oświetlenie w oparciu o produkty firmy Shelly oraz jak postawić swój własny serwer do zarządzania domowymi urządzeniami IoT z wykorzystaniem systemu Home Assistant. W ten sposób stworzyliśmy sobie możliwość w pełni zdalnego zarządzania światłem w swoim domu. Ale czy na pewno jest to „w pełni zdalne” zarządzanie? Otóż nie do końca, gdyż serwer operuje jedynie w sieci lokalnej, więc opuszczając dom i tracąc zasięg Wi-Fi na swoim telefonie całkowicie tracimy możliwość sterowania czymkolwiek. Konieczne jest udostępnienie sobie możliwości dostania się do serwera z zewnątrz. Istnieje coś takiego jak Home Assistant Cloud znane również jako Nabu Casa, ale jest to usługa subskrypcyjna, a więc (według mnie niepotrzebnie) obciąży tylko nasz portfel. Idealną alternatywą byłoby uruchomić na swoim routerze, będącym bramą wejściową do sieci domowej, tunelu VPN (Wireguard, OpenVPN, …), przez który moglibyśmy bezpiecznie wejść z zewnątrz urządzeniem mobilnym do naszej sieci domowej. Jednakże do uruchomienia takiej usługi konieczne jest posiadanie publicznego adresu IP. Chodzi o adres, który bezpośrednio kieruje ruch sieciowy do naszego routera wejściowego. Nie należy mylić tego ze stałym adresem IP, który za dodatkową miesięczną opłatę (przeważnie ok. 10 zł) można uzyskać u wielu dostawców usług internetowych. Adres publiczny może być zmienny, bo łatwo można sobie z tym poradzić wykorzystując dowolne (jest wiele darmowych) rozwiązanie Dynamic DNS pokroju NoIP.com lub DuckDNS.org. Zatem nie ważne czy adres jest zmienny czy stały, ważne aby był publiczny. Piszę o tym dlatego, że uzyskanie publicznego adresu IP jest bardzo trudne lub wręcz niemożliwe, gdy jesteśmy zmuszeni do korzystania z internetu radiowego. Dostawcy jak T-Mobile, Plus, Play, Orange i inni mają dość skomplikowane infrastruktury, które wyglądają jak wielkie drzewo, którego konary rozgałęziają się na mniejsze gałązki (podsieci). To sprawia, że nie możemy po prostu otworzyć jakiegoś portu na routerze i wykorzystując nasz adres IP, który poznamy np. na stronie WhatIsMyIP.com, dostać się do usługi, którą wystawiliśmy na tym porcie z sieci lokalnej. Pokażę to na własnym przykładzie. Moim dostawcą internetu radiowego jest T-Mobile. Sprawdźmy zatem jaki jest mój adres IP patrząc z zewnątrz.

Teraz zobaczmy jakie informacje mogę wyczytać na swoim routerze.

Adres 188.146.174.60 nijak ma się do 10.76.187.110, prawda? To za sprawą tego, że ten drugi jest moim adresem wewnątrz sieci, a może nawet jednej z podsieci, T-Mobile. Zatem, aby ruch z zewnątrz trafił na moje urządzenie musi zostać najpierw skierowany pod adres 188.146.174.60, następnie przechodzi przez nie znaną mi ilość routerów/switchy znajdujących się wewnątrz infrastruktury T-Mobile i dopiero na samym końcu trafia pod adres 10.76.187.110, który jest tak naprawdę moim indywidualnym identyfikatorem, który znamy tylko T-Mobile i ja, a który jest obsługiwany przez jeden z tych wewnętrznych routerów będący, którymś w kolei serwerem DHCP.

Brak publicznego adresu IP to problem, który najczęściej dotyczy właścicieli nowo wybudowanych domów, które postawiono na działce nieuzbrojonej w światłowód. W najlepszym wypadku sieć światłowodowa znajduje się na którejś z działek sąsiadujących, a w najgorszym nie ma jej w promieniu nawet kilku kilometrów. Tak czy siak, aby podłączyć się do sieci trzeba zawsze odczekać swoje i sporo się za tym nachodzić, dlatego wiele osób takich jak ja po prostu decyduje się na internet radiowy, który będzie wykorzystywany jako rozwiązanie tymczasowe do momentu podłączenia światłowodu.

Nie ma jednak problemów nie do rozwiązania i po tym lekko przydługim wstępie przedstawię jak ogarnąć temat dostania się z zewnątrz do swojej sieci domowej, gdy nie posiadamy publicznego adresu IP i tym samym nie możemy skonfigurować sobie po prostu zwykłego VPN’a. Wykorzystam do tego darmową usługę ZeroTier.

Zakładamy konto

Wchodzimy na stronę zerotier.com i odnajdujemy w prawym górnym rogu przycisk Sign Up. Zostaniemy przeniesieni do strony logowania, ale pomijamy sekcję Log In, bo my dopiero chcemy założyć konto. Poniżej znajdujemy przycisk Sign Up. W formularzu podajemy swój adres e-mail, wpisujemy dwa razy hasło i potwierdzamy przyciskiem Sign Up. Wchodzimy na swoją skrzynkę mailową, na której powinna już czekać wiadomość z linkiem potwierdzającym, z którego oczywiście korzystamy. Teraz możemy się już zalogować do nowo utworzonego konta wykorzystując wcześniej wpisane dane.

Tworzymy sieć wirtualną

Po zalogowaniu się pojawia nam się interfejs z tylko jednym przyciskiem Create A Network. Trzeba przyznać, że szata graficzna ZeroTier nie jest ekstrawagancka. Lubię taki prosty wygląd bez żadnych rozpraszaczy. Idealny przykład stawiania funkcjonalności ponad wygląd. Naciskamy tenże przycisk. Cyk i utworzony został szablon naszej nowej sieci wirtualnej. Wybieramy ją z listy, aby wejść do jej ustawień. Na górze w polu tekstowym podpisanym Network ID znajdziemy identyfikator sieci, który później nam się przyda, więc zapisujemy go gdzieś w notatniku. W moim przypadku jest to 8bd5124fd63b4288. Wyprzedzę pytanie – ta sieć powstała tylko na potrzeby tego wpisu i po zrobieniu materiału została zutylizowana, więc można sobie darować próby ataku 🙃. Przewijamy dalej, aby w polu Name nadać własną nazwę dla sieci. Sprawdź też koniecznie czy w sekcji Access Control masz zaznaczone Private. Takie ustawienie wymusi konieczność autoryzacji każdego urządzenia, które będzie chciało podłączyć się do tej sieci wirtualnej. Włączenie opcji Public sprawiłoby, że do przyłączenia się potrzebna byłaby tylko znajomość Network ID. Taka sytuacja byłaby szalenie niebezpieczna przy tym do czego planujemy użyć ZeroTier, tj. do wpuszczenia zewnętrznego ruchu do wnętrza swojej sieci domowej. Ostatnie co trzeba ustawić to adresacja wewnątrz sieci wirtualnej, którą właśnie konfigurujemy. Istotnym jest, aby nie była ona taka sama jak pula adresów naszego domowego serwera DHCP. Przykładowo jeżeli na routerze głównym w domu mam ustawione, że pula adresów sieci lokalnej to 192.168.1.0 – 192.168.1.254 to nie mogę w wirtualnej sieci ZeroTier ustawić 192.168.1.*, bo będę miał konflikt. W takim przypadku można wybrać jakąś pulę z 10 na początku, np. 10.147.17.*, wtedy jest pewność, że nie będzie problemu.

Konfiguracja po stronie Home Assistant

Na ten moment zrobiliśmy już wszystko po stronie interfejsu ZeroTier, więc pora przejść do systemu Home Assistant. Wchodzimy do Ustawienia -> Dodatki. Następnie naciskamy przycisk Sklep z dodatkami. W wyszukiwarce wpisujemy „zerotier”, po czym w wynikach wyszukiwania powinniśmy otrzymać tylko jeden rezultat – „ZeroTier One”. Instalujemy dodatek korzystając z przycisku Zainstaluj. Po zakończeniu instalacji przechodzimy do zakładki Konfiguracja. W sekcji Opcje naciskamy trzy kropki w prawym górnym rogu i wybieramy opcję Edytuj w trybie YAML. Nie trzeba tego tak robić, ale ja po prostu tak wolę. Pojawi nam się edytor kodu, w którym wpisujemy następującą treść:

networks:
  - 8bd5124fd63b4288
api_auth_token: ""

To jest właśnie ten moment, w którym przyda nam się zapisany w notatniku identyfikator sieci wirtualnej ZeroTier. Po wprowadzeniu prawidłowej wartości zapisujemy zmiany przyciskiem Zapisz. Wracamy do zakładki Informacje i naciskamy przycisk Uruchom. Dodatek powinien się uruchomić prawidłowo, ale dla pewności można wejść do zakładki Logi i sprawdzić czy nie ma tam jakiś informacji o błędach. Nie przejmuj się, że prawdopodobnie niewiele zrozumiesz z zapisów w dzienniku, który zobaczysz. Istotne, aby nie było tam nic na czerwono lub frazy „error”.

Autoryzacja serwera Home Assistant

Wracamy do panelu sterowania ZeroTier i wchodzimy do ustawień naszej sieci. Na liście w sekcji Members powinien pojawić nam się pierwszy wpis. Widzimy, że w kolumnie Auth mamy czerwony znaczek oznaczający, że dane urządzenie nie zostało jeszcze wpuszczone do sieci. W celu przeprowadzenia autoryzacji naciskamy ikonkę w kolumnie Edit. Otworzy się okienko, w którym zaznaczamy ptaszek przy Authorized i nadajemy nazwę dla tego urządzenia w polu Name. Teraz wystarczy tylko nacisnąć przycisk Save. W prawym górnym rogu pojawi się podświetlony na zielono napis Authorized i urządzenie otrzyma pozwolenie na przyłączenie się do sieci wirtualnej.

Podłączenie telefonu

Mam iPhone, więc zrzuty ekranu będą pokazywać jak to zrobić na iOS, ale dla Android’a proces powinien wyglądać analogicznie. Na telefonie wchodzimy do sklepu z aplikacjami i wyszukujemy appkę ZeroTier One. Instalujemy i uruchamiamy ją. Na wstępie prosi nas o akceptację regulaminu, więc czytamy go uważnie (😎) i jeżeli nie mamy uwag to naciskamy Accept. Kolejnym krokiem jest dodanie nowej sieci co realizuje się poprzez naciśnięcie ikony plusika znajdującej się w prawym górnym rogu. W pole Network ID wpisujemy wcześniej zapisany identyfikator sieci i naciskamy przycisk Add Network. System poprosi nas o zezwolenie na dodanie nowej konfiguracji VPN, naciskamy Allow. Nowa sieć została dodana. Trzeba ją teraz włączyć korzystając z suwaka po prawej stronie.

Po stronie telefonu nie musimy na ten moment robić nic więcej. Przyszła pora na powrót do panelu sterowania ZeroTier i przeprowadzić autoryzację telefonu. Robi się to tak samo jak opisałem wcześniej, więc nie będę tego powtarzać. Finałem jest posiadanie na liście dwóch urządzeń, które od tego momentu są ze sobą połączone poprzez wirtualną sieć ZeroTier.

Sprawdźmy czy to działa

Wszystko poszło gładko, ale czy to w ogóle działa? Rozłączamy się z siecią Wi-Fi, otwieramy przeglądarkę i w pasek adresu wpisujemy 10.147.17.196:8123. Dla każdego ten adres będzie prawdopodobnie inny. Ogólnie jest to zlepek adresu serwera w sieci wirtualnej, który można znaleźć w kolumnie Managed IPs, dwukropka i portu 8123. Jeżeli wszystko zrobiliśmy prawidłowo to po załadowaniu strony powinniśmy zobaczyć panel logowania do Home Assistant, a po wpisaniu prawidłowych loginu i hasła uzyskać dostęp do naszego panelu zarządzania domowymi urządzeniami IoT.

Aplikacja Home Assistant

Do pełni szczęścia i wygody brakuje nam jeszcze tylko aplikacji Home Assistant na smartfonie, dlatego pędzimy do sklepu z appkami i w wyszukiwarkę wpisujemy Home Assistant. Pobieramy i uruchamiamy. Na dzień dobry ekran powitalny, na którym naciskamy przycisk Continue. Aplikacja zapyta czy pozwalamy na skanowanie sieci lokalnej w poszukiwaniu urządzeń. Nie musisz tego robić, bo można to skonfigurować bez tego, gdyż w następnym kroku dostaniemy możliwość ręcznego wpisania adresu serwera – Enter Address Manually. Wpisujemy ten sam adres, który wcześniej wpisywaliśmy w pasek adresu przeglądarki. W moim przypadku było to 10.147.17.196:8123. Naciskamy przycisk Connect. Wyskoczy jeszcze monit, że podaliśmy goły adres bez wskazanego protokołu, więc wybieramy, że chcemy skorzystać z protokołu HTTP (http://). Jeszcze tylko ekran logowania, zapytanie o to czy chcemy włączyć powiadomienia i gotowe. Mamy dostęp do prawdziwie zdalnego sterowania naszym „inteligentnym” domem z poziomu smartfona!

Podsumowanie

Mimo, że opisany przeze mnie powyżej sposób jest bardzo łatwy, wygodny i darmowy to koniecznie trzeba pamiętać, że nie jest to rozwiązanie idealne. Mam do niego kilka zarzutów, a głównym jest to, że bazujemy na infrastrukturze dostawcy trzeciego, a takim nigdy nie można ufać. ZeroTier ma ogólnie dobrą renomę, ale mimo to jest to tak naprawdę wpuszczanie obcego do swojej sieci domowej. W przypadkach podbramkowych, gdy nie ma wyjścia, lub jako rozwiązanie doraźne/chwilowe jest do zaakceptowania, ale na dłuższą metę zawsze będę polecał spróbować pozyskać od dostawcy internetu prawdziwie publiczny adres IP i stworzyć dla siebie zwykły tunel VPN czy to przy pomocy Wireguard czy chociażby OpenVPN. Jest to rozwiązanie lepsze, bo sami stawiamy serwer VPN na routerze lub serwerze działającym w sieci lokalnej i spinamy go z klientami, bez pośredników. Takie trochę „umiesz liczyć, licz na siebie”.


Jeżeli podobał Ci się ten wpis to możesz mnie wesprzeć! 🙂

Tomasz Dunia

🇵🇱 Z wykształcenia Mechatronik. Z zawodu Główny Konstruktor w PAK-PCE Polski Autobus Wodorowy (Neso Bus). Po pracy Ojciec Roku. W nocy Wannabe Programista. Wszystko to daje przepis na zwykłego nerda :) 🇬🇧 Mechatronics by education. By profession Chief Constructor in PAK-PCE Polish Hydrogen Bus (Neso Bus). After work Father of the Year. At night Wannabe Programmer. All this gives a recipe for an ordinary nerd :)

svg

Co myślisz?

Pokaż komentarze / Napisz komentarz

4 komentarze

Odpowiedz

svg
Szybka nawigacja
  • 01

    ZeroTier – domowy VPN bez publicznego adresu IP