exelban's blog

[PL] Homelab (część 7: zdalny dostęp)

December 21, 2024

W tej części opiszę, jak zrealizowałem dostęp do domowej sieci, kiedy jestem poza domem. Przez długi czas nawet nie zastanawiałem się nad tym, żeby mieć VPN w homelabie, ponieważ początkowo zakładałem, że homelab będzie dostępny tylko lokalnie. Jednak po kilku wyjściach z domu i otwarciu kilku stron zrozumiałem, że bez PiHole nie chcę przeglądać internetu. Dodatkowo od pewnego czasu mam lokalną instancję Ollama, więc fajnie byłoby mieć do niej dostęp również poza domem.

VPN

WireGuard

Nie zastanawiając się długo nad wyborem technologii VPN, zacząłem przeglądać informacje o WireGuardzie. Pierwsze, co przyszło mi do głowy, to użycie kontenera Dockera. Okazało się, że LinuxServer oferuje swój build WireGuarda, który można znaleźć tutaj. Szybkie kopiuj-wklej pliku docker-compose.yaml i serwer WireGuard był uruchomiony.

Niestety, nie spodobał mi się sposób dodawania nowych kluczy, więc wróciłem do Google.

Kolejnym krokiem było wypróbowanie wg-easy. To rozwiązanie opiera się na tym samym serwerze WireGuard, ale oferuje bardzo przyjemny interfejs użytkownika. Dzięki niemu można łatwo dodawać nowych klientów, przeglądać aktywnych użytkowników itp. To rozwiązanie bardzo mi się spodobało i przez pewien czas z niego korzystałem. Nadal bym go używał, gdyby nie fakt, że mam UDM.

W pewnym momencie przypomniałem sobie, że przecież UDM (UniFi Dream Machine) ma wbudowany VPN. Otworzyłem ustawienia UDM i zauważyłem opcję Unifi Teleport. Szybko jednak zrezygnowałem, ponieważ wymaga to włączenia zdalnego dostępu do UDM przez Unifi, a tego wolałem uniknąć.

Na szczęście UDM oferuje opcję stworzenia serwera VPN, zarówno w technologii WireGuard, jak i OpenVPN. Szybka konfiguracja WireGuard i wszystko działa. Po usunięciu wg-easy mam działający VPN w najbardziej krytycznym punkcie infrastruktury (jeśli UDM przestanie działać, to i tak nic innego w homelabie nie będzie funkcjonować). Przy konfiguracji VPN warto przejść na ustawienia manualne i ręcznie ustawić DNS.

Najważniejszym klientem VPN dla mnie jest iOS. Na szczęście WireGuard oferuje świetną aplikację na tę platformę. Wystarczy stworzyć nowego klienta w WireGuard, zeskanować kod QR i mamy skonfigurowany dostęp do sieci lokalnej. Dodatkowo ustawiłem automatyczne łączenie z VPN podczas korzystania z sieci mobilnej. Dzięki temu, gdy jestem w domu, mam lokalny dostęp, a poza domem przez mobilny internet – dostęp przez VPN. Na razie takie rozwiązanie mi wystarcza.

Dynamiczny IP

Po zakończeniu testów zostawiłem wszystko tak, jak było oryginalnie skonfigurowane. Jednak po kilku dniach, gdy wyszedłem z domu, nie mogłem połączyć się z VPN. Wtedy przypomniałem sobie, że mam dynamiczny adres IP, który prawdopodobnie się zmienił…

Pierwsze, co chciałem zrobić, to skorzystać z jakiegoś serwisu DynamicDNS. Żaden z dostępnych mi się jednak nie spodobał, a dodatkowo brakowało darmowych opcji, więc postanowiłem coś wymyślić samemu.

Po krótkim researchu znalazłem rozwiązanie: użycie domeny zamiast adresu IP w konfiguracji VPN. W ten sposób wystarczy zawsze aktualizować rekord A w danej domenie. Dodałem nowy rekord A vpn.* w Cloudflare (ważne, aby wyłączyć proxy przy tym rekordzie), wskazując na publiczny adres IP. Następnie zmieniłem konfigurację VPN z adresu IP na URL. Wszystko działało – teoretycznie do momentu, gdy zmieni się publiczny adres IP.

Ostatnim krokiem było automatyczne aktualizowanie rekordu A, gdy zmieni się publiczny adres IP. W kilka minut stworzyłem mały serwis: ip-sync. Jego jedynym zadaniem jest okresowe sprawdzanie publicznego adresu IP i aktualizowanie rekordu DNS, jeśli nie jest już aktualny. Dzięki temu zawsze mam aktualny adres IP w DNS.

Podsumowanie

Zdalny dostęp do sieci domowej za pomocą VPN oparty na WireGuard zapewnia mi bezpieczeństwo i wygodę korzystania z usług lokalnych, takich jak PiHole czy Ollama, niezależnie od lokalizacji. Dzięki integracji z UDM i automatycznemu zarządzaniu dynamicznym IP przez własny serwis, mam pewność, że dostęp będzie zawsze aktualny i stabilny. Rozwiązanie to jest proste, skuteczne i spełnia moje potrzeby bez konieczności korzystania z zewnętrznych usług DynamicDNS.