Табліца маршрутызацыі паказвае маршрут па змаўчанні праз інтэрфейс ZeroTier, сетка паведамляе, што анлайн, а браўзер усё яшчэ выходзіць з лакальнага адрасу пастаўшчыка. Такое спалучэнне сустракаецца часта, і гэта не памылка кліента. Маршрут па змаўчанні толькі паказвае, куды павінны ісці пакеты; на іншым канцы нешта мусіць іх перасылаць і пераўтвараць. Тры асобныя часткі павінны быць праўдзівымі, перш чым вузел выхаду запрацуе.

Маршрут ёсць, але нічога не выходзіць

Спачатку праверце табліцу маршрутызацыі кліента. Радок накшталт default via 10.147.20.5 dev zt0 даказвае, што маршрут усталяваны, а не тое, што прызначэнне прыме трафік. Наступны крок мусіць быць удзельнікам, які хоча і можа яго пераслаць.

Калі той жа запыт па-ранейшаму выходзіць праз фізічны інтэрфейс, кліент не ўсталяваў маршрут або ўсталяваў яго з метрыкай, якая прайграла лакальнаму маршруту па змаўчанні. Калі запыт знікае пасля ўсталявання маршруту, вузел выхаду атрымлівае пакеты і не можа іх пераслаць або пераўтварыць. Кліент, які захоўвае фізічны маршрут па змаўчанні, наогул не адпраўляе пакетаў на выхад.

Гэта адрозненне вызначае, дзе працаваць. Параўнанне публічнага адрасу да і пасля змены аддзяляе маршрут, які ніколі не выкарыстоўваўся, ад таго, які выкарыстоўваўся і быў скінуты, і патрабуе адной каманды замест агляду ўсёй канфігурацыі. Зрабіце параўнанне, перш чым змяняць што-небудзь яшчэ, каб абодва вынікі былі з аднаго пачатковага стану.

Тры часткі, якія павінны быць праўдзівымі

Выхад — гэта ланцуг, і самае слабае звяно вызначае сімптом. Табліца ніжэй пералічвае звёны ў парадку, у якім яны звычайна адмаўляюць.

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

Першы радок — гэта тое, што хавае назва опцыі. Удзельнік становіцца выхадам толькі тады, калі яго ядро перасылае пакеты паміж інтэрфейсам ZeroTier і інтэрфейсам, звернутым у інтэрнэт, і калі шлях адказу пераўтвараецца назад у тунель. Без гэтай перасылкі ўдзельнік — гэта партнёр, а не шлюз.

Радок кантролера — гэта дазвол, а не канфігурацыя. Аб'ява 0.0.0.0/0 праз удзельніка паведамляе кожнаму кліенту, дзе знаходзіцца выхад; гэта не робіць удзельніка здольным несці трафік. Гэта таксама не правярае, што ў удзельніка ёсць працоўны шлях у інтэрнэт. Дакументацыя ZeroTier пра вузел выхаду ахоплівае тое ж размежаванне паміж вузлом, маршрутам і кліентам.

Наладзьце вузел выхаду для перасылкі і пераўтварэння

Уключыце перасылку IPv4 пастаянна, затым дадайце трансляцыю адрасу крыніцы NAT для трафіку, які пакідае інтэрфейс WAN. Правілы фільтра павінны дазваляць перасланы паток у абодвух напрамках, бо перасылка і пераўтварэнне асобныя ад дазволу:

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

Замяніце zt0 і eth0 на імёны на хосце; правіла, захаванае для прыкладнага інтэрфейсу, не будзе прытрымлівацца пакетаў на рэальным. Зрабіце змены пастаяннымі праз кіраўнік брандмаўэра, які валодае правіламі, бо каманда ў інтэрактыўнай абалонцы знікае пры наступнай перазагрузцы.

Калі на хосце працуе кіраўнік брандмаўэра, напрыклад UFW або firewalld, дадайце правілы праз гэты кіраўнік замест таго, каб ставіць радкі iptables побач. Два ўладальнікі, якія рэдагуюць адныя і тыя ж ланцугі, ствараюць палітыку, залежную ад парадку загрузкі. Парадак важны, калі кіраўнік генераваць свае ўласныя ланцугі. Тэстуйце з кліента пасля перазагрузкі кіраўніка, а не да.

Аб'явіце маршрут і прыміце яго на кліенце

На кантролеры сеткі дадайце кіраваны маршрут для 0.0.0.0/0, наступны крок якога — адрас ZeroTier удзельніка выхаду. Затым на ўдзельніку, які павінен яго выкарыстоўваць, дазвольце перавызначэнне для гэтай сеткі. Дазвол лакальны: ён не пераканфігуруе іншых удзельнікаў і не змяняе кантролер.

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

Апошняя каманда павінна паказаць інтэрфейс ZeroTier і адрас удзельніка выхаду. Калі яна па-ранейшаму паказвае фізічны інтэрфейс, маршрут адсутнічае або канкуруючы маршрут па змаўчанні мае лепшую метрыку.

Трымайце наладку ў межах сеткі, якой яна патрэбна. Уключэнне прыняцця маршруту па змаўчанні глабальна або ў сетцы, якая павінна даваць толькі прыватную падсетку, накіроўвае трафік праз выхад, які ніколі не разлічваўся на гэта.

Праверце выхад і іншыя сямействы адрасоў

Запытайце публічны адрас у сэрвісе, які паведамляе крыніцу, і параўнайце яго з WAN-адрасам вузла выхаду. Затым загрузіце сайт па назве, каб пацвердзіць, што DNS па-ранейшаму разрозніваецца, і праверце адну важную праграму, а не толькі браўзер.

Кліент з падвойным стэкам можа працягваць выкарыстоўваць свой родны шлях IPv6, пакуль IPv4 выходзіць праз ZeroTier. Калі мэта — схаваць або кантраляваць увесь трафік, патрабуюцца асобны маршрут ::/0 і перасылка IPv6 на выхадзе, а тэст IPv4 нічога пра іх не кажа.

Зваротная фільтрацыя шляху ў Linux таксама можа скідаць сапраўдны трафік выхаду на кліенце. ZeroTier дакументуе меркаванне пра rp_filter для ўдзельнікаў; змяняйце гэтую наладку свядома і толькі пасля пацверджання маршруту і NAT, а не як першы эксперымент.

Калі патрэба — доступ да NAS або адной офіснай падсеткі, кіраваны маршрут для гэтага прэфіксу — менш рызыкоўная і больш бяспечная змена, чым поўны выхад. Праводзіць усё агляданне праз іншую прыладу — іншае рашэнне, чым дасягнуць аднаго прыватнага рэсурсу, і яно заслугоўвае асобнага агляду.

Падобныя артыкулы