इसे this earlier SO question की निरंतरता माना जा सकता है।लिनक्स: मैं एक विशिष्ट नेटवर्क इंटरफ़ेस का उपयोग करने के लिए कैसे मजबूर करूं?
आदर्श रूप से, मैं केवल एक निश्चित इंटरफ़ेस का उपयोग करने की प्रक्रिया को जेल करना चाहता हूं, इससे कोई फर्क नहीं पड़ता। यह टीसीपी कनेक्शन बनायेगा, यूडीपी डेटाग्राम भेज रहा है, और यूडीपी प्रसारणों को सुन रहा है। वर्तमान में, मैं जो कर रहा हूं वह है:
- उपयोग करने के लिए इंटरफ़ेस का आईपी निर्धारित करें।
- रूट करने के लिए एक आईपी नीति नियम बनाएं सभी पैकेट इंटरफ़ेस से कि आईपी
- मार्ग के लिए एक और आईपी नीति नियम बनाने के लिए आने वाले सभी पैकेट कि आईपी से कि इंटरफेस
- प्रत्येक नियम के लिए एक डिफ़ॉल्ट अनुमार्गण तालिका सेट करें के लिए आ रहा
अब, यह ज्यादातर काम करता है, लेकिन ग्राहक प्रक्रिया को भी साथ खेलने के लिए तैयार होना चाहिए। यही है, इसे इंटरफ़ेस के विशिष्ट आईपी से जुड़ना होगा, और मुझे लगता है कि मुझे SO_BINDTODEVICE
भी सेट करना होगा। (हालांकि, मैं SO_BINDTODEVICE
वास्तव में टीसीपी या यूडीपी का उपयोग करते समय काम करता है या नहीं, इसके बारे में विवादित जानकारी पढ़ना जारी रखता हूं।) सौभाग्य से, क्लाइंट एप्लिकेशन पायथन है, और मैं सॉकेट क्लास को पारदर्शी रूप से करने के लिए विस्तार कर सकता हूं। लेकिन मुझे यकीन नहीं है कि यह एक पूर्ण समाधान है, खासकर प्रसारण प्राप्त करने के संबंध में।
मेरे प्रश्न हैं:
SO_BINDTODEVICE
क्या मैं यहाँ करना चाहते हैं करता है? या यह कच्चे सॉकेट के लिए केवल प्रभावी है? किसी ने टिप्पणी की कि, "सॉकेट परSO_BINDTODEVICE
यह गारंटी नहीं देता है कि सॉकेट केवल उस भौतिक इंटरफ़ेस के तार/एंटीना पर आने वाले पैकेट प्राप्त करेगा।" यदि यह वास्तव में सच है, तोSO_BINDTODEVICE
करता है?क्या ऐसा करने का कोई तरीका है कि स्थानीय आईपी को अद्वितीय नहीं होना चाहिए? यह इस तथ्य के अलावा कोई समस्या नहीं होगी कि एक इंटरफ़ेस पर DHCP सर्वर इसे एक आईपी आवंटित कर सकता है जो किसी अन्य इंटरफ़ेस द्वारा उपयोग में है, इस प्रकार रूटिंग तालिका को भ्रमित कर रहा है।
मैं केवल एक विशिष्ट इंटरफ़ेस से प्रसारण कैसे प्राप्त करूं? एक विशिष्ट आईपी के लिए बाध्यकारी यह प्रसारण को अनदेखा करता है, जो समझ में आता है, लेकिन जो कुछ मैं ढूंढ रहा हूं वह काफी नहीं है।
मैं उबंटू 8.04 डब्ल्यू/लिनक्स कर्नेल 2.6.26 पर चल रहा हूं। दो अलग-अलग इंटरफेस के माध्यम से एक ही सबनेट को एक ही सबनेट तक पहुंचने में सक्षम होने के साथ-साथ एक गैर-विचारणीय आवश्यकता होती है, इस प्रकार इसे "अधिकतर नहीं" करने के लिए प्रतिरक्षा (ज्यादातर) प्रतिरक्षा होती है। :)
'net.ipv4.conf.all.rp_filter' sysctl चर के लिए कोई IPv6 equivlant नहीं है; हालांकि netfilter के लिए 'rpfilter' मॉड्यूल के रूप में संबंधित कार्यक्षमता मौजूद है। यह [iptables-एक्सटेंशन] (http://ipset.netfilter.org/iptables-extensions.man.html) मैन पेज में प्रलेखित है। [Netfilter में rp_filter को स्थानांतरित करना] (http://www.strlen.de/talks/rpfilter.pdf) नोट करता है कि यह संभव है कि 'rp_filter' को पूरी तरह से भविष्य के कर्नेल में रूटिंग कैश कोड से हटा दिया जाए। –