Tabela tras pokazuje trasę domyślną przez interfejs ZeroTier, sieć zgłasza się jako online, a przeglądarka nadal wychodzi z lokalnego adresu ISP. Ten układ jest częsty i nie jest błędem klienta. Trasa domyślna mówi tylko, dokąd mają trafić pakiety; na drugim końcu coś musi je przekazać i przetłumaczyć. Trzy osobne części muszą być spełnione, zanim węzeł wyjściowy zadziała.

Trasa istnieje, ale nic nie wychodzi

Najpierw sprawdź tabelę tras klienta. Wiersz taki jak default via 10.147.20.5 dev zt0 dowodzi, że trasę zainstalowano, a nie że cel przyjmie ruch. Następny skok musi być członkiem gotowym i zdolnym ją przekazać.

Jeśli to samo żądanie nadal wychodzi przez interfejs fizyczny, klient nie zainstalował trasy albo zainstalował ją z metryką, która przegrała z lokalną trasą domyślną. Jeśli żądanie znika po zainstalowaniu trasy, członek wyjściowy odbiera pakiety i nie potrafi ich przekazać ani przetłumaczyć. Klient, który zachowuje fizyczną trasę domyślną, nie wysyła do wyjścia ani jednego pakietu.

Ta różnica decyduje, gdzie pracować. Porównanie adresu publicznego przed zmianą i po niej oddziela trasę nigdy nieużywaną od trasy użytej i odrzuconej, i wymaga jednego polecenia zamiast przeglądu całej konfiguracji. Wykonaj porównanie, zanim zmienisz cokolwiek innego, aby oba wyniki pochodziły z tego samego stanu początkowego.

Trzy części, które wszystkie muszą być spełnione

Wyjście to łańcuch, a najsłabsze ogniwo decyduje o objawie. Poniższa tabela wymienia ogniwa w kolejności, w jakiej zwykle zawodzą.

PartWhere it livesWhat a failure looks like
Forwarding and NATExit node kernel and firewallTraffic arrives, no reply
Managed default routeZeroTier network controllerNo default via the tunnel on the member
Client acceptanceMember's per-network settingRoute offered but not installed
DNS behaviorClient resolver configurationPages fail by name, IP works

Pierwszy wiersz to ten, który ukrywa nazwa opcji. Członek staje się wyjściem dopiero wtedy, gdy jego jądro przekazuje pakiety między interfejsem ZeroTier a interfejsem skierowanym do internetu i gdy ścieżka odpowiedzi jest tłumaczona z powrotem do tunelu. Bez tego przekazywania członek jest partnerem, a nie bramą.

Wiersz kontrolera to upoważnienie, nie konfiguracja. Ogłaszanie 0.0.0.0/0 przez członka mówi każdemu klientowi, gdzie jest wyjście; nie czyni tego członka zdolnym do przenoszenia ruchu. Nie sprawdza też, czy członek ma działającą drogę do internetu. Dokumentacja ZeroTier dotycząca węzła wyjściowego omawia ten sam podział między węzłem, trasą i klientem.

Skonfiguruj węzeł wyjściowy do przekazywania i tłumaczenia

Włącz trwale przekazywanie IPv4, a następnie dodaj NAT źródłowy dla ruchu opuszczającego interfejs WAN. Reguły filtra muszą zezwalać na przekazywany strumień w obu kierunkach, ponieważ przekazywanie i tłumaczenie są niezależne od zgody:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o zt0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Zastąp zt0 i eth0 nazwami na hoście; reguła zapisana dla przykładowego interfejsu nie podąża za pakietami na prawdziwym. Uczyń zmiany trwałymi przez menedżera zapory, który jest właścicielem reguł, ponieważ polecenie w interaktywnej powłoce znika przy następnym rozruchu.

Jeśli host uruchamia menedżera zapory, takiego jak UFW lub firewalld, dodaj reguły przez tego menedżera, zamiast układać wiersze iptables obok niego. Dwóch właścicieli edytujących te same łańcuchy tworzy politykę zależną od kolejności uruchamiania. Kolejność ma znaczenie, gdy menedżer generuje własne łańcuchy. Testuj z klienta po przeładowaniu menedżera, a nie przed.

Ogłoś trasę i zaakceptuj ją na kliencie

Na kontrolerze sieci dodaj trasę zarządzaną dla 0.0.0.0/0, której następnym skokiem jest adres ZeroTier członka wyjściowego. Następnie na członku, który ma jej używać, zezwól na nadpisanie dla tej sieci. Zezwolenie jest lokalne: nie rekonfiguruje innych członków i nie zmienia kontrolera.

zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1

Ostatnie polecenie powinno zgłosić interfejs ZeroTier i adres członka wyjściowego. Jeśli nadal zgłasza interfejs fizyczny, brakuje trasy albo konkurencyjna trasa domyślna ma lepszą metrykę.

Trzymaj ustawienie ograniczone do sieci, która go potrzebuje. Włączenie akceptacji trasy domyślnej globalnie albo w sieci, która powinna udostępniać tylko prywatną podsieć, wysyła ruch przez wyjście, które nigdy nie było do tego wymiarowane.

Zweryfikuj wyjście i sprawdź inne rodziny adresów

Poproś o adres publiczny w usłudze, która zgłasza źródło, i porównaj go z adresem WAN węzła wyjściowego. Następnie wczytaj witrynę po nazwie, aby potwierdzić, że DNS nadal rozwiązuje, i przetestuj jedną ważną aplikację, a nie tylko przeglądarkę.

Klient z podwójnym stosem może nadal używać swojej rodzimej ścieżki IPv6, podczas gdy IPv4 wychodzi przez ZeroTier. Jeśli celem jest ukrycie lub kontrola całego ruchu, potrzebna jest osobna trasa ::/0 i przekazywanie IPv6 na wyjściu, a test IPv4 nic o nich nie mówi.

Odwrotne filtrowanie ścieżki w Linuksie może również odrzucić prawidłowy ruch wyjściowy na kliencie. ZeroTier dokumentuje rozważenie rp_filter dla uczestniczących członków; zmieniaj to ustawienie świadomie i dopiero po potwierdzeniu trasy i NAT, a nie jako pierwszy eksperyment.

Jeśli wymaganiem jest dostęp do NAS lub jednej podsieci biurowej, zarządzana trasa dla tego prefiksu jest mniejszą i bezpieczniejszą zmianą niż pełne wyjście. Przepuszczanie całego przeglądania przez inne urządzenie to inna decyzja niż dotarcie do jednego prywatnego zasobu, i zasługuje na osobną analizę.

Powiązane artykuły