Tailscale дэд сүлжээний маршрутлагч дээр эх NAT-ыг унтраахад туннель үргэлжлүүлэн ажиллах боловч түүгээр дамжих холболтууд зогсоно. Хүсэлтүүд хүрэх газарт алслагдсан клиентийн өөрийн overlay хаягтай ирдэг бөгөөд энэ нь өөрчлөлтийн утга учир, мөн хариултуудад одоо LAN-ийн хэзээ ч мэдэх шаардлагагүй байсан зам хэрэгтэй. Тэр зам байхгүй бол багцууд газардаж, хариултууд энгийн гарцаар гарч, алдаа нь ямар ч firewall дүрмээр тайлбарлагдахгүй firewall асуудал мэт харагдана. Туннель эрүүл; буцах хэсэг дутуу байна.

SNAT юуг нууж байсан бэ

SNAT идэвхтэй үед маршрутлагч дэд сүлжээ рүү дамжуулахаас өмнө эх хаягийг өөрийн LAN хаягаар дахин бичдэг тул хүрэх газар нь аль хэдийн хэрхэн хүрэхээ мэддэг хост руу хариулдаг бөгөөд өөр юу ч тохируулах шаардлагагүй. Үүнийг унтраахад анхны эх хадгалагдаж, хүрэх газар нь өөрийн утсан дээрх хөршийн оронд overlay мужийн доторх хаягийг харна. Тэр хаяг бодитой бөгөөд tailnet даяар маршрутлагдах боловч LAN-аас анхдагч гарцаар хүрэх боломжгүй. Баримтжуулсан унтраалга нь --snat-subnet-routes=false бөгөөд Linux дэд сүлжээний маршрутлагч өөрт нь хэрэглэгддэг.

Энэ нь багц бүрийн унтраалга биш, байнгын тохиргоо тул буцах зам нь тухайн маршрутлагчийн үйлчилдэг хүрэх газар бүрийн сүлжээнд байх ёстой. Чухам иймээс өөрчлөлт нь чагтлах хайрцаг биш, байршуулалтын шийдвэр болдог. Тэр маршрутлагчийн үйлчилдэг бүхэн энэ шаардлагыг яг тэр мөчид өвлөн авна.

Буцах зам хаана байж болох вэ

Гурван байршил нийтлэг бөгөөд тэдгээр нь зөв байдлаараа биш, хүрээгээрээ ялгаатай. Хүрэх газрын хост дээрх статик маршрут нь хамгийн шууд бөгөөд хамгийн бага өргөжих чадвартай, учир нь төхөөрөмж бүр өөрийн хуулбар хэрэгтэй. VPC эсвэл сайтын маршрутлагч дахь маршрутын хүснэгт бүхэл сүлжээг нэг дор хамардаг бол ангилалгүй статик маршрут зөөдөг DHCP сонголт клиентүүдэд автоматаар хүрдэг ч үүнийг үл тоомсорлодог төхөөрөмжүүд дээр чимээгүй бүтэлгүйтдэг.

ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5

Аль ч байршлыг сонгосон ч дараагийн үсрэлт нь маршрутлагчийн LAN хаяг бөгөөд хэзээ ч түүний tailnet хаяг биш. LAN хост энэ маршрутгүйгээр overlay-д хүрч чадахгүй тул overlay доторх дараагийн үсрэлт нь тойрог бөгөөд багцыг хаашаа ч илгээхгүй. Энэ ганц алдаа нь зөв харагдаж байгаад бүтэлгүйтдэг ихэнх тохиргоог тайлбарладаг бөгөөд зөвхөн маршрутлагчийн өөрийн хүснэгтийг уншдаг аливаа шалгалтаас амьд гардаг. Аль байршлыг ашигласнаа бичээрэй, эс бөгөөс дараагийн хүн буруугааг нь туршина.

Алдааг нэг чиглэлийн урсгал гэж унших

