Bu ilovani istisno qilish uchun kalit yo'q: jarayonga o'z manbasini bering
Marshrutlash manzillarni taqqoslaydi, jarayon nomlarini emas. Istisno qilingan dasturga o'z manbasi va jadvalini bering yoki qarorni routerga ko'chiring, u yerda bu halol.
Bitta dastur oddiy ulanishdan foydalanishi, qolgan hamma narsa tunnelda qolishi kerak, va mijozda buning uchun kalit yo'q. Yashirin menyu ham topilmaydi. Marshrut paket ichidagi maydonlardan tanlanadi, paket esa manzillar va portlarni olib yuradi, uni yaratgan jarayonning shaxsini emas, shuning uchun istisno o'sha maydonlardan birida ifodalanishi kerak. Paketni bir marta kuzatib chiqing va mavjud variantlar sirli bo'lishdan to'xtaydi.
Nega mijoz buni taklif qila olmaydi
Manzil bo'yicha marshrutlash manzilni prefikslar bilan taqqoslaydi va eng uzun moslikni saqlaydi. O'sha paytda har bir paket bir xil ko'rinadi, uni nima yaratgan bo'lmasin. Manba siyosati marshrutlashi taqqoslashni manba manziligacha kengaytiradi, va bu har bir amaliy yechim ishlatadigan ilgak: manbani o'zgartiring, boshqa jadval mos bo'ladi.
Portlar yordam bermaydi. Port bo'yicha istisno manzil qidiruvidan oldin baholanishi kerak edi, va port bu qarorda hech qanday rol o'ynamaydi. Portga asoslangan istisno deb reklama qilinadigan har qanday narsa aslida boshqa maydon bo'yicha istisno qiladi va buni bo'sh tasvirlaydi.
Haqiqiy ilova bo'yicha marshrutlash platforma buning uchun mexanizm qo'shgan joyda mavjud, masalan Windows'dagi filtr chaqiruvlari yoki Android'dagi VPN xizmati bog'lanishi. Ish stolidagi OpenVPN nusxasi bulardan hech narsa olib kelmaydi, va hech qanday konfiguratsiya bayrog'i buni o'ylab topmaydi.
Linux: jarayonni belgilang, keyin belgini marshrutlang
Eng toza yondashuv qarorni soketga egalik qiluvchi jarayonga bog'laydi. owner mosligi OUTPUT zanjirida mahalliy yaratilgan trafik uchun ishlaydi, shuning uchun u yerda qo'llangan belgi alohida jadvalni tanlashi mumkin:
iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table 200
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.0 table 200
ip route add default via 192.168.1.1 dev eth0 table 200
1001 foydalanuvchining paketlari keyin 200 jadvaliga murojaat qiladi va oddiy shlyuz orqali chiqadi, asosiy jadval esa qolgan hamma narsani hali ham tunnelga yuboradi. owner mosligi faqat mahalliy yaratilgan paketlarga tegishli, bu aynan shu yerda muhim trafik, va u boshqa xostga uzatiladigan paketlarni tasniflay olmaydi. Asboblar bilan tekshiring, niyat bilan emas: ss -tnp o'rnatilgan ulanishlarning mahalliy manzili va egalik qiluvchi jarayonini ko'rsatadi, ip route get 1.1.1.1 mark 0x1 belgi qaysi jadvalni tanlashini ko'rsatadi.
Tarmoq nomlar fazosi mustaqil dastur uchun mustahkamroq javob, chunki uning ichida yaratilgan har bir soket qurilishi bo'yicha unga bog'langan, shuning uchun yordamchi jarayonlar va bola ulanishlar xulq-atvorni umuman tasniflanmasdan meros oladi. Narxi — quvur ishi: bir veth juftligi, har ikki uchida manzil, va nomlar fazosi ichida xostga qaytib ko'rsatuvchi standart marshrut.
ip netns add novpn
ip link add veth-host type veth peer name veth-ns
ip link set veth-ns netns novpn
ip addr add 10.200.0.1/24 dev veth-host
ip netns exec novpn ip addr add 10.200.0.2/24 dev veth-ns
ip netns exec novpn ip route add default via 10.200.0.1
Windows: manzil hali ham hal qiladi
Windows chiqish interfeysini manzilga qarab tanlaydi, shuning uchun boshqa yo'l xohlovchi dastur stack bu tanlovdan oldin so'raydigan narsani o'zgartirishi kerak. ForceBindIP birinchi yarmini qoplaydi: dasturni soketlari siz aytgan mahalliy manzilga allaqachon bog'langan holda ishga tushiradi. Buning o'zi paket qaysi interfeysdan chiqishini o'zgartirmaydi, chunki marshrutni hali ham manzil tanlaydi. Standart marshruti tunnelga qarab turgan noutbukda manba bog'lang, paket baribir tunnelga kiradi.
Alomatning o'qish mumkin bo'lgan shakli bor, uni bir marta bilsangiz. Bu tanlangan interfeys to'g'ridan-to'g'ri yetib boradigan LAN manziliga tegishli, va internetdagi marshruti tunnelga qarab turgan har qanday narsa uchun muvaffaqiyatsiz bo'ladi. Dastur ishni yordamchiga topshirmaguncha u ishlayotgandek ham ko'rinadi, chunki o'z soketini ochadigan yordamchiga bog'lanish haqida hech qachon aytilmagan.
Bitta jarayon noto'g'ri birlik bo'lsa, qarorni ko'chiring
Agar haqiqiy talab dastur emas, qurilma bo'lsa, uni o'z SSID yoki VLAN'iga qo'ying va router hal qilsin: u manba oddiy yo'ldan boradi, boshqa manbalar tunneldan foydalanadi. Ajratilgan shlyuz mashinasi boshqa halol dizayn: u VPN'ni ushlab turadi va faqat router yuboradigan manzillarni qabul qiladi. VLAN'da siyosat qurilma ochadigan har bir oqimni qamrab oladi, Windows yondashuvini buzgan yordamchi jarayonlar bilan birga. Ayirboshlash — qamrov: o'sha qurilmadagi ikki dasturni endi boshqacha ko'rib bo'lmaydi.
Ikkalasi ham bir gapda aytib bo'ladigan qamrovga ega manba yoki manzil siyosatlari. Hech biri ilova bo'yicha emas, va o'zini ilova bo'yicha deb sotadigan dizayn dastur o'z ishini ikkinchi jarayonga topshirgan birinchi paytda muvaffaqiyatsizlikka uchraydi.