Dostęp przez sieć ZeroTier do urządzeń w swoim domowym LAN-ie

Od jakiegoś czasu denerwowało mnie, że mam dostęp po ZT tylko do swojego HA. By mieć dostęp do innych urządzeń w domowym LAN-ie, konieczne było instalowanie na nich kolejnych klientów ZT, co mi się nie uśmiechało za bardzo.

Obecnie tak naprawdę mam dwa urządzenia w sieci ZeroTier (Lapek, który jeździ ze mną po świecie i jeden host w domowym LAN-ie). Do pozostałych hostów dostaję się łącząc z nimi tak jakbym był fizycznie w domu, czyli wpisując adres IP, lub używając przyjaznych nazw np: qnap.home, ha.home, printer.home itp.

Podziękowania dla kolegi Daniela S., któy w zasadzie wykonał całość researchu i służył ogromną pomocą w implementacji rozwiązania.

Witaminka:
UWAGA. Nie załączam za wiele screenów, gdyż opis i większość poleceń jadę z głowy. Starałem się zachować poprawną kolejność działań.

W sieci domowej potrzebujemy jednego hosta z Linuxem (może to być maszyna wirtualna, rPi, czy dowolne inne rozwiązanie). W moim przypadku postwaiłem VM na QNAP-ie.

Instalujemy najlżejszy z możliwych dostępnych linuxów. Jestem zwolennikiem Debiana, więc padło na Ubuntu Server (server dlatego, że nie posiada GUI, dzięki czemu jest leciutki i mało zasobo żerny).

ISO to niecałe 80MB

Instalujemy sobie ubunciaka, zaznaczając przy instalacji OpenSSH.

Po zainstalowaniu logujemy się i wydajemy komendę

sudu su

Jesteśmy teraz rootem i nie potrzebujemy przy każdej komendzie wydawać polecenia sudo

Teraz coś co przyda się później i pewnie będzie przydawać co jakiś czas.
Sprawdzamy nasz IP poleceniem:
ip a

Warto aktualizować system :slight_smile:

apt update
apt upgrade
apt install mc curl htop

mc lubię używać, curl będzie potrzebny

Następnie:
apt install iptables-persistent

