Instalacja i konfiguracja sieci VPN ZeroTiter na OpenWrt
Ostatnia zmiana: 2024-12-09 18:01

Dzięki różnym sieciom VPN możemy mieć zdalny dostęp do zasobów sieci do których nie jesteśmy fizycznie podłączeni. Omawiałem już kilka różnych rodzajów:
- OpenVPN
- Wireguard
- PPTP
- n2n
ale każda z nich opierała się na takiej samej zasadzie - musimy mieć dostęp do urządzenia pełniącego rolę "serwera" z publicznym adresem IP, do którego możemy podłączyć inne hosty. Główna trudność w zestawieniu takiego połączenia to zwykle właśnie posiadanie serwera z publicznym adresem IP. W niektórych przypadkach udostępniane są bezpłatnie publiczne serwery które jednak nie umożliwiają komunikacji pomiędzy klientami (jak komercyjne OpenVPN) lub są na tyle mało rozpowszechnione że trudno znaleźć poprawnie działający serwer (jak n2n).
ZeroTier jest siecią komercyjną, ale mają także bezpłatny plan pozwalający na połączenie do 100 hostów. Umożliwia stworzenie własnej sieci komputerów połączonych centralnym kontrolerem którym zarządzaniem zajmuje się zespół ZeroTier.
Klient ZeroTier dostępny jest na platformy Windows, MacOS, Apple iOS, Android, dostępny jest także na popularne wydania dystrybucji Linuksa oraz dostępny jest pakietach dla OpenWrt. W tym poradniku ZeroTier wykorzystany zostanie do połączenia kilku hostów w jedną sieć oraz zostanie wykonany zdalny dostęp do komputerów w sieci lan jednego z klientów.
Ten poradnik przetestowano na OpenWrt 19.07.

Zakładanie konta

Wchodzimy do ZeroTier Central i zakładamy konto na kontrolerze:
- wybieramy "Log In to ZeroTier"
- na samym dole strony wybieramy "Register"

I podajemy swoje dane. Adres email musi być prawdziwy, gdyż przyjdzie na niego link do aktywacji konta. Po wykonaniu tej czynności zostaniemy przeniesieni na stronę na której możemy założyć własną sieć. Wybieramy "Create your first ZeroTier network" i po kilku sekundach dostaniemy gotowy szablon naszej sieci. Można go będzie później opisać, zmienić nazwy itp, choć obecnie najważniejsze są dwie rzeczy które musimy zapamiętać:
- network ID, został automatycznie utworzony i dla celów poradnika załóżmy że był to 8bbb3333999922bb
- klasa adresowa naszej sieci. Jest w sekcji "IPv4 Auto-Assign", powinna być zaznaczona opcja "Auto-Assign from Range" i należy wybrać taką, która nie pokrywa się naszymi sieciami. Dla celów poradnika załóżmy że została wybrana podsieć 172.22.*. Można to ręcznie zmienić, ale dalsze modyfikacje zostawiam czytelnikowi.

Instalacja klienta

Na przykładzie OpenWrt. Instalujemy niezbędne pakiety:


    # opkg update
    # opkg install zerotier

Następnie musimy dołączyć się do naszej sieci.

Uwaga: W zależności od wersji pakietu, niektóre konfigurację robi się inaczej. Przed wykonaniem poniższych poleceń sprawdź z jaką wersję pakietu masz do czynienia!

Dla nowszej wersji pakietu


    # uci set zerotier.global.enabled='1'
    # uci set zerotier.home=network
    # uci add zerotier.home.id='8bbb3333999922bb'
    # uci commit zerotier
    # /etc/init.d/zerotier reload

Dla starszej wersji pakietu


    # uci set zerotier.home=zerotier
    # uci add_list zerotier.home.join='8bbb3333999922bb'
    # uci set zerotier.home.enabled='1'
    # uci commit zerotier
    # /etc/init.d/zerotier reload

Zrobiona została nowa sekcja o nazwie "home", dodajemy identyfikator sieci stworzonej w kontrolerze.

Jeżeli wszystko poszło dobrze, to możemy zweryfikować połączenie poleceniem:


    # zerotier-cli info
    200 info 7ce12532bc 1.4.6 ONLINE

Wracamy teraz do kontrolera, w sekcji "Members" powinien pojawić się nasz host. Zaznaczamy opcję przy "Auth" danego klienta. Dosłownie w ciągu kilku sekund powinien zostać przypisany adres IP, który będzie widoczny na liście i który możemy zweryfikować w OpenWrt poleceniem:


    # ifconfig
    [...]
    ztbpaavjo3 Link encap:Ethernet HWaddr 4A:1C:9D:BA:35:39
        inet addr:172.22.162.143 Bcast:172.22.255.255 Mask:255.255.0.0
        inet6 addr: fe80::481c:9dff:feba:3539/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:2800 Metric:1
        RX packets:296 errors:0 dropped:0 overruns:0 frame:0
        TX packets:383 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:96822 (94.5 KiB) TX bytes:35480 (34.6 KiB)