Шинж тэмдгийг шалтгаанаас илүү амархан танина: үйлчилгээ маршрутлагч дээр өөрөө хариулдаг боловч алслагдсан клиентээс дуугүй байна. Хүрэх газар дээрх бичлэг хүсэлтүүд ирж, хариултууд явж байгааг харуулдаг бөгөөд тэдгээр хариулт хаашаа явж байгааг анзаарах хүртэл амжилт мэт харагдана. Тэдгээр нь анхдагч гарц руу явж байгаа нь орох хэсэг ажилласан, буцах хэсэг ажиллаагүй гэсэн үг.

Харин маршрутлагч дээр бичээрэй, учир нь тэр нэг солилцооны хоёр чиглэлийг харж, хариулт ер нь ирсэн эсэхийг харуулна. Хэрэв хариулт хүрэх газар дээр гарч, маршрутлагч дээр хэзээ ч гарахгүй бол маршрут хүрэх талд дутуу эсвэл буруу байна. Хэрэв маршрутлагч дээр гарч, тэнд зогсвол асуудал цааш байгаа бөгөөд өөр мөрдөн шалгалтад хамаарна.

sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5

Жинхэнэ хаяг маршрутад үнэ цэнэтэй юу

Хүрэх газрын сүлжээг дахин тохируулах боломжгүй үед SNAT-ыг хадгалах нь илүү энгийн хариулт хэвээр байх бөгөөд үнэ нь клиент бүр хүрэх газрын лог, бодлогод маршрутлагч мэт харагдах явдал юм. Үүнийг унтраах нь програмд жинхэнэ эх хаяг хэрэгтэй үед эсвэл сүлжээний бодлого нэг маршрутлагчийг хуваалцдаг клиентүүдийг ялгах шаардлагатай үед үндэслэлтэй. Хоёулаа хууль ёсны шалтгаан бөгөөд аль нь ч үнэгүй биш. Ашиг нь хүрэх газар бүрийн сүлжээнд маршрут хадгалах, дээр нь доор тайлбарласан firewall-ийн хяналтад үнэ цэнэтэй байх ёстой.

Нэг жижиг LAN-д энэ солилцоо ихэвчлэн үр дүнтэй байдаг бол статик маршрут авч чадахгүй төхөөрөмжүүдийн олонлогт ихэвчлэн үр дүнгүй. Шийдвэр, шалтгааныг маршрутлагчийн тохиргооны хажууд бичээрэй, дараагийн администратор аль зан үйл санаатай болохыг мэдэх болно. Хэн ч бичээгүй анхдагч утгыг хайхрамжгүй байдлаас ялгах боломжгүй.

Firewall, лог, хос үүрэг

Маршрутлагчийн LAN хаягтай таарч байсан дүрэм бүр одоо өөр эхтэй таарч байгаа бөгөөд үүнд зөвшөөрлийн дүрэм, маршрутлагчийг клиент гэж бүртгэсэн аливаа лог талбар багтана. Тэдгээр дүрмийг эхний туршилтын өмнө уншаарай, эхний бүтэлгүйтлийн дараа биш, учир нь зөвхөн маршрутлагчийн хаягийг зөвшөөрдөг дүрэм шинэ эхийг бүрэн блоклодог. Орлуулалтыг хэрэгтэй клиент, порт хүртэл нарийсгаад, дараа нь бүхэл tailnet-ийг чимээгүй нэвтрүүлэхгүй байгааг баталгаажуулна уу.

sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'

Нэг зангилаа нэгэн зэрэг гарах зангилаа ба дэд сүлжээний маршрутлагч байх нь баримтжуулсан хослол бөгөөд дэд сүлжээний SNAT унтарсны дараа дээш чиглэлийн урсгалыг унагаж болно. Эдгээр үүргийг өөр өөр зангилаанд салгах нь тэр анхааруулгыг арилгаж, маршрут, firewall бодлого бүрт нэг эзэн өгдөг. Хэрэв үүргүүд хамт байх ёстой бол энэ зан үйлийг хүлээж, клиентийг буруутгахын өмнө туршиж үзээрэй. Маршрут, унтраалгын тохиргоо, үүргийн хуваарилалтыг нэг тэмдэглэлд хадгаарай, учир нь дараагийн холболт бүтэлгүйтэхэд тэдгээрийг хамт уншдаг.

Холбоотой нийтлэлүүд