Oddiy Linux ilovasi TUN-ga tegmasdan VPN ishlatadi
Daemon TUN qurilmasi va tunnelga ega; ilovalar faqat soket ochadi. Sozlash imtiyozi va tarmoqqa kirishni alohida chegaralar sifatida saqlang.
O'rnatilgan Linux VPN-dan foydalanadigan brauzer /dev/net/tun ni ochmaydi. U soket ochadi va o'sha soket paketlari qaysi interfeysdan chiqishini yadro hal qiladi. Tunnelni yaratgan jarayon o'zi tashiydigan trafik jarayonidan boshqa ish qiladi. Bu ikki rolni alohida saqlash ruxsat haqidagi ko'p savollarga ular berilishidan oldin javob beradi.
Soketdan tunnelgacha bitta paketni kuzatib boring
Oddiy ilova connect yoki send chaqiradi va yadro manzil uchun marshrut qidiradi. Agar tanlangan marshrut tunnel interfeysiga ishora qilsa, paket VPN daemoni o'qiydigan qurilma navbatiga qo'yiladi. Daemon uni shifrlaydi va jismoniy interfeys orqali tashqariga yuboradi. Bu tavsifdagi har bir strelka ruxsat savoliga javob berish mumkin bo'lgan joydir.
Bu yo'lda hech narsa ilovadan qurilmani bilishni talab qilmaydi. Daemon fayl deskriptorini ushlab turadi va interfeys amallarini bajaradi, ilova esa faqat oddiy tarmoq API sini ko'radi.
Ikki yarmini bir marta chizing, shunda ruxsat savollarini joylashtirish osonlashadi. Yuqori yarmi ilovalar dunyosi, pastki yarmi esa daemonniki.
Qurilma kimga kerak va kimga kerak emasligini hal qiling
TUN interfeysini yaratish yoki unga ulanib olish qurilmaga kirish va qo'shimcha uni sozlash qobiliyatini talab qiladi, shuning uchun qo'llab-quvvatlanadigan VPN xizmati tarmoq boshqaruvi vakolati bilan boshlanadi yoki imtiyozli yordamchidan foydalanadi. Bu talab daemonga tegishli. U brauzer, ma'lumotlar bazasi mijozi yoki fayl uzatish vositasi haqida hech narsa demaydi. Bu qobiliyat kerak bo'lgan xizmat uni o'z sozlash bosqichi uchun talab qiladi, mijozlari uchun emas.
Marshrut va siyosat joyida bo'lgach, oddiy jarayon hosil bo'lgan yo'lni odatdagi soket chaqiruvlari orqali ishlatadi. U qurilma tuguniga muhtoj emas va root ham kerak emas.
Qurilma ruxsatlarini o'zgartirish ilovaga manzilga kirish berish usuli emas. U faqat qurilma chegarasini boshqa joyga ko'chiradi.
Ilova aslida qaysi nomlar fazosida ishlashini tekshiring
Konteyner yoki ikkinchi tarmoq nomlar fazosi o'z jarayonlariga alohida interfeyslar to'plami va marshrut jadvalini beradi. Xostdagi tunnel u yerda o'z-o'zidan paydo bo'lmaydi va qurilma ruxsatlarining hech qanday o'zgarishi buni o'zgartirmaydi. Ilova faqat shu nomlar fazosi taqdim etgan narsa orqali marshrutlaydi. Shuning uchun konteyner obrazi xost tunnelini tasodifan meros ololmaydi.
Buni ip netns list va ip -n NAME route bilan yoki jarayonning nomlar fazosi havolasini ko'rib tekshiring. Javob odatda bitta buyruqda ko'rinadi.
Bitta xostdagi ikki foydalanuvchiga siyosat orqali turli yo'llar ham berilishi mumkin. Bu tarmoq qarori, qurilma egaligining isboti emas.
Qobiliyatlarni tarmoq siyosatidan ajrating
Ba'zi vositalar soketdan ko'proq narsani talab qiladi. Paketlarni ushlash xom soketni, marshrutlarni o'zgartirish esa boshqaruv vakolatini talab qiladi. Bular alohida ruxsatlarga ega alohida amallar va birini berishni VPN ishlatishning umumiy sharti deb o'qish kerak emas.
O'z tunnelini amalga oshiradigan dastur uchinchi holat. U daemon rolini olgani uchun TUN ni haqiqatan ochadi, shuning uchun unga daemonning imtiyozlari kerak.
Imtiyozni nomlashdan oldin amalni nomlang. Ikkalasini ajratish odatda ko'ringanidan oson.
Bo'linishni ikki hisob bilan tekshiring
Tunnelni xizmat sifatida ulang, so'ngra ilovani oddiy foydalanuvchi sifatida ishga tushiring va u shaxsiy manbaga yetib borishini tasdiqlang. O'sha foydalanuvchining shell idan manzil uchun ip route get ni tekshirib, qaysi interfeys tanlanganini ko'ring. Agar marshrut to'g'ri bo'lsa-yu, ulanish hali ham muvaffaqiyatsiz bo'lsa, muammo siyosatda, imtiyozda emas.
Natijaviy dizayn aniq chegara bilan eng kam imtiyozdir: bitta komponent sozlash va tunnel resurslariga ega, ish yuklamalari odatdagi hisoblarini saqlaydi, tarmoq siyosati esa nima o'tishi mumkinligini hal qiladi. Hammani root sifatida ishga tushirish bu rollarni hech narsani tushuntirmasdan yiqitadi.