Pojawił się nowy interfejs o nazwie zt* i to jest właśnie nasz ZeroTier.

Weryfikacja połączenia

Podana konfiguracja jest już wystarczająca żeby uzyskać zdalny dostęp do samego urządzenia. Jeżeli podłączamy w analogiczny sposób następny router, komputer z windowsem czy smartfon to powinniśmy mieć możliwość dostania do się do zasobów danego urządzenia np. przez www czy ssh.

Dostęp do sieci LAN

Załóżmy że za jednym z routerów mamy inne urządzenia do których chcemy mieć dostęp przez naszego VPN. W tym celu na danym routerze wykonujemy odpowiednią konfigurację sieci oraz firewalla:


    # uci set network.home=interface
    # uci set network.home.ifname=<tu-nazwa-interfejsu ZT>
    # uci set network.home.proto=none

Zamiast <tu-nazwa-interfejsu ZT> należy podstawić nazwę interfejsu otrzymaną w wyniku polecenia ifconfig

Następnie firewall:


    # uci add firewall zone
    # uci set firewall.@zone[-1].name=home
    # uci set firewall.@zone[-1].input=ACCEPT
    # uci set firewall.@zone[-1].forward=ACCEPT
    # uci set firewall.@zone[-1].output=ACCEPT
    # uci set firewall.@zone[-1].network=home
    # uci set firewall.@zone[-1].masq=1

    # uci add firewall forwarding
    # uci set firewall.@forwarding[-1].src='home'
    # uci set firewall.@forwarding[-1].dest='wan'
    # uci add firewall forwarding
    # uci set firewall.@forwarding[-1].src='home'
    # uci set firewall.@forwarding[-1].dest='lan'
    # uci add firewall forwarding
    # uci set firewall.@forwarding[-1].src='lan'
    # uci set firewall.@forwarding[-1].dest='home'
    # uci commit
    # reboot

Następnie logujemy się do kontrolera i w sekcji "Advanced"/"Managed Routes"/"Add Routes" dodajmy:

  • Destination: np. 192.168.11.0/24 (adresacja LAN na routerze za którym są inne komputery, w tym przypadku była to sieć 192.168.11.0/24)
  • (Via): np. 172.22.213.210 (taki adres IP ma ten router, można to sprawdzić w sekcji "Members" w kontrolerze lub odczytać z interfejsu zt* na routerze)
Klikamy "Submit". Po kilku sekundach powinna pojawić się nowa trasa na urządzeniach i o ile tylko urządzenia w lanie są dobrze skonfigurowane to powinien być do nich dostęp.

Trasa domyślna

ZeroTier domyślnie łączy tylko urządzenia z jedną sieć, ale nie powoduje że podłączony komputer dostanie inną trasę domyślną i będzie wychodził do internetu przez VPN. Jeżeli z jakiegoś powodu chcemy aby połączony komputer wychodził do internetu przez inny host w sieci, należy dodać wykonać dwie rzeczy:
- na kontrolerze dodajemy trasę domyślną przez tego hosta - w sekcji "Advanced"/"Managed Routes"/"Add Routes" dodajmy:

  • Destination: 0.0.0.0/0
  • (Via): np. 172.22.213.210 (adres IP komputera w sieci VPN który będzie pełnił rolę gatewaya do internetu). Ten host musi mieć ustawiony forwarding pakietów oraz maskaradę, ale w OpenWrt mamy to domyślnie.
- na routerze który ma wychodzić przez VPN trzeba zezwolić na zmianę trasy domyślnej poleceniem (przykład dla OpenWrt):


    # zerotier-cli set 8bbb3333999922bb allowDefault=1

gdzie 8bbb3333999922bb to oczywiście identyfikator naszej sieci. W/w polecenie trzeba uruchomić każdorazowo po restarcie routera i uruchomieniu ZeroTier. Czy trasa domyślna została ustawiona możemy sprawdzić poleceniem:


    # route -n

Zakończenie

ZeroTier oferuje sporo opcji konfiguracyjnych, możliwość przypisania własnej adresacji, łączenie interfejsów w Layer 2 czy wykorzystanie API do prostego odpytywania stanu sieci. Zachęcam do szerszego zapoznania się z tym systemem, ponieważ oferuje naprawdę sporo możliwości przy darmowej opcji konta.