IPTables इस तरह के काम के लिए नहीं बनाया गया है, जहाँ इन निर्णयों को करने के लिए बहुत सारे और बहुत सारे पैकेटों का विश्लेषण किया जाना चाहिए। IPTables आंशिक रूप से हालांकि उत्तर है!
इसका वास्तविक उत्तर लिनक्स में भयानक और अप्रयुक्त यातायात नियंत्रण सुविधाएं हैं। ध्यान दें कि यह जानने के बिना कि यह मशीन के लिए नेटवर्क कनेक्टिविटी खोने के कारण क्या हो रहा है, इस पर ध्यान दें! आपको चेतावनी दी गई है!
Eth0 मानते हुए आउटगोइंग डिवाइस आपको एक क्लास-आधारित ट्रैफिक कंट्रोल कतार बनाने की आवश्यकता होगी जो डिफ़ॉल्ट आउटपुट अधिकांश ट्रैफ़िक को 'तेज़' कतार के माध्यम से बनाएगी और लोगों की एक विशिष्ट सूची को 'धीमी' कतार में डाल देगी।
इसकी सुंदरता यह है कि आप एक ऐसी स्थिति बना सकते हैं जिससे आप धीमे उपयोगकर्ता के लिए बहुत से आउटबाउंड ट्रैफ़िक की अनुमति दे सकते हैं जब तक कि कोई ओवरराइडिंग क्लास बैंडविड्थ नहीं चाहता है, लेकिन यह उदाहरण ऐसा नहीं करता है (हमेशा धीमे उपयोगकर्ताओं को 10kbps प्रदान करेगा)। कतारबद्ध प्रणाली कुछ इस तरह दिखाई देगी:
Inbound traffic
+
|
|
v
+------------------+
| Class 1:1 |
|------------------|
| Root (all flows)|
| 100mbit |
+-----+-----+------+
| |
| |
| |
| |
| |
+----------+ | | +----------+
| 1:11 +-----+ +-----+ 1:12 |
|----------| |----------|
| Default | | Slow |
|100mb-80kb| | 80kb |
+----------+ +----------+
ऐसा करने के लिए, पहले आपको कर्नेल में पंक्तिबद्ध अनुशासन सेटअप करना होगा। निम्नलिखित आपके लिए यह करेंगे .. आपको इसे एक पूरी स्क्रिप्ट के रूप में चलाना होगा
#!/bin/bash
tc qdisc add dev eth0 parent root handle 1: hfsc default 11
tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:11 hfsc sc rate 99920kbit ul rate 100000kbit
tc class add dev eth0 parent 1:1 classid 1:12 hfsc sc rate 80kbit ul rate 80kbit
tc qdisc add dev eth0 parent 1:11 handle 11:1 pfifo
tc qdisc add dev eth0 parent 1:12 handle 12:1 pfifo
"डिफ़ॉल्ट 11" महत्वपूर्ण है क्योंकि यह कर्नेल को बताता है कि यातायात के साथ क्या करना है वर्गीकृत नहीं।
एक बार यह हो जाने के बाद, आप एक निश्चित मानदंडों से मेल खाने वाले पैकेटों को वर्गीकृत करने के लिए एक iptables नियम सेट कर सकते हैं। यदि आप बहुत से और बहुत से लोगों को इस धीमे नियम में रखने की योजना बनाते हैं, तो एक ipset नियम अधिक उपयुक्त है (जो मुझे विश्वास है कि rhel6 पर उपलब्ध होना चाहिए)।
तो, के खिलाफ मिलान करने के लिए एक ipset डेटाबेस बनाएँ ...
ipset create slowips hash:ip,port
फिर मैच करने के लिए iptables नियम बनाएं ।।
iptables -t mangle -I OUTPUT -m set --match-set slowips dst,src -j CLASSIFY --set-class 1:12
यह कर्नेल को निर्देश देता है कि यदि आप सेट से स्रोत पोर्ट के साथ गंतव्य आईपी से मेल खाते हैं, तो इसे ट्रैफ़िक नियंत्रण के साथ आपके द्वारा सेट की गई धीमी कतार में वर्गीकृत करें।
अब, अंत में जब भी आप एक आईपी को धीमा करना चाहते हैं तो आप सेट के लिए आईपी को जोड़ने के लिए ipset कमांड का उपयोग कर सकते हैं जैसे कि:
ipset add slowips 192.168.1.1,80
ipset add slowips 192.168.1.1,21
...
आप कमांड "tc -s class show dev eth0" का उपयोग करके यह परीक्षण कर सकते हैं और आप वहाँ आँकड़ों को धीमी कतार में पुनर्निर्देशित होने के संकेत देते हुए देखेंगे।
केवल वास्तविक नकारात्मक पक्ष यह नोट करें कि यह रिबूट से बच रहा है। मुझे नहीं लगता कि रिबूट पर डिप्स से आईपेट्स बनाने के लिए कोई इनिट स्क्रिप्ट उपलब्ध हैं (और उन्हें iptables नियमों से पहले भी बनाया जाना चाहिए ) और मुझे लगता है कि रीबूट पर ट्रैफिक कंट्रोल नियमों को रीसेट करने के लिए कोई इनिट स्क्रिप्ट नहीं है। यदि आपकी परेशान नहीं है, तो आप किसी स्क्रिप्ट में rc.local को इनवॉइस करने से पूरी चीज़ को फिर से बना सकते हैं।