हा ॲप वगळण्यासाठी स्विच नाही: प्रक्रियेला तिचा स्वतःचा स्रोत द्या
राउटिंग पत्ते जुळवते, प्रक्रियांची नावे नाही. वगळलेल्या प्रोग्रामला त्याचा स्वतःचा स्रोत व तक्ता द्या, किंवा निर्णय राउटरकडे हलवा, जिथे ते प्रामाणिक आहे.
एका प्रोग्रामने सामान्य जोडणी वापरावी आणि बाकी सर्व टनेलवर राहावे, आणि क्लायंटकडे त्यासाठी स्विच नाही. लपलेले मेनूही सापडणार नाही. मार्ग पॅकेटमधील फील्डमधून निवडला जातो, आणि पॅकेट पत्ते व पोर्ट वाहून नेते, ते तयार करणाऱ्या प्रक्रियेची ओळख नाही, म्हणून वगळणे त्या फील्डपैकी एकात व्यक्त करावे लागते. पॅकेट एकदा अनुसरा आणि उपलब्ध पर्याय कोडे राहणे थांबवतात.
क्लायंट ते का देऊ शकत नाही
गंतव्य राउटिंग गंतव्य पत्त्याची उपसर्गांशी तुलना करते आणि सर्वात लांब जुळणी ठेवते. त्या क्षणी प्रत्येक पॅकेट सारखेच दिसते, ते कुणीही तयार केले असो. स्रोत धोरण राउटिंग तुलना स्रोत पत्त्यापर्यंत वाढवते, आणि प्रत्येक व्यावहारिक उपाय वापरतो तो हुक हाच आहे: स्रोत बदला, आणि दुसरा तक्ता पात्र ठरतो.
पोर्ट उपयोगी नाहीत. पोर्टनुसार वगळणीचे मूल्यांकन गंतव्य शोधापूर्वी करावे लागले असते, आणि त्या निर्णयात पोर्टचा कोणताही वाटा नाही. पोर्ट-आधारित वगळणी म्हणून जाहिरात होणारे सर्व प्रत्यक्षात दुसऱ्या फील्डने वगळते आणि ते सैलपणे वर्णन करते.
खरे ॲप-निहाय राउटिंग तिथेच आहे जिथे प्लॅटफॉर्मने त्यासाठी यंत्रणा जोडली आहे, जसे 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 दृष्टिकोन मोडणाऱ्या सहायक प्रक्रियांसह. देवाणघेवाण व्याप्तीची आहे: त्या उपकरणावरील दोन प्रोग्रामांना आता वेगळे मानता येत नाही.
दोन्ही स्रोत किंवा गंतव्य धोरणे आहेत, ज्यांची व्याप्ती एका वाक्यात सांगता येते. कोणतेही ॲप-निहाय नाही, आणि स्वतःला ॲप-निहाय म्हणून विकणारी रचना प्रोग्रामने आपले काम दुसऱ्या प्रक्रियेकडे सोपवताच पहिल्याच वेळी अपयशी ठरते.