ZeroTier-utgångsnoden fungerar inte? Kontrollera rutt, NAT och klient
En 0.0.0.0/0-rutt i klienten är inte en utgång. Noden måste vidarebefordra och översätta, nätverket måste annonsera rutten och klienten måste acceptera den.
Rutttabellen visar en standardrutt via ZeroTier-gränssnittet, nätverket rapporterar online och webbläsaren går fortfarande ut via den lokala ISP-adressen. Den kombinationen är vanlig och det är inte ett fel i klienten. En standardrutt säger bara vart paketen ska gå; något måste vidarebefordra och översätta dem i andra änden. Tre separata delar måste stämma innan en utgångsnod fungerar.
Rutten finns men inget går ut
Kontrollera klientens rutttabell först. En rad som default via 10.147.20.5 dev zt0 bevisar att rutten installerades, inte att målet tar emot trafiken. Nästa hopp måste vara en medlem som är villig och kapabel att vidarebefordra den.
Om samma förfrågan fortfarande går ut via det fysiska gränssnittet installerade klienten inte rutten, eller installerade den med ett mått som förlorade mot den lokala standardrutten. Om förfrågan försvinner efter att rutten installerats tar utgångsmedlemmen emot paket och lyckas inte vidarebefordra eller översätta dem. En klient som behåller den fysiska standardrutten skickar inte ett enda paket till utgången.
Den skillnaden avgör var arbetet ska göras. Att jämföra en offentlig adress före och efter ändringen skiljer en rutt som aldrig användes från en som användes och sedan kastades, och det kräver ett kommando i stället för en genomgång av hela konfigurationen. Gör jämförelsen innan du ändrar något annat, så att båda resultaten kommer från samma utgångsläge.
Tre delar som alla måste stämma
En utgång är en kedja och den svagaste länken bestämmer symptomet. Tabellen nedan listar länkarna i den ordning de vanligtvis fallerar.
| Part | Where it lives | What a failure looks like |
|---|---|---|
| Forwarding and NAT | Exit node kernel and firewall | Traffic arrives, no reply |
| Managed default route | ZeroTier network controller | No default via the tunnel on the member |
| Client acceptance | Member's per-network setting | Route offered but not installed |
| DNS behavior | Client resolver configuration | Pages fail by name, IP works |
Den första raden är den som inställningens namn döljer. En medlem blir först en utgång när dess kärna vidarebefordrar paket mellan ZeroTier-gränssnittet och gränssnittet som vetter mot internet, och när returvägen översätts tillbaka till tunneln. Utan den vidarebefordran är medlemmen en peer, inte en gateway.
Kontrollraden är auktorisering, inte konfiguration. Att annonsera 0.0.0.0/0 via en medlem talar om för varje klient var utgången finns; det gör inte medlemmen kapabel att bära trafiken. Det verifierar inte heller att medlemmen har en fungerande väg till internet. ZeroTiers dokumentation om utgångsnoden täcker samma uppdelning mellan nod, rutt och klient.
Konfigurera utgångsnoden att vidarebefordra och översätta
Aktivera IPv4-vidarebefordran permanent och lägg sedan till käll-NAT för trafik som lämnar WAN-gränssnittet. Filterreglerna måste tillåta det vidarebefordrade flödet i båda riktningarna, eftersom vidarebefordran och översättning är skilda från tillstånd:
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 ACCEPTErsätt zt0 och eth0 med namnen på värden; en regel sparad för ett exempelgränssnitt följer inte paket på ett riktigt. Gör ändringarna beständiga via brandväggshanteraren som äger reglerna, eftersom ett kommando i ett interaktivt skal försvinner vid nästa omstart.
Om värden kör en brandväggshanterare som UFW eller firewalld, lägg till reglerna via den hanteraren i stället för att stapla iptables-rader bredvid. Två ägare som redigerar samma kedjor skapar en policy som beror på startordningen. Ordningen spelar roll när hanteraren genererar sina egna kedjor. Testa från en klient efter att hanteraren laddats om, inte före.
Annonsera rutten och acceptera den på klienten
Lägg på nätverkskontrollern till en hanterad rutt för 0.0.0.0/0 vars nästa hopp är utgångsmedlemmens ZeroTier-adress. Tillåt sedan på medlemmen som ska använda den överskridningen för det nätverket. Tillståndet är lokalt: det konfigurerar inte om andra medlemmar och ändrar inte kontrollern.
zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1Det sista kommandot bör rapportera ZeroTier-gränssnittet och utgångsmedlemmens adress. Om det fortfarande rapporterar det fysiska gränssnittet saknas rutten, eller så har en konkurrerande standardrutt bättre mått.
Håll inställningen begränsad till nätverket som behöver den. Att aktivera acceptans av standardrutten globalt, eller på ett nätverk som bara ska tillhandahålla ett privat subnät, skickar trafik genom en utgång som aldrig dimensionerades för det.
Verifiera utgången och kontrollera de andra adressfamiljerna
Begär en offentlig adress från en tjänst som rapporterar källan och jämför den med utgångsnodens WAN-adress. Ladda sedan en namngiven webbplats för att bekräfta att DNS fortfarande löser ut, och testa en viktig applikation i stället för bara en webbläsare.
En klient med dubbel stack kan fortsätta använda sin egen IPv6-väg medan IPv4 går ut via ZeroTier. Om målet är att dölja eller kontrollera all trafik krävs en separat ::/0-rutt och IPv6-vidarebefordran på utgången, och ett IPv4-test säger ingenting om dem.
Linux omvända ruttfiltrering kan också släppa giltig utgångstrafik på klienten. ZeroTier dokumenterar en rp_filter-övervägande för deltagande medlemmar; ändra den inställningen medvetet och först efter att rutten och NAT bekräftats, inte som första experiment.
Om kravet är åtkomst till en NAS eller ett kontorssubnät är en hanterad rutt för det prefixet en mindre och säkrare ändring än en full utgång. Att skicka all surf via en annan enhet är ett annat beslut än att nå en privat resurs, och det förtjänar en separat genomgång.