ZeroTier išėjimo mazgas neveikia? Patikrinkite maršrutą, NAT ir klientą
Maršrutas 0.0.0.0/0 kliente dar nėra išėjimas. Mazgas turi persiųsti ir išversti, tinklas turi paskelbti maršrutą, o klientas turi jį priimti.
Maršrutų lentelė rodo numatytąjį maršrutą per ZeroTier sąsają, tinklas praneša esąs prisijungęs, o naršyklė vis tiek išeina per vietinį ISP adresą. Toks derinys dažnas ir tai ne kliento klaida. Numatytasis maršrutas tik nurodo, kur paketai turi eiti; kitame gale kažkas turi juos persiųsti ir išversti. Trys atskiros dalys turi būti teisingos, kad išėjimo mazgas veiktų.
Maršrutas yra, bet niekas neišeina
Pirmiausia patikrinkite kliento maršrutų lentelę. Eilutė kaip default via 10.147.20.5 dev zt0 įrodo, kad maršrutas įdiegtas, o ne kad paskirties vieta priims srautą. Kitas šuolis turi būti narys, pasirengęs ir galintis jį persiųsti.
Jei ta pati užklausa vis dar išeina per fizinę sąsają, klientas maršruto neįdiegė arba įdiegė jį su metrika, kuri pralaimėjo vietiniam numatytajam maršrutui. Jei užklausa dingsta įdiegus maršrutą, išėjimo narys gauna paketus ir nesugeba jų persiųsti ar išversti. Klientas, kuris išlaiko fizinį numatytąjį maršrutą, iš viso nesiunčia paketo į išėjimą.
Šis skirtumas nusprendžia, kur dirbti. Viešojo adreso palyginimas prieš ir po pakeitimo atskiria niekada nenaudotą maršrutą nuo naudoto ir atmesto, ir tam reikia vienos komandos, o ne visos konfigūracijos peržiūros. Palyginimą atlikite prieš ką nors keisdami, kad abu rezultatai būtų iš tos pačios pradinės būsenos.
Trys dalys, kurios visos turi būti teisingos
Išėjimas yra grandinė, o silpniausia grandis nulemia simptomą. Toliau pateiktoje lentelėje grandys išvardytos ta tvarka, kuria jos paprastai nepavyksta.
| 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 |
Pirmoji eilutė yra tai, ką slepia parinkties pavadinimas. Narys tampa išėjimu tik tada, kai jo branduolys persiunčia paketus tarp ZeroTier sąsajos ir į internetą atgręžtos sąsajos, ir kai atsakymo kelias išverčiamas atgal į tunelį. Be to persiuntimo narys yra partneris, o ne tinklo vartai.
Valdiklio eilutė yra leidimas, o ne konfigūracija. 0.0.0.0/0 skelbimas per narį kiekvienam klientui pasako, kur yra išėjimas; tai nepadaro nario pajėgaus pernešti srautą. Tai taip pat nepatikrina, ar narys turi veikiantį kelią į internetą. ZeroTier išėjimo mazgo dokumentacija aptaria tą patį atskyrimą tarp mazgo, maršruto ir kliento.
Sukonfigūruokite išėjimo mazgą persiuntimui ir vertimui
Įjunkite IPv4 persiuntimą visam laikui, tada pridėkite šaltinio NAT srautui, išeinančiam iš WAN sąsajos. Filtro taisyklės turi leisti persiųstą srautą abiem kryptimis, nes persiuntimas ir vertimas yra atskiri nuo leidimo:
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 ACCEPTPakeiskite zt0 ir eth0 pagrindinio kompiuterio vardais; taisyklė, išsaugota pavyzdinei sąsajai, neseks paketų tikroje. Padarykite pakeitimus nuolatinius per ugniasienės valdytoją, kuriam priklauso taisyklės, nes interaktyviame apvalkale duota komanda dingsta per kitą paleidimą.
Jei pagrindinis kompiuteris paleidžia ugniasienės valdytoją, pavyzdžiui, UFW arba firewalld, pridėkite taisykles per tą valdytoją, o ne kraukite iptables eilutes šalia. Du savininkai, redaguojantys tas pačias grandines, sukuria politiką, priklausančią nuo paleidimo tvarkos. Tvarka svarbi, kai valdytojas generuoja savo grandines. Testuokite iš kliento po valdytojo perkrovimo, o ne prieš tai.
Paskelbkite maršrutą ir priimkite jį kliente
Tinklo valdiklyje pridėkite valdomą maršrutą 0.0.0.0/0, kurio kitas šuolis yra išėjimo nario ZeroTier adresas. Tada tame naryje, kuris turėtų jį naudoti, leiskite to tinklo perrašymą. Leidimas yra vietinis: jis neperkonfigūruoja kitų narių ir nekeičia valdiklio.
zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1Paskutinė komanda turėtų pranešti ZeroTier sąsają ir išėjimo nario adresą. Jei ji vis dar praneša fizinę sąsają, maršruto trūksta arba konkuruojantis numatytasis turi geresnę metriką.
Laikykite nustatymą apribotą tinklu, kuriam jo reikia. Numatytojo maršruto priėmimo įjungimas visame pasaulyje arba tinkle, kuris turėtų teikti tik privatų potinklį, siunčia srautą per išėjimą, kuris tam niekada nebuvo matuotas.
Patikrinkite išėjimą ir apžvelkite kitas adresų šeimas
Paprašykite viešo adreso iš paslaugos, kuri praneša šaltinį, ir palyginkite jį su išėjimo mazgo WAN adresu. Tada įkelkite svetainę pagal pavadinimą, kad patvirtintumėte, jog DNS vis dar sprendžiamas, ir išbandykite vieną svarbią programą, o ne tik naršyklę.
Dvigubo kamino klientas gali toliau naudoti savo gimtąjį IPv6 kelią, kol IPv4 išeina per ZeroTier. Jei tikslas yra paslėpti ar valdyti visą srautą, reikia atskiro ::/0 maršruto ir IPv6 persiuntimo išėjime, o IPv4 testas apie juos nieko nesako.
Linux atvirkštinio kelio filtravimas taip pat gali atmesti galiojantį išėjimo srautą kliente. ZeroTier dokumentuoja rp_filter svarstymą dalyvaujantiems nariams; keiskite tą nustatymą sąmoningai ir tik patvirtinus maršrutą bei NAT, o ne kaip pirmą eksperimentą.
Jei reikalavimas yra prieiga prie NAS ar vieno biuro potinklio, to prefikso valdomas maršrutas yra mažesnis ir saugesnis pakeitimas nei visas išėjimas. Viso naršymo siuntimas per kitą įrenginį yra kitoks sprendimas nei pasiekti vieną privatų išteklių, ir jis nusipelno atskiros peržiūros.