ZeroTier na PiKVM – zdalny dostęp do konsoli bez publicznego adresu IP
ZeroTier na PiKVM – zdalny dostęp do konsoli bez publicznego adresu IP
PiKVM jest jednym z tych narzędzi, które najbardziej docenia się dopiero w sytuacji awaryjnej: serwer nie startuje, trzeba wejść do BIOS/UEFI, zmienić kolejność bootowania albo sprawdzić komunikat na ekranie, kiedy zwykły pulpit zdalny już nie działa. Problem zaczyna się wtedy, gdy urządzenie znajduje się za NAT-em, w sieci klienta albo w miejscu, gdzie nie chcemy wystawiać żadnych portów do Internetu.
Jednym z praktycznych rozwiązań jest podłączenie PiKVM do prywatnej sieci ZeroTier. W efekcie administrator łączy się z panelem PiKVM po adresie z wirtualnej sieci, bez przekierowania portów na routerze i bez udostępniania interfejsu WWW publicznie.
Kiedy takie rozwiązanie ma sens?
- gdy PiKVM pracuje w lokalizacji bez stałego publicznego adresu IP,
- gdy nie chcemy konfigurować przekierowania portów na routerze,
- gdy urządzenie ma służyć jako awaryjny dostęp do serwera lub komputera,
- gdy potrzebujemy prostego dostępu administracyjnego do kilku lokalizacji.
W praktyce jest to podobne do małego, prywatnego VPN-a dla urządzeń administracyjnych. ZeroTier tworzy osobną sieć, a dostęp do PiKVM otrzymują tylko zatwierdzone urządzenia.
Założenia
- PiKVM z systemem w wersji 2022.06.20 lub nowszej,
- dostęp do konta w ZeroTier Central,
- utworzona sieć ZeroTier i znany jej Network ID,
- dostęp root do PiKVM przez SSH lub web terminal,
- świadomość, że modyfikujemy usługi systemowe i plik
/etc/fstab.
Uwaga: PiKVM zwykle pracuje w trybie tylko do odczytu. To celowe zabezpieczenie przed uszkodzeniem systemu plików przy nagłej utracie zasilania. Dlatego zmiany zaczynamy od komendy rw, a po zakończeniu wracamy do trybu ro.
1. Instalacja pakietu ZeroTier
Logujemy się na PiKVM jako root i przełączamy system plików w tryb zapisu:
rw
pacman -S zerotier-one
systemctl enable --now zerotier-one.service
systemctl stop zerotier-one.service
Usługę uruchamiamy tylko po to, aby wygenerowała swoją tożsamość. Następnie ją zatrzymujemy, ponieważ pliki tożsamości przeniesiemy do trwałej przestrzeni PiKVM.
2. Odczytanie identyfikatora urządzenia
Adres węzła ZeroTier odczytujemy z pliku identity.public:
cat /var/lib/zerotier-one/identity.public | cut -d: -f 1
Otrzymany identyfikator dodajemy w panelu ZeroTier Central do swojej sieci. W nowym panelu można to zrobić przez listę urządzeń sieci, a w starszym panelu przez ręczne dodanie członka lub zatwierdzenie nowego urządzenia.
3. Przeniesienie konfiguracji do trwałej pamięci PiKVM
PiKVM ma specjalną przestrzeń persistent storage, przeznaczoną właśnie na pliki, które mają przetrwać restart. Wykorzystamy ją do przechowania tożsamości ZeroTier.
pst=/var/lib/kvmd/pst/data/zerotier-one
kvmd-pstrun -- mkdir -p "$pst"
kvmd-pstrun -- cp -a /var/lib/zerotier-one/{*.public,*.secret} "$pst"
Następnie tworzymy katalog z konfiguracją sieci i pusty plik <network_id>.conf. Taki plik powoduje dołączenie usługi ZeroTier do wybranej sieci przy starcie.
read -r -p "Podaj Network ID ZeroTier: " NETWORK_ID
kvmd-pstrun -- mkdir -p "$pst/networks.d"
kvmd-pstrun -- touch "$pst/networks.d/$NETWORK_ID.conf"
Opcjonalnie, jeśli chcemy dopuścić konfigurację DNS z ZeroTier, można dodać plik lokalnej konfiguracji dla tej sieci:
kvmd-pstrun -- /bin/sh -c "echo allowDNS=1 > $pst/networks.d/ \
$NETWORK_ID.local.conf"
W środowiskach firmowych warto tę decyzję przemyśleć. DNS z sieci overlay może być przydatny, ale nie zawsze powinien nadpisywać lokalną konfigurację rozwiązywania nazw.
4. Przygotowanie katalogu roboczego ZeroTier jako tmpfs
Usługa ZeroTier standardowo korzysta z katalogu /var/lib/zerotier-one. Chcemy, aby po starcie był to katalog roboczy w pamięci, a właściwe pliki były kopiowane z persistent storage.
rm -rf /var/lib/zerotier-one
mkdir -p /var/lib/zerotier-one
grep -q '^tmpfs /var/lib/zerotier-one ' /etc/fstab || \
echo "tmpfs /var/lib/zerotier-one tmpfs mode=0755 0 0" >> /etc/fstab
mount -a
Komenda mount -a jest ważna, ponieważ od razu montuje nowy wpis z /etc/fstab. Bez tego usługa może wystartować na nieprzygotowanym katalogu.
5. Nadpisanie konfiguracji usługi systemd
Teraz tworzymy drop-in dla usługi ZeroTier:
systemctl edit zerotier-one.service
W edytorze wklejamy:
[Unit]
Requires=var-lib-zerotier\x2done.mount
After=var-lib-zerotier\x2done.mount
ConditionPathIsReadWrite=/var/lib/zerotier-one
[Service]
ExecStartPre=-/usr/bin/find /var/lib/zerotier-one -mindepth 1 -delete
ExecStartPre=/usr/bin/cp -a /var/lib/kvmd/pst/data/zerotier-one/. \
/var/lib/zerotier-one/
Najczęstsza literówka w tym miejscu to wpisanie zerotier-one.zervice zamiast zerotier-one.service. Warto też zwrócić uwagę na kropkę na końcu ścieżki źródłowej w poleceniu cp. Dzięki niej kopiujemy zawartość katalogu, a nie sam katalog jako podkatalog.
Po zapisaniu pliku przeładowujemy systemd:
systemctl daemon-reload
6. Powrót do trybu tylko do odczytu i uruchomienie usługi
ro
systemctl start zerotier-one.service
Stan usługi sprawdzamy poleceniem:
systemctl status zerotier-one.service
Po poprawnym starcie powinniśmy zobaczyć, że przed uruchomieniem usługi wykonują się kroki ExecStartPre, czyli czyszczenie katalogu roboczego i kopiowanie konfiguracji z persistent storage.
7. Sprawdzenie połączenia
Listę sieci ZeroTier sprawdzamy poleceniem:
zerotier-cli listnetworks
Adres IP z interfejsu ZeroTier można odszukać na przykład tak:
ip a | grep zt
Po zatwierdzeniu urządzenia w ZeroTier Central i przydzieleniu adresu IP, panel PiKVM powinien być dostępny z komputera administratora pod adresem z sieci ZeroTier, np.:
https://ADRES_ZEROTIER_PIKVM/
Typowe problemy
- PiKVM nie pojawia się w ZeroTier Central – sprawdź, czy usługa działa i czy urządzenie ma dostęp do Internetu.
- Brak adresu IP w ZeroTier – upewnij się, że urządzenie zostało autoryzowane w panelu ZeroTier.
- Usługa nie startuje po zmianie fstab – sprawdź, czy istnieje katalog
/var/lib/zerotier-onei wykonajmount -a. - Po restarcie znika konfiguracja – sprawdź, czy pliki
*.public,*.secretinetworks.dznajdują się w/var/lib/kvmd/pst/data/zerotier-one. - Nie działa DNS z ZeroTier – sprawdź zawartość pliku
<network_id>.local.confi ustawienieallowDNS.
Efekt końcowy
Po wykonaniu konfiguracji PiKVM dołącza do prywatnej sieci ZeroTier automatycznie po starcie. Administrator łączy się z urządzeniem po adresie z sieci overlay, bez publikowania panelu PiKVM w Internecie i bez konfigurowania przekierowań portów.
To dobre rozwiązanie dla serwisowego dostępu awaryjnego, małych serwerowni, komputerów przemysłowych oraz lokalizacji, w których klasyczny VPN jest zbyt ciężki albo nie obejmuje wszystkich urządzeń.
Podsumowanie
ZeroTier na PiKVM nie zastępuje zdrowych zasad bezpieczeństwa, ale może znacząco uprościć dostęp administracyjny. Najważniejsze jest to, aby nie traktować PiKVM jako publicznej strony WWW. Dostęp powinien być ograniczony, konta zabezpieczone mocnym hasłem, a lista członków sieci ZeroTier regularnie kontrolowana.
Warto również zapisać sobie procedurę cofnięcia zmian i testować konfigurację wtedy, gdy mamy jeszcze fizyczny dostęp do urządzenia. PiKVM najczęściej przydaje się wtedy, gdy wszystko inne zawodzi, więc jego konfiguracja powinna być możliwie prosta i powtarzalna.
Źródła
- Using ZeroTier on PiKVM – Gist
- PiKVM Handbook – Persistent storage
- ZeroTier Documentation – Client Configuration
- ZeroTier Documentation – Quickstart
G