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).
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
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
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