यो एप बहिष्कृत गर्ने स्विच छैन: प्रक्रियालाई उसको आफ्नै स्रोत दिनुहोस्
राउटिङले ठेगाना मिलाउँछ, प्रक्रियाका नाम होइन। बहिष्कृत प्रोग्रामलाई उसको आफ्नै स्रोत र तालिका दिनुहोस्, वा निर्णय राउटरमा सार्नुहोस्, जहाँ त्यो इमानदार हुन्छ।
एउटा प्रोग्रामले सामान्य जडान प्रयोग गर्नुपर्छ जबकि बाँकी सबै टनेलमा रहन्छ, र क्लाइन्टसँग त्यसका लागि स्विच छैन। लुकेको मेनु पनि भेटिँदैन। मार्ग प्याकेटभित्रका फिल्डबाट छानिन्छ, र प्याकेटले ठेगाना र पोर्ट बोक्छ, यसलाई बनाउने प्रक्रियाको पहिचान होइन, त्यसैले बहिष्करण ती फिल्डमध्ये एकमा व्यक्त गर्नुपर्छ। प्याकेट एकचोटि पछ्याउनुहोस्, र उपलब्ध विकल्प रहस्यमय हुन छाड्छन्।
क्लाइन्टले यो किन दिन सक्दैन
गन्तव्य राउटिङले गन्तव्य ठेगानालाई प्रिफिक्ससँग तुलना गर्छ र सबैभन्दा लामो मिलान राख्छ। त्यो क्षणमा हरेक प्याकेट एउटै देखिन्छ, जसले बनाए पनि। स्रोत नीति राउटिङले तुलनालाई स्रोत ठेगानासम्म फराकिलो बनाउँछ, र प्रत्येक व्यावहारिक समाधानले प्रयोग गर्ने हुक यही हो: स्रोत बदल्नुहोस्, र अर्को तालिका योग्य हुन्छ।
पोर्टहरू सहयोग गर्दैनन्। पोर्टका आधारमा बहिष्करण गन्तव्य खोजीअघि मूल्याङ्कन गर्नुपर्थ्यो, र त्यो निर्णयमा पोर्टको कुनै भूमिका छैन। पोर्टमा आधारित बहिष्करण भनी विज्ञापन गरिने सबैले वास्तवमा अर्को फिल्डबाट बहिष्कृत गर्छ र त्यसलाई हल्का रूपमा वर्णन गर्छ।
साँचो एप-अनुसार राउटिङ त्यहीँ अवस्थित छ जहाँ प्लेटफर्मले त्यसका लागि संयन्त्र थपेको छ, जस्तै Windows मा फिल्टर कलआउट वा Android मा VPN सेवा बाइन्डिङ। डेस्कटप OpenVPN प्रतिले त्यसमध्ये केही ल्याउँदैन, र कुनै कन्फिगरेसन फ्ल्यागले त्यो बनाउँदैन।
Linux: प्रक्रिया चिन्ह लगाउनुहोस्, त्यसपछि चिन्ह राउट गर्नुहोस्
सबैभन्दा सफा दृष्टिकोणले निर्णयलाई सकेटको मालिक प्रक्रियासँग जोड्छ। owner मिलानले OUTPUT शृंखलामा स्थानीय रूपमा उत्पन्न ट्राफिकका लागि काम गर्छ, त्यसैले त्यहाँ लगाइएको चिन्हले छुट्टै तालिका छान्न सक्छ:
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 का प्याकेटले त्यसपछि तालिका 200 सोध्छन् र सामान्य गेटवेबाट बाहिरिन्छन्, जबकि मुख्य तालिकाले बाँकी सबै टनेलमा पठाउँछ। owner मिलान केवल स्थानीय रूपमा उत्पन्न प्याकेटमा लागू हुन्छ, जो यहाँ महत्त्वपूर्ण ट्राफिक हो, र यसले अर्को होस्टका लागि फर्वार्ड गरिएका प्याकेट वर्गीकृत गर्न सक्दैन। उद्देश्यले होइन, उपकरणले जाँच्नुहोस्: ss -tnp स्थापित जडानको स्थानीय ठेगाना र मालिक प्रक्रिया देखाउँछ, र ip route get 1.1.1.1 mark 0x1 चिन्हले कुन तालिका छान्छ देखाउँछ।
नेटवर्क नामस्थान स्वतन्त्र प्रोग्रामका लागि बलियो उत्तर हो, किनकि यसभित्र बनाइने हरेक सकेट निर्माणद्वारा नै यसमा बाँधिएको हुन्छ, त्यसैले सहायक प्रक्रिया र सन्तान जडानहरूले कुनै वर्गीकरणबिनै व्यवहार वंशानुगत पाउँछन्। लागत प्लम्बिङ हो: एउटा veth जोडी, प्रत्येक छेउमा ठेगाना, र नामस्थानभित्र होस्टतर्फ फर्कने पूर्वनिर्धारित मार्ग।
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: गन्तव्यले नै निर्णय गर्छ
Windows ले गन्तव्यबाट बाहिर जाने इन्टरफेस छान्छ, त्यसैले फरक बाटो चाहने प्रोग्रामले त्यो छनोटअघि स्ट्याकले सोध्ने कुनै कुरा बदल्नुपर्छ। ForceBindIP ले पहिलो आधा भाग ढाक्छ: प्रोग्रामलाई यसरी सुरु गर्छ कि उसका सकेट पहिल्यै तपाईंले नाम दिनुभएको स्थानीय ठेगानामा बाँधिएका हुन्छन्। यसले मात्र प्याकेट कुन इन्टरफेसबाट बाहिरिन्छ भन्ने बदल्दैन, किनकि मार्ग अझै गन्तव्यले नै छान्छ। जसको पूर्वनिर्धारित मार्ग टनेलतर्फ देखाउँछ त्यस्तो ल्यापटपमा स्रोत बाँध्नुहोस्, प्याकेट तैपनि टनेलमा जान्छ।
लक्षणको एकचोटि चिनेपछि पढ्न सकिने आकार हुन्छ। छानिएको इन्टरफेसले सिधै पुग्ने LAN ठेगानाका लागि यो लागू हुन्छ, र इन्टरनेटमा जसको मार्ग टनेलतर्फ देखाउँछ त्यसका लागि असफल हुन्छ। प्रोग्रामले काम सहायकलाई नसुम्पेसम्म यो काम गरेजस्तो पनि देखिन्छ, किनकि आफ्नै सकेट खोल्ने सहायकलाई बाँधाइको बारेमा कहिल्यै भनिएको थिएन।
एउटा प्रक्रिया गलत एकाइ हुँदा निर्णय सार्नुहोस्
यदि साँचो आवश्यकता प्रोग्राम होइन, उपकरण हो भने, यसलाई यसको आफ्नै SSID वा VLAN मा राख्नुहोस् र राउटरलाई निर्णय गर्न दिनुहोस्: त्यो स्रोत सामान्य मार्ग लिन्छ जबकि अन्य स्रोतले टनेल प्रयोग गर्छन्। समर्पित गेटवे मेसिन अर्को इमानदार डिजाइन हो: यसले VPN राख्छ र राउटरले पठाउने गन्तव्य मात्र स्वीकार्छ। VLAN मा नीतिले उपकरणले खोल्ने हरेक प्रवाह ढाक्छ, Windows दृष्टिकोण तोड्ने सहायक प्रक्रियासमेत। साटासाट दायरा हो: त्यो उपकरणका दुई प्रोग्रामलाई अब फरक रूपमा लिन सकिँदैन।
दुवै एक वाक्यमा भन्न सकिने दायरा भएका स्रोत वा गन्तव्य नीति हुन्। कुनै पनि एप-अनुसार छैन, र आफूलाई एप-अनुसार भनी बेच्ने डिजाइन प्रोग्रामले आफ्नो काम दोस्रो प्रक्रियामा सुम्पने पहिलो पटकमै असफल हुन्छ।