W tym momencie warto ustawić stały adres IP naszego hosta:
mcedit /etc/netplan/01-netcfg.yaml wpisując IP jaki chcemy mieć.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: no
      addresses: [192.168.1.252/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

Zapisujemy F2, wychodzimy F10

Wydajemy polecenie:

netplan apply

Sprawdzamy IP:
ip a

Instalujemy ZT poleceniem:
curl -s https://install.zerotier.com | bash

Po zainstalowaniu łączymy się z siecią ZT:
zeerotier-cli join twoja_siec_xyz - tutaj zakładam, że każdy sobie poradzi. Wytłumaczenia jak zacząć i korzystać z ZT to materiał na osobny wpis.

Po podłączeniu Ubuntu, autoryzujemy go w panelu ZT.

sprawdzamy czy jesteśmy podłączeni:
zerotier-cli info
Wynik poniższy to jest ok:
200 info twoja_siec_xyz 1.10.1 ONLINE

Sprawdzamy czy pojawiła się nowa karta sieci ZT
ip a

Mała, ważna dygresja.
Adresacja domowej sieci: 192.168.1.xxx
Adresacja sieci ZeroTier: 10.123.xxx.xxx

Następnie przez www: w ZeroTier Central → Advanced → Managed Routes → Add Routes dodajemy trasę routingu:
Szerszy opis w linku:

Jeśli masz sieć zaadresowaną analogicznie jak we wspomnianej wcześniej dygresji to w Add Routes wpisujesz:

Destination: 192.168.0.0/23 (via) 10.123.0.0/16

Jeśli masz u siebie w sieci piHole i chcesz do swoich urządzeń dostawać się po nazwach, to od razu można w tym samym miejscu, w sekcji DNS wpisać adres piHole i nazwę domeny, np: home
Search Domain: home
Server Address: 192.168.1.250 - powiedzmy, że to jest adres Twojego piHole

image

W oparciu o link kolejny etap to konfiguracja maszyny z Ubuntu

Wytłumaczenie:
ens3 - karta sieciowa do twojego LANu (może być też eth0, itp.)
ztuze5b3kz - karta sieci ZT, u ciebie może nazywać się inaczej

Jako root wpisujemy po kolei reguły firewalla i wydajemy polecenia:

iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE 
iptables -A FORWARD -i ens3 -o ztuze5b3kz -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ztuze5b3kz -o ens3 -j ACCEPT
bash -c iptables-save > /etc/iptables/rules.v4

Zezwalamy na połączenia ZT i SSH

ufw allow 9993/udp
ufw allow OpenSSH

Zezwalamy na zapytnia DNS:

ufw allow 53/tcp
ufw allow 53/udp

Edytujemy plik sysctl.conf:
mcedit /etc/sysctl.conf

W nim odkomentowujemy wpis:
net.ipv4.ip_forward=1

Zapisujemy F2, wychodzimy z edytora F10

Aktywujemy zmiany:
sysctl -p

Restartujemy firewalla:

ufw disable
ufw enable

i pozostaje ostatnia rzecz do zrobienia. Na Twoim domowym routerze dodanie jednej regułki odpowiedzialnej za przekierowanie ruchu. Ja mam ubiquiti i wygląda to mniej więcej tak:
Sieć docelowa: 10.123.0.0/16 - sieć ZeroTier
Odległość: 1
Typ trasy: Następny przeskok
Następny przeskok: 192.168.1.66 - adres IP maszyny z zainstalowanym Ubuntu

Wygląda to tak:

W tym momencie na urządzeniu poza domowym lanem, po podłączeniu sieci ZT mamy fizyczny dostęp do hostów w domowym LAN-ie.

OPCJONALNIE:
Dostawanie się do hostów w LAN-ie po nazwach z wykorzystaniem piHole

Instalujemy piHole:
curl -sSL https://install.pi-hole.net | bash

W konfiguracji piHole w zakładce DNS Records dodajemy wpis, np:
Domain: qnap.home IP Address: 192.168.1.111
Domain: ha.home IP Address: 192.168.1.222
itp…

W tym momencie na urządzeniu poza domowym lanem, po podłączeniu sieci ZT i wpisaniu w przeglądarce: ha.home:8123 otworzy się strona z Home Assistantem (podmień na swoje IP;)

Linki, z których korzystałem:

Link #1
Link #2
Link #3
Link #4
Link #5
Link #6

DODATEK:

Ponieważ distro Ubuntu, z którego korzystałem było dość leciwe podaję info jak zaktualizować dystrybucję do najnowszej wersji.

Jako root wydajemy polecenia

apt update
apt upgrade
apt dist-upgrade
do-release-upgrade

Po ostatnim poleceniu za wyjątkiem pytania dot. modyfikacji pliku sysctl.conf, na które odpowiadamy N na wszystkie pozostałe pytania odpowiadamy Y.

Polecenie do-release-upgrade można powtórzyć kilka razy, podnoszenie wersji odbywa się etapowo, nie podnosi od razu do ostatniej wersji systemu.

DODATEK #2:

Sprawdzanie list firewalla:
ufw status verbose

Sprawdzanie w “locie” logów firewalla:
tail -f /var/log/ufw.log

Sprawdzanie w “locie” logów piHole:
tail -f /var/log/pihole/pihole.log

Sprawdzanie w “locie” logów piHole ale dotyczących np. konkretnego IP:
tail -f /var/log/pihole/pihole.log | grep 192.168.1.111

Sprawdzanie wersji systemu:
cat /etc/os-release

Sprawdzanie wykorzystania RAM-u:
free -h

Sprawdzanie zajętości dysku:
df -h

Wizualizacja obciążenia systemu, procesów itp. polecenie
htop

5 polubień

:heart: za tutorial ale czy patrzyłeś może na tailscale i subnets?

Patrząc po manualu wygląda to w konfiguracji bardzo podobnie. Zerotiera używam od kilku lat i mam w obsłudze kilka sieci po dziesiąt hostów w każdej. Przyzwyczaiłem się do ZT.

Do dzisiaj nie miałem w zasadzie żadnego pada ZT, a np. Ubiquiti wykłada się regularnie :rofl: