ZeroTier към локална мрежа: правила за маршрутизиране в UFW, а не разрешаване на порт
Разрешаването на порт на шлюза не е същото като препращане към хост зад него. Задайте управлявания маршрут, включете транзита и изберете път за отговора.
Достигането до принтер в офисната локална мрежа през член на ZeroTier звучи като едно правило, а всъщност е три решения на три различни места. Overlay мрежата трябва да знае къде е локалната мрежа, Linux хостът трябва да е готов да препраща пакети, а локалната мрежа трябва да знае как да изпрати отговора обратно. Входящо правило, което отваря порт на шлюза, не засяга нито едно от тези. Това е грешният инструмент, приложен на правилния хост.
Три задачи, три собственика
Управляваният маршрут принадлежи на конфигурацията на ZeroTier мрежата. Той казва на членовете, че даден префикс е достижим през конкретен адрес на член.
Препращането принадлежи на ядрото на Linux и на това, което притежава политиката на защитната му стена. То решава дали пакет, пристигнал по overlay мрежата, ще излезе отново през физическия интерфейс. Хост, който не препраща, ще изхвърли пакета тихо, след като го приеме. Подателят вижда изтичане на времето и в журнала на услугата не се появява нищо.
Пътят за отговора принадлежи на локалната мрежа. Нейните хостове и нейният маршрутизатор трябва да знаят, че префиксът на overlay мрежата е достижим през LAN адреса на вашия шлюз, или нещо трябва да преобразува трафика, така че въпросът изобщо да не възниква.
Всяко от тях може да е правилно, докато другите се провалят, и точно затова тест, който само пингва шлюза, не доказва нищо за услугата зад него.
Насочете управлявания маршрут към члена
Добавете маршрут за желания префикс на локалната мрежа през overlay адреса на шлюза, а не през неговия LAN адрес. Overlay адресът е този, до който другите членове могат да достигнат; LAN адресът има смисъл само по кабела.
Членовете трябва да приемат управлявани маршрути, за да работи схемата, а собствените им локални мрежи не трябва вече да използват префикса, който обявявате. Отдалечен лаптоп, който вкъщи е на 192.168.60.0/24, също не може да маршрутизира 192.168.60.0/24 през overlay мрежата.
Дръжте обявения префикс толкова тесен, колкото задачата позволява. Обявяването на по-голям агрегат, за да повлияете на предпочитанието, може също да заяви адресно пространство, което не притежавате, и полученият конфликт се появява на устройствата, свързани към двете мрежи. То може също да накара член да предпочете път, който не води никъде. Дръжте маршрута честен и оставете политиката да свърши останалото.
Запишете префикса и адреса на члена в същата бележка като правилата на защитната стена, защото най-честата повреда е маршрут, сочещ към грешен член.
Включете транзит в ядрото
Прочетете текущата стойност на препращането, преди да промените нещо, после направете настройката постоянна чрез механизма, който системата ви вече използва, а не чрез еднократна команда, която изчезва при рестарт.
Ако UFW притежава политиката, нейните правила за маршрути са израз на препращане за двойка източник, дестинация и интерфейс. Те са отделни от входящите правила, които отварят услуга на самия шлюз:
sysctl net.ipv4.ip_forward
sudo ufw route allow in on zt3f2a1c9d out on eth0 proto tcp to 192.168.60.20 port 443
sudo ufw status verbose
Името на интерфейса е действителното overlay устройство на този хост и можете да го прочетете от ip link; то не е фиксиран низ при всички инсталации. Ако хостът препраща по подразбиране и UFW не е по пътя, правилото за маршрута ще бъде игнорирано и настройките на ядрото са това, което има значение.
Изберете как се връщат отговорите
При запазване на източника услугата в локалната мрежа вижда истинския overlay адрес и отговаря на него. Това изисква маршрут на хоста в локалната мрежа или на неговия маршрутизатор, който насочва overlay префикса към вашия шлюз, а това е промяна извън Linux машината.
Когато този маршрут не може да бъде добавен, ограниченото преобразуване на източника прави заявката да изглежда, че идва от шлюза в локалната мрежа. Тогава отговорите се връщат локално и не е нужна промяна в маршрутизацията на локалната мрежа, на цената на загубата на оригиналния източник в журналите на услугата.
Ограничете преобразуването до overlay източника и конкретната дестинация в локалната мрежа. Преобразуването на всичко, което напуска LAN интерфейса, е широката версия, която по-късно изненадва всеки, който чете правилата, и също скрива трафик, който е трябвало да бъде блокиран.
Нито един от двата избора не дава непозволен достъп от локалната мрежа обратно към произволни overlay членове. Ако това е нужно, то е отделно правило със собствен преглед.
Тествайте от истински член
Свържете се от друг член, а не от шлюза, и поискайте една разрешена услуга. После опитайте услуга, която трябва да остане затворена, и повторете двата теста след повторно свързване и след рестарт на шлюза.
Член, който съобщава ONLINE, или успешен ping до overlay адреса на шлюза, не потвърждава нито маршрута, нито правилото за препращане, нито пътя за отговора:
zerotier-cli listnetworks
ip -4 route get 192.168.60.20
sudo ufw status numbered
Втората команда показва кой интерфейс ще използва пакетът за хоста в локалната мрежа, а третата — дали правилото за маршрута съществува във формата, който сте имали предвид. Ако и двете изглеждат правилни, а услугата все още изтича, пътят за отговора е останалият заподозрян.