WireGuard VPN – dostęp do sieci lokalnej z zewnątrz
W poprzednim wpisie pokazałem świetne narzędzie jakim jest Pi-hole. Przypomnijmy sobie, że jest to nasz prywatny filtr całego internetowego syfu, czyli reklam, skryptów śledzących i przede wszystkim stron, które planują wyłudzić nasze dane lub pieniądze. Wadą opisanego rozwiązania było to, że działa jedynie w sieci lokalnej. Słowem kluczowym w tym zdaniu jest „było”, gdyż w niniejszym wpisie sprawimy, że dostęp do Pi-hole będziemy mieli z dowolnego zakątka świata. Stworzymy sobie prywatny tunel VPN do naszej sieci lokalnej, oparty o protokół komunikacyjny WireGuard skonfigurowany na routerze Mikrotik, co będzie idealnym uzupełnieniem poprzedniego wpisu.
Czym jest WireGuard
WireGuard to protokół komunikacyjny, który jest następcą IPSec i OpenVPN. Jest szybszy, bardziej stabilny, lepiej zabezpieczony i według mnie prostszy w konfiguracji. Do tego jest to oprogramowanie open-source, więc naprawdę nie można mieć żadnych wątpliwości w kontekście zaufania. Zadaniem WireGuard jest stworzenie szyfrowanego tunelu komunikacyjnego VPN (Virtual Private Network) pomiędzy dwoma urządzeniami. Tylko tyle i aż tyle. W praktyce zastosowanie takiego tunelu, łączącego nasz komputer i nasz router domowy, sprawi że nawet nie będąc fizycznie w domu będziemy mieli dostęp do infrastruktury naszej sieci lokalnej. Ba, można nawet zastosować takie ustawienia, że witryny, które odwiedzamy, będą widziały nasz domowy adres IP, czyli będzie to wyglądało tak jakbyśmy nie ruszali się z domu, co w znacznym stopniu ogranicza możliwość śledzenia czy też rejestrowania naszych nawyków.
Mikrotik jako router domowy
Bazą dla naszego tunelu VPN będzie router marki Mikrotik. Jest to potężne narzędzie, które działa na systemie RouterOS. Każda osoba, która planuje zostać administratorem, lub po prostu nauczyć się zasad działania sieci, powinna swoją naukę rozpocząć od opanowania choć niezbędnych podstaw obsługi urządzeń tego typu. Routery takie jak Netgear czy TP-Link to urządzenia stworzone tak, aby były idioto-odporne przez co ilość dostępnych na nich funkcji jest mocno ograniczona, a co za tym idzie ich możliwości też są okrojone. RouterOS daje możliwość ustawienia wszystkiego od zera i jak nie wiesz jak to zrobić to ciągle nie działa lub tracisz po prostu kompletnie dostęp do sieci. Nikt nie prowadzi za rączkę, ale gdy wiesz co robisz to masz pełną kontrolę nad kompletnie wszystkim. Ja sam nie czuję się jako mocny sieciowiec, więc Mikrotika obsługuję jedynie w jakimś tam potrzebnym mi ułamku. Natomiast, gdy muszę zmienić coś więcej to idę do dokumentacji i przeważnie przez dwa dni siedzę i główkuję, dlaczego coś mi nie działa. Dość biadolenia, przejdźmy do konkretów.
Cały dzisiejszy wpis będzie oparty o działania na Mikrotiku, więc jeżeli chcesz wykonać wszystko co będzie tu opisane to jeżeli nie masz jeszcze Mikrotika w domu to proponuję rozważyć jego zakup. Nie są to drogie sprzęty. Na początek spokojnie wystarczy najbardziej podstawowy model hAP Lite, który aktualnie kosztuje ok. 100 zł i wydaje mi się, że jest to już cena po wszechobecnych podwyżkach, bo raczej był tańszy. Jednak o ile na początek hAP Lite wystarczy, tak uwierzcie mi, że dość szybko uznacie, że chcecie więcej i szybciej. Wtedy Wasze oczy powinny się skierować przynajmniej na coś pokroju modelu hAP ac2, który nie jest szczytem marzeń, ale do zastosować domowych już wystarczy w zupełności, a przy tym nie robi dziury w kieszeni.
Konfigurujemy WireGuard na Mikrotiku
Pisząc poniższą instrukcję zakładam, że na Mikrotiku została przeprowadzona już pierwsza konfiguracja sieci. Można tutaj skorzystać z predefiniowanych setów ustawień „Quick Set” i wybrać np. „Home AP Dual”, co na początek wystarczy. Nie będę w tym wpisie opisywał jak poprawnie skonfigurować i uszczelnić Mikrotika, może w przyszłości pokuszę się na napisanie o tym wpisu, ale tak jak już mówiłem nie czuję się w tym na tyle mocny, aby uczyć jak to zrobić. Zobaczymy! Tak czy siak zakładam jak wyżej i przechodzimy do działania.
Na wstępie dodam jeszcze, że do prawidłowego działania VPNa, który za chwilę stworzymy, potrzebujemy stałego zewnętrznego adresu IP tak jak to było nam potrzebne we wpisie o łączeniu się po SSH do serwera spoza sieci lokalnej. Taki adres należy wykupić u swojego dostawcy internetu lub ewentualnie ratować się zastosowaniem usługi Dynamic DNS np. noip.com, ale to już do doczytania we własnym zakresie. Natomiast jeżeli Wasz router nie jest bezpośrednio połączony z internetem (nie ma możliwości, aby uzyskać zewnętrzny adres IP) to musicie uzyskać dostęp do routera wyższego poziomu i ustawić odpowiednie przekierowanie na port Waszego Mikrotika, który będzie obsługiwał połączenia WireGuard.
Wbijamy w przeglądarkę adres 192.168.88.1, który powinien być domyślnym adresem routera Mikrotik, chyba że zostało przy konfiguracji ustawione inaczej. Login, hasło i jesteśmy w panelu zarządzania. Od wersji v7 RouterOS wprowadzono pełną obsługę WireGuard, co bardzo ułatwi nam robotę, bo w panelu jest do tego osobna zakładka. Odnajdujemy ją w menu po lewej. W zakładce „WireGuard” przyciskiem „Add New” dodajemy nowy tunel. W zasadzie nic nie musimy wypełniać, wystarczy tylko naciśnięcie przycisku „Apply”, co spowoduje wygenerowanie dwóch kluczy, które na potrzeby tego wpisu nazwiemy sobie klucz-prywatny-serwer i klucz-publiczny-serwer. Najlepiej od razu zapiszcie sobie je gdzieś w notatniku, bo będą nam później potrzebne. Jakbyście widzieli kropki zamiast klucza prywatnego to w menu po lewej, prawie na samym dole, trzeba odnaleźć opcję „Hide Passwords” i ją odznaczyć, co spowoduje odkrycie klucza. Potrzebna nam też będzie informacja podana przy „Listen Port”, czyli domyślnie 13231, to port, na którym będzie nasłuchiwany ruch przez WireGuard. Wychodzimy z tego przyciskiem „OK”.
Teraz musimy stworzyć podsieć z inną adresacją dla interfejsu, który przed chwilą utworzyliśmy. W Mikrotiku wszystkie interfejsy LAN i WLAN są zebrane w jednej podsieci o nazwie „bridge”, której domyślna adresacja to 192.168.88.[…]. My chcemy dodać nową podsieć tylko dla połączeń VPN, więc nadamy jej adresację 192.168.87.[…]. W tym celu z menu po lewej wybieramy „IP -> Addresses”, przyciskiem „Add New” wywołujemy konfigurator nowej podsieci, pola wypełniamy następująco:Enabled: TAK
Address: 192.168.87.1/24
Network: 192.168.87.0
Interface: wireguard1
Wychodzimy przyciskiem „OK” i wracamy do zakładki „WireGuard”, ale tym razem na górze wybieramy „Peers”, gdzie dodaje się coś na zasadzie klientów. Jednak zanim to zrobimy musimy najpierw przejść na urządzenie, które chcemy połączyć z routerem poprzez tunel VPN. W moim przypadku będzie to iPad, ale ogólnie aplikacje WireGuard są dostępne na wszystkie systemy operacyjne – pod tym linkiem znajdują się odpowiednie odnośniki. Instalujemy aplikację WireGuard i odpalamy ją. Naciskamy przycisk „+”, czyli „Dodaj nowy tunel WireGuard”, i następnie „Utwórz od podstaw”. W pierwszej kolejności naciskamy przycisk „Generowanie pary kluczy”, zostaną one wygenerowane, a my na potrzeby tego wpisu nazwiemy je klucz-prywatny-klient i klucz-publiczny-klient. Te klucze zapisujemy w notatniku tak samo jak te wygenerowane dla serwera, bo tak samo nam się przydadzą później. Przechodzimy do wypełnienia konfiguracji klienta:Nazwa: wg0
Klucz prywatny: [wygenerowany klucz-prywatny-klient]
Klucz publiczny: [wygenerowany klucz-publiczny-klient]
Adresy: 192.168.87.2/32
Serwer DNS: 192.168.88.7
Wciskamy przycisk „Dodaj Peer’a” i wypełniamy dalej:Klucz publiczny: [tu podaj klucz-publiczny-serwer]
Adres: [twoje zewnętrzne IP]:13231
Dozwolone adresy IP: 0.0.0.0/0
Utrzymanie połączenia: 10
Zapisujemy taką konfigurację. Tak wygląda tworzenie na urządzeniach mobilnych (smartfony i tablety), natomiast w przypadku komputerów (Windows, macOS czy Linux) nie mamy tak prostego interfejsu i konfigurację tworzy się po prostu w formie tekstowej. Dla ułatwienia przygotowałem dla Was wersję „kopiuj-wklej i delikatnie zmodyfikuj”:[Interface]
PrivateKey = [wygenerowany klucz-prywatny-klient]
Address = 192.168.87.2/32
DNS = 192.168.88.7
[Peer]
PublicKey = [tu podaj klucz-publiczny-serwer]
Endpoint = [twoje zewnętrzne IP]:13231
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 10
Chciałbym jeszcze zwrócić uwagę na to, że jako DNS podałem adres 192.168.88.7. Przypominam, że jest to adres naszego serwera, więc już tutaj wskazujemy, że wykorzystywanym serwerem DNS ma być Pi-hole skonfigurowany przez nas w tym wpisie. Jeżeli nie chciecie przepuszczać ruchu przez Pi-hole to w tym miejscu wpiszcie „1.1.1.1”.
Wracamy do panelu administracyjnego routera i w końcu dodajemy Peer’a przyciskiem „Add New”. Pola konfiguratora wypełniamy następująco:Enabled: TAK
Interface: wireguard1
Public Key: [tu podaj klucz-publiczny-klient]
Allowed Address: 192.168.87.2/32
Zapisujemy i wychodzimy przyciskiem „OK”.
Kolejne urządzenia dodajemy tak samo, ale z tą różnicą, że musimy zmieniać adresy, które zaznaczyłem w powyższych konfiguracjach na czerwono. Zamiast 192.168.87.2/32 podajemy kolejne 192.168.87.3/32, 192.168.87.4/32 i tak dalej. Dobrą praktyką, która ułatwi Wam życie, jest też wypełnianie pola „Comment” podczas tworzenia Peer’a, tak żeby potem powiedzieć, którego konkretnie urządzenia ten Peer dotyczy.
W teorii połączenie już powinno być możliwe do uzyskania, ale nie do końca. Pozostaje nam jeszcze ustawić dwie rzeczy. Pierwsza z nich to stworzenie takiej reguły firewalla, aby router przepuszczał nam ruch na porcie 13231 i protokole UDP. Dlatego wchodzimy do zakładki „IP -> Firewall”, przyciskiem „Add New” dodajemy nową regułę i wypełniamy:Enabled: TAK
Chain: input
Protocol: 17 (udp)
Dst. Port: 13231
Action: accept
Comment: wireguard1
Tak utworzona reguła wskoczy nam na sam dół listy reguł i pomimo tego, że jest włączona, nie będzie działać. Musimy ją przesunąć przynajmniej powyżej pierwszej reguły „drop”.
Drugą rzeczą jaką musimy zrobić to wrzucić interfejs „wireguard1” do wspólnego worka z pozostałymi, tak aby nasze urządzenia po podłączeniu się przez VPN widziały wszystkie inne, które są w sieci lokalnej. Realizuje się to poprzez wejście do zakładki „Interfaces -> Interface List”, znowu „Add New” i wypełniamy:Enabled: TAK
List: LAN
Interface: wireguard1
W ten sposób urządzenia połączone przez VPN będą działać na takiej samej zasadzie jakby były podłączone po LANie, a jedyne co będzie je odróżniało to inna adresacja adresów IP.
Pozostaje już tylko włączyć tunel na urządzeniu, które łączymy przez VPN do routera i sprawdzić czy wszystko działa. Jeżeli cokolwiek jest nie tak to po pierwsze przejdźcie przez wszystkie kroki jeszcze raz i sprawdzcie czy nie ma gdzieś pomyłki. Jak wszystko jest identyko to w pierwszej kolejności szukałbym winy gdzieś w ustawieniu firewalla. Jak to nie pomoże to piszcie w komentarzach, a może wymyślimy coś razem.
Jeżeli materiał zawarty w tym wpisie jest dla Ciebie wartościowy i masz ochotę wesprzeć moją pracę to zapraszam na mój profil na >Patronite<. Zachęcam także do odwiedzenia mojej strony >tomaszdunia.pl<. Możesz także zagadać do mnie na Twitterze >@theto3k<.
Poprzedni wpis:
Pi-hole – twój prywatny serwer DNS, czyli adblocker
Następny wpis:
Webmin – webowe centrum dowodzenia serwerem
Kategorie: Dla początkujących,Osprzęt,Poradniki - @ 2022-06-18 11:00
Tagi: Adres IP, Android, DDNS, Dynamic DNS, firewall, ios, IPSec, Linux, macOS, Mikrotik, Netgear, ODROID, OpenVPN, peer, pi-hole, RaspberryPi, TP-Link, VPN, Windows, WireGuard