- क्या यह सही है कि dhclient कुछ निचले स्तर के एपीआई का उपयोग करता है जो कि iptables द्वारा संसाधित नहीं किया जाता है?
लघु संस्करण: हाँ, कुछ डीएचसीपी सर्वरों के लिए (isc-dhcp और dnsmasq के शुरुआती संस्करण), कुछ अन्य सर्वरों के लिए नहीं (बाद में dnsmasq के संस्करण)।
लंबा संस्करण: इस मामले की उत्पत्ति एक है raw socket
। एक कच्चा सॉकेट , विकिपीडिया के अनुसार है,
... एक इंटरनेट सॉकेट जो किसी भी प्रोटोकॉल-विशिष्ट परिवहन परत प्रारूपण के बिना इंटरनेट प्रोटोकॉल पैकेट को सीधे भेजने और प्राप्त करने की अनुमति देता है।
यह आईएससी विकी पेज (इंटरनेट सिस्टम कंसोर्टियम सबसे आम डीएचसीपी कार्यक्रम का लेखक है) कहता है कि:
डीएचसीपी प्रोटोकॉल के पास वास्तव में ठीक से काम करने के लिए कुछ विशिष्ट आवश्यकताएं हैं - विशेष रूप से सभी प्रसारित प्रसारण पते (255.255.255.255) को भेजे गए पैकेटों को प्रेषित करने और प्राप्त करने में सक्षम होने के नाते, और एआरपी के बिना एक यूनास्ट भेजने में सक्षम होने के नाते। बीएसडी / यूडीपी सॉकेट्स के माध्यम से ऐसा करना संभव नहीं है, हालांकि dhcpd बीएसडी / यूडीपी सॉकेट (जिसे "फ़ॉलबैक इंटरफ़ेस" कहा जाता है) को भी खोलता है, जिसे आप नेटस्टैट में देखेंगे।
यह दिलचस्प है, क्योंकि यह बताता है कि आपको अक्सर क्यों मिलेगा, गोग्लिंग द्वारा, iptables
यूडीपी बंदरगाहों 67 और 68 के माध्यम से डीएचसीपी अनुरोधों को नियंत्रित करने की कोशिश कर रहे लोग । यह बिल्कुल नहीं है कि इन बंदरगाहों को नहीं खोला गया है, यह केवल यही है न केवल चैनल के माध्यम से जो सर्वर और क्लाइंट के बीच संचार होता है।
यह पूरी तरह से सफल नहीं हो सकता है: कुछ लोग अपनी मशीन को पूरी तरह से बंद करने के चरम पर चले गए हैं (iptables सब कुछ छोड़ देता है!), फिर भी वे कच्चे पैकेट के माध्यम से खुद को डीएचसीपी से बंद करने में असमर्थ थे)।
एक और दिलचस्प प्रयोग है, एक बार फिर iptables
से किसी के पीसी को बंद करना, और फिर DNS के लिए एक कच्चे सॉकेट का उपयोग करना, या टीसीपी कनेक्शन के लिए: iptables के बावजूद, ये संचार प्रयास सफल होते हैं।
इस पर एक बहुत ही आधिकारिक टिप्पणी नेटफिल्टर साइट पर पाई जा सकती है , जहाँ यह कहा गया है:
कच्ची कुर्सियां टीसीपी / आईपी स्टैक को बायपास करती हैं। नेटफिल्टर हुक, और परिणामस्वरूप iptables, आईपी स्टैक के अंदर बैठते हैं।
और यही बात पैकेट स्निफर पर भी लागू होती है।
यहां वे यह भी समझाते हैं कि समस्या को कैसे दरकिनार किया जाए: सावधान, यह एक मजाक है, स्फाफ बताता है
यह एक सप्ताहांत परियोजना नहीं है।
अंत में, मैं यह भी बताना चाहूंगा कि स्थिति dnsmasq के लिए अलग है : एक डेबियन विकी पृष्ठ में , dnsmasq के लेखक साइमन केली कहते हैं:
Dnsmasq एक कच्चा सॉकेट खोलता है लेकिन यह सॉकेट से डेटा कभी नहीं पढ़ता है: इसके बजाय इसका उपयोग डीएचसीपी ग्राहकों से बात करने के लिए किया जाता है जो अभी तक पूरी तरह से कॉन्फ़िगर नहीं किए गए हैं और एआरपी नहीं कर सकते हैं। यह कोई सुरक्षा समस्या नहीं है। Dnsmasq के बाद के संस्करण एक अलग तकनीक का उपयोग करते हैं, और अब एक कच्चा सॉकेट नहीं खुला है।
संपादित करें :
क्या अनुत्तरित यूनिकास्ट अनुरोधों के लिए ढोलक से लॉग की मात्रा को कम करने का कोई तरीका है?
यह तुच्छ क्योंकि उत्पादन से कम करने के लिए CLI विकल्प नहीं है, dhclient
, -q से, CLI से लागू किया जा सकता है, लेकिन नहीं dhclient.conf । इसके अलावा, dhclient
सीधे आपके नेटवर्क प्रबंधक द्वारा सामान्य रूप से नहीं, बल्कि एक निष्पादन योग्य द्वारा कहा जाता है ifup
: वास्तव में,
# strings `(which ifup)` | grep dhclient
/sbin/dhclient
/sbin/dhclient3
dhclient -v -r -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface%
dhclient3 -r -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface%
dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% [[-e IF_METRIC=%metric%]]
dhclient3 -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface% [[-e IF_METRIC=%metric%]]
dhclient -6 -r -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%
dhclient -1 -6 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%
dhclient -1 -6 -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%
जैसा कि आप देख सकते हैं, (= क्रिया!) विकल्प के साथ ifup
आक्रमण करता है, जो आप चाहते हैं उसके विपरीत।dhclient
-v
आपके पास क्या विकल्प हैं?
स्रोत कोड डाउनलोड करें, ऊपर दिए गए मंगलाचरण को संशोधित करें, और इसे अपने कर्नेल के लिए फिर से जोड़ें। यह एक चिंच होना चाहिए।
आप एक का उपयोग कर सकते द्विआधारी संपादक कन्वर्ट करने के लिए -v
में -q
।
आप के साथ मंगलाचरण को बदलकर, आप एक स्क्रिप्ट फ़ाइल को संशोधित कर सकते हैं/etc/init.d/networking
ifup
ifup .... > /dev/null 2>&1
एक रिबूट, या networking
सेवा का पुनरारंभ , इस संशोधन को पूरा करेगा। यह आदर्श से कम है क्योंकि यह कचरा में बेकार चेतावनी और गंभीर त्रुटि संदेश दोनों को फेंक देता है ।
अंत में, आप निम्नलिखित हैक बाहर ले जाने के कर सकते हैं: इस कदम /sbin/dhclient
के लिए /sbin/dhclient-true
है, तो एक निष्पादन बुलाया फ़ाइल बनाने के /sbin/dhclient
निम्नलिखित सामग्री के साथ:
#!/bin/bash
ARGS=$(echo "$@" | sed 's/ -v / /g')
exec /sbin/dhclient-true "-q" "$ARGS"