VPN uchun Linux tarmoq nom fazolari: ular nimani izolyatsiya qilmaydi
Nom fazosi interfeyslarni, marshrutlarni va soketlarni ko’chiradi, fayllar yoki hisoblarni emas. VPN o’z netns ichida nimani qamrab olishi va trafik hali qayerdan chiqib ketishi shu yerda.
VPN ni o’z nom fazosi ichida ishga tushiring, u yerda bitta ilovani ishga tushiring, trafik esa baribir xost marshruti orqali chiqadi. Hech narsa buzilmagan: nom fazosi faqat unga kiradigan jarayonlarni boshqaradi, oqish esa hech qachon kirmagan jarayondan keldi. Interfeyslar, manzillar, marshrutlar, xavfsizlik devori qoidalari va soketlar nom fazosi egalik qiladigan narsalardir. Fayllar, hisoblar va allaqachon ishlab turgan xizmatlar unday emas, va aksariyat kutilmagan holatlar shu yerdan keladi.
Nom fazosi nimaga egalik qiladi va soket qayerda tug’iladi
Interfeysni nom fazosiga ko’chiring va xost uni yo’qotadi; ichida tunnel quring va xost uni ko’ra olmaydi. Bu nom fazosi bilan chegaralangan VPN mexanizmi: qurilma va unga ishora qiluvchi marshrutlar faqat tanlangan jarayonlar yeta oladigan kontekstda yashaydi. Xost o’z standart marshrutini saqlaydi, shuning uchun tashqaridagi hamma narsa daxlsiz qoladi.
WireGuard uchun yaratish konteksti joriy joylashuv kabi muhim: UDP soketi interfeys yaratilgan nom fazosida bog’lanadi, qurilma boshqa joyga ko’chganidan keyin ham. Shifrlangan paketlar qaysi marshrutlash jadvaliga amal qilishi o’sha tug’ilgan joyga bog’liq. Soket tengdoshlariga marshrut bo’lmagan kontekstda qolsa, interfeys qidiradi va kelishuv hech qachon tashqariga chiqmaydi. Avval uning tug’ilgan joyini, keyin joriy joylashuvini tekshiring.
Nom fazosi nimani izolyatsiya qilmaydi
Bu yerda hech narsa fayl tizimlarini, hisoblarni yoki sirlarni ajratmaydi, va bu chegaralarning hech biri siz nom fazosi yaratganingiz uchun paydo bo’lmaydi. Resolver konfiguratsiyasi fayl, shuning uchun ichkaridagi jarayon hali ham xost resolveriga ishora qiluvchi sozlamani o’qib, so’rovini shu anglatadigan marshrut orqali tashqariga yuborishi mumkin. So’rovni allaqachon ishlab turgan broker yoki tizim xizmatiga topshiruvchi ilova butunlay boshqa kontekstdagi jarayonni jalb qiladi. Ikkalasi ham chegara hech qachon javob berish uchun mo’ljallanmagan so’rovlardir.
Yechim /etc/netns/<name>/resolv.conf da har bir nom fazosi uchun fayl, yoki tayyorlangan faylning bind mount’i bo’lib, ichkaridan yetish mumkin bo’lgan resolverga qaratilgan. Xostda /etc/resolv.conf ni tahrirlash nom fazosi ko’radigan hech narsani o’zgartirmaydi.
Jarayonlarni joylashtirish — bu nazorat
Siz oladigan izolyatsiya aynan ichkarida ishga tushirgan jarayonlarning izolyatsiyasidir. Nom fazosining exec yordamchisi orqali ishga tushirilgan shell va u yaratgan barcha narsa ichkarida qoladi; xost sessiyasidan ishga tushirilgan ish stoli ilovasi qolmaydi. Kontekstni yarating, qurilmani ko’chiring, keyin ikkala tomonni isbotlang:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Nom fazosi ichidan birinchi wg show ni, xostdan ikkinchisini o’qing va faqat bittasi tengdoshni ro’yxatga olishini kuting. Ikkisi ham shunday qilsa, qurilma hech qachon ko’chmagan; hech biri qilmasa, u boshqa joyga ketgan. Ishga tushiruvchi xizmat menejeri bo’lsa, tahrirlanadigan narsa unit fayli, ish stoli yorlig’i emas. Nom fazosi sozlamasi bo’lmagan unit demonni xost kontekstida ishga tushirib, dizaynni jimgina bekor qiladi.
Ilova kontekstidan sinab ko’ring
Tekshiruvni ilova ishlatadigan bir xil binar va bir xil foydalanuvchi bilan nom fazosi ichida bajaring. DNS va ikkala manzil oilasini ham kiriting, chunki siz hech o’ylamagan IPv6 marshruti chiqishning odatiy yo’lidir. O’z shellingizdan qilingan sinov faqat shellingiz izolyatsiya qilinganini isbotlaydi.
Keyin xuddi shu tekshiruvni xostda bajaring va javoblar farq qilishiga ishonch hosil qiling: ichkarida tunnel manzili va mo’ljallangan chiqish, tashqarida xost marshruti va ofis chiqishi, va resolver nomi bilan. Nom fazolarini protokolga emas, joylashtirishga qarab nomlang, tozalash skripti ikkitasini aralashtirmasin.
Yo’naltirish, nosozlik siyosati va tozalash
Shlyuz uchun yo’naltirishni ataylab yoqing va tunnel yiqilganda nima bo’lishi kerakligini hal qiling. Nom fazosi ichida o’rnatgan marshrutlaringizni to’smaydi, shuning uchun xostga zaxira marshrut yaratsangiz, u ishlatiladi. Bu siyosiy qaror va uni uzilish sinab ko’rishidan oldin yozib qo’yish kerak.
Nom fazolari nomlarini, interfeyslarni va konfiguratsiya kimga tegishli ekanini yozib qo’ying, tozalash faqat joylashtirish yaratgan narsani olib tashlasin. Orqaga qaytarish paytida xost tarmog’ini qayta o’rnatish tozalashni uzilishga aylantiradi. network_namespaces(7) sahifasi qisqa va bu yo’lni loyihalashdan oldin o’qishga arziydi.