Tailscale quyi tarmog'i SNAT o'chirilgandan keyin bir tomonlama trafik
Tailscale quyi tarmog'i routerida SNAT'ni o'chiring, javoblar kelishdan to'xtaydi. Haqiqiy manba manzili saqlanadi, shuning uchun LAN'ga 100.64.0.0/10 tomon qaytish marshruti kerak.
Tailscale quyi tarmog'i routerida manba NAT'ni o'chiring, tunnel ishlashda davom etadi, ammo u orqali o'tuvchi ulanishlar to'xtaydi. So'rovlar manzilga uzoq mijozning o'z overlay manzili bilan yetib boradi, bu esa o'zgarishning maqsadi, va javoblarga endi LAN hech qachon bilmasligi kerak bo'lgan yo'l kerak. O'sha yo'l bo'lmasa paketlar qo'nadi, javoblar oddiy shlyuz orqali chiqadi va nosozlik hech bir firewall qoidasi tushuntirmaydigan firewall muammosi bo'lib ko'rinadi. Tunnel sog'lom; qaytish qismi yo'q.
SNAT nimani yashirgan edi
SNAT yoqilganda router quyi tarmoqqa uzatishdan oldin manba manzilini o'zining LAN manziliga qayta yozadi, shuning uchun manzil allaqachon qanday yetib borishni biladigan xostga javob beradi va boshqa hech narsani sozlash kerak emas. Uni o'chirish asl manbani saqlaydi, manzil esa o'z simidagi qo'shnisining o'rniga overlay diapazoni ichidagi manzilni ko'radi. Bu manzil haqiqiy va tailnet bo'ylab marshrutlanadi, ammo LAN'dan standart shlyuz orqali unga yetib bo'lmaydi. Hujjatlashtirilgan kalit --snat-subnet-routes=false bo'lib, u Linux quyi tarmoq routerining o'ziga qo'llaniladi.
Bu har bir paket uchun kalit emas, doimiy sozlama, shuning uchun qaytish yo'li o'sha router xizmat ko'rsatadigan har bir manzil tarmog'i uchun mavjud bo'lishi kerak. Aynan shu o'zgarishni katakcha emas, joylashtirish qaroriga aylantiradi. O'sha router xizmat ko'rsatadigan hamma narsa talabni o'sha daqiqada meros oladi.
Qaytish yo'li qayerda bo'lishi mumkin
Uch joylashuv odatiy bo'lib, ular to'g'rilikda emas, qamrovda farqlanadi. Manzil xostidagi statik marshrut eng to'g'ridan-to'g'ri va eng kam kengaytiriladigan, chunki har bir qurilma o'z nusxasini talab qiladi. VPC yoki sayt routeridagi marshrut jadvali butun tarmoqni bir vaqtda qamrab oladi, sinfsiz statik marshrutlarni olib yuruvchi DHCP varianti mijozlarga avtomatik yetib boradi, ammo uni e'tiborsiz qoldiradigan qurilmalarda jimgina muvaffaqiyatsizlikka uchraydi.
ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5
Qaysi joylashuvni tanlasangiz ham, keyingi sakrash routerning LAN manzili va hech qachon uning tailnet manzili emas. LAN xosti bu marshrutga ega bo'lmaguncha overlay'ga yeta olmaydi, shuning uchun overlay ichidagi keyingi sakrash aylana bo'lib, paketni hech qayerga yubormaydi. Aynan shu bitta xato to'g'ri ko'rinib, baribir muvaffaqiyatsizlikka uchraydigan konfiguratsiyalarning ko'pini tushuntiradi va faqat routerning o'z jadvalini o'qiydigan har qanday tekshiruvdan o'tib ketadi. Qaysi joylashuvdan foydalanganingizni yozib qo'ying, aks holda keyingi odam noto'g'risini sinab ko'radi.
Nosozlikni bir tomonlama trafik sifatida o'qish
Alomat sababdan ko'ra osonroq taniladi: xizmat routerning o'zida javob beradi va uzoq mijozdan jim turadi. Manzildagi yozib olish so'rovlar kelayotganini va javoblar ketayotganini ko'rsatadi, bu esa o'sha javoblar qayerga ketayotganini payqamaguningizcha muvaffaqiyatdek ko'rinadi. Ular standart shlyuzga ketmoqda, ya'ni kirish qismi ishlagan, qaytish qismi esa yo'q.
Buning o'rniga routerda yozib oling, chunki u bitta almashinuvning ikkala yo'nalishini ko'radi va javob umuman kelganini ko'rsatadi. Agar javob manzilda ko'rinib, routerda hech qachon ko'rinmasa, marshrut manzil tomonida yo'q yoki noto'g'ri. Agar u routerda ko'rinib, o'sha yerda to'xtasa, muammo narida va boshqa tekshiruvga tegishli.
sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5
Haqiqiy manzil marshrutga arziydimi
Manzil tarmog'ini qayta sozlash imkoni bo'lmaganda SNAT'ni saqlash soddaroq javob bo'lib qoladi, narxi esa har bir mijoz manzilning jurnallari va siyosatida routerga o'xshab ko'rinadi. Uni o'chirish dastur haqiqiy manba manziliga muhtoj bo'lganda yoki tarmoq siyosati bitta routerni baham ko'radigan mijozlarni ajratishi kerak bo'lganda asosli. Ikkalasi ham qonuniy sabab va hech biri bepul emas. Foyda har bir manzil tarmog'ida marshrutni saqlashga, qo'shimcha ravishda quyida tasvirlangan firewall ko'rigiga arziydi.
Bitta kichik LAN uchun almashinuv odatda o'zini oqlaydi, statik marshrutni qabul qila olmaydigan qurilmalar ko'pligi uchun odatda yo'q. Qaror va sababni router konfiguratsiyasi yoniga yozib qo'ying, keyingi administrator qaysi xatti-harakat ataylab qilinganini bilsin. Hech kim yozmagan standart e'tiborsizlikdan ajralib turmaydi.
Firewall, jurnal va ikki tomonlama rol
Routerning LAN manziliga mos kelgan har bir qoida endi boshqa manbaga mos keladi, bunga ruxsat qoidalari va routerni mijoz sifatida qayd etgan har qanday jurnal maydoni kiradi. O'sha qoidalarni birinchi sinovdan oldin o'qing, birinchi muvaffaqiyatsizlikdan keyin emas, chunki faqat router manziliga ruxsat beruvchi qoida yangi manbani butunlay bloklaydi. Almashtirishni kerakli mijozlar va portlar bilan cheklang, so'ng uning butun tailnet'ni jimgina qabul qilmasligini tasdiqlang.
sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'
Bitta tugun bir vaqtda chiqish tuguni va quyi tarmoq routeri bo'lib xizmat qilishi hujjatlashtirilgan birikma bo'lib, u quyi tarmoq SNAT o'chirilgandan keyin yuqori oqim trafigini tushirib yuborishi mumkin. Bu rollarni turli tugunlarga ajratish ogohlantirishni yo'q qiladi va har bir marshrut va firewall siyosatiga bitta egasini beradi. Agar rollar birga qolishi kerak bo'lsa, bu xatti-harakatni kuting va mijozni ayblashdan oldin uni sinab ko'ring. Marshrut, kalit sozlamasi va rol taqsimotini bitta eslatmada saqlang, chunki keyingi ulanish muvaffaqiyatsiz bo'lganda ular birga o'qiladi.