Таблицата за маршрутизация показва маршрут по подразбиране през интерфейса 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 или една офис подмрежа, управляван маршрут за този префикс е по-малка и по-безопасна промяна от пълен изход. Прекарването на целия браузър трафик през друго устройство е различно решение от достигането до един частен ресурс и заслужава отделен преглед.

Подобни статии