केवल एक आईपी पते के पैकेट में देरी के लिए टीसी का उपयोग करना


20

मैं tc और netem का उपयोग करने के लिए नया हूँ । मैं पैकेटों को एक विशिष्ट आईपी पते पर भेजने में देरी करना चाहता हूं। हालाँकि, नीचे दिए गए आदेश सिस्टम के सभी पैकेटों को देरी से आईपी पते 1.2.3.4 के बजाय देरी से भेजते हैं:

tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1

मेरा अनुमान है कि मुझे यह बताने के लिए अंत में किसी प्रकार के कैच-ऑल फिल्टर की जरूरत है कि शेष सभी ट्रैफिक नेटम से न गुजरें। लेकिन मुझे काम करने के लिए कुछ भी नहीं मिल रहा है। मुझे यह काम करने के लिए कैसे मिलेगा?

जवाबों:


14

ठीक है, मैंने अपनी समस्या हल कर ली। यह पता चला है कि यदि आप ऊपर की पहली 3 पंक्तियों ("tc qdisc" वाले) को निष्पादित करते हैं, तो यह सभी पैकेटों में देरी करेगा क्योंकि अभी तक कोई फ़िल्टर नहीं हैं। 4 वीं पंक्ति उस एकल आईपी पते से केवल देरी के पैकेट में बदलती है। "विलंबित" सूची में अतिरिक्त आईपी पते जोड़ने के लिए अतिरिक्त फिल्टर लाइनें जोड़ी जा सकती हैं। तो: एक "netem देरी" लाइन बनाने के लिए एक फिल्टर की ओर इशारा करते हुए बिना यह नहीं है।


थैंक्यू ने वापस आने और जवाब पोस्ट करने के लिए। अजीब तरह से मैंने पाया कि यह दोनों तरीकों से ठीक काम करता है, लेकिन वैसे भी। मैं परीक्षण के साथ मदद करने के लिए उन तीन आदेशों के आसपास एक आवरण स्क्रिप्ट लिखी, बस सोचा कि मैं थोड़ा वापस दे दूंगा :)
अरन कडबार्ड-बेल

13

चुना गया उत्तर गलत / अपूर्ण है। मुझे एक समान मुद्दे का सामना करना पड़ा, चुने हुए उत्तर ने कुछ मदद दी, लेकिन पर्याप्त नहीं।

सबसे पहले, निम्न आदेश की वास्तव में आवश्यकता नहीं है।

टीसी qdisc डेल देव eth0 रूट

यह रूट क्यूडिस्क को 'डिलीट' कर देगा, लेकिन शुरुआत में इसे pfifo_fast एक द्वारा प्रतिस्थापित किया जाता है (ताकि आप कनेक्टिविटी न खोएं)।

दूसरी आज्ञा:

टीसी qdisc देव eth0 रूट संभाल 1: prio जोड़ें

Pfifo_fast qdisc को prio one के साथ बदलेगा। डिफ़ॉल्ट रूप से, prio que में 3 बैंड (0, 1, 2) होते हैं, प्रत्येक को एक वर्ग (1: 1, 1: 2 और 1: 3) द्वारा प्रबंधित किया जाता है।

पैकेटों को आईपी पैकेज के टीओएस क्षेत्र का उपयोग करके उन बैंडों में से एक में भेजा जाएगा। यह कॉन्फ़िगरेशन तब दिखाया जाता है जब आप निष्पादित करते हैं:

tc qdisc ls

'प्रॉमैप' मूल्यों को देखते हुए।

उसके बाद, आप एक netem qdisc जोड़ें:

टीसी qdisc देव eth0 जनक 1: 1 संभाल 2: netem देरी 500ms जोड़ें

इस कमांड के साथ आप 1: 1 बैंड (जब तक फिल्टर चालू है) तक जाने वाले सभी ट्रैफ़िक में देरी करते हैं।

लेकिन दो कैविएट हैं:

  • आपके ट्रैफ़िक का एक अलग टीओएस मान हो सकता है और फिर दूसरे बैंड में भेजा जा सकता है।
  • Prio qdisc को कॉन्फ़िगर किया जा सकता है ताकि ट्रैफ़िक दूसरे बैंड पर जाए।

निम्नलिखित ने मेरी समस्या को नेटम से प्रभावित नहीं किया है जबकि फ़िल्टर लागू नहीं किया गया है। उपरोक्त चरणों के बजाय, मैंने किया:

tc qdisc add dev eth0 रूट हैंडल 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

यह सभी ट्रैफ़िक को डिफ़ॉल्ट रूप से बैंड 1: 3 पर भेज देगा।

फिर, मैंने यातायात में देरी के लिए नियम जोड़ा:

टीसी qdisc देव eth0 जनक 1: 1 संभाल 10: netem देरी 100ms 10ms जोड़ें

यह बैंड 0 में qdisc को बनाता है, लेकिन चूंकि सभी ट्रैफिक बैंड 3 पर जाता है, इसने मुझे प्रभावित नहीं किया।

बाद में, मैंने फ़िल्टर जोड़ा:

tc फ़िल्टर ऐड देव एथ0 प्रोटोकॉल आईपी पैरेंट 1: 0 प्रियो 1 u32 मैच आईपी dst 10.0.0.1/32 मैच आईपी dport 80 0xffff flowid 1: 1

अब फिल्टर के साथ, केवल चुने गए आईपी / पोर्ट प्रभावित होंगे, क्योंकि हम चुने गए ट्रैफ़िक को बैंड 0 पर पुनर्निर्देशित करते हैं।

अन्य सभी ट्रैफ़िक अप्रभावित जारी है क्योंकि यह बैंड 3 के लिए जारी है।


"ip dst 10.0.0.1/32" क्या है? क्या वह गंतव्य आईपी है? इसका मतलब यह है कि वहाँ एक "आईपी src xxx.yyy.zz.www / aa" है?
ज़च फ़ोलविक

हां, यह मेरे उदाहरण में गंतव्य आईपी है। और हाँ, एक 'ip src' विकल्प है।
टेलीग्राफर

पहले कमांड (tc qdisc del) का कारण किसी भी पिछली स्थिति को साफ़ करना है - जैसे कि आप इस काम को करने की कोशिश कर रहे हैं। FWIW स्वीकार किए जाते हैं जवाब मेरे लिए काम किया।
डैन प्रिट्स

धन्यवाद, यह उत्तर वास्तव में मददगार था।
पेपेहंड्स

1

Https://wiki.linuxfoundation.org/networking/netem से सरल उदाहरण जो आपको किसी भी अन्य ट्रैफ़िक को प्रभावित किए बिना किसी भी आईपी को पैकेट को विलंबित करने देता है, कॉन्फ़िगरेशन के दौरान भी:

tc qdisc del dev eth0 root # Ensure you start from a clean slate
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:3 handle 30: netem delay 500ms
tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
   match ip dst 192.168.1.2 flowid 1:3

मुझे एक चेतावनी जोड़नी होगी, यह बाद में ऐसा लगा जैसे विलंब अधिक व्यापक रूप से लागू होता है, जिसकी मुझे उम्मीद थी और मैं इसकी तह तक नहीं जा सका। हालांकि सभी ट्रैफ़िक में देरी नहीं हुई।
नीलमेनारिस

0

मैंने इस धागे में वर्णित विधि के साथ दूसरों को सामान्य करने के लिए यातायात को सामान्य रखते हुए एक आईपी पर यातायात में देरी करने का प्रबंधन नहीं किया है।

हालाँकि, मैं इसे निम्न आदेशों का उपयोग करके प्रबंधित करता हूं।

tc qdisc add dev eth0 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
tc qdisc add dev eth0 parent 1:2 handle 20: netem delay 0ms
tc filter add dev eth0 parent 1:0 protocol ip u32 match ip src `hostname -I` flowid 1:2
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 15001ms
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 1.2.3.4 flowid 1:1

होस्ट से 15001msIP को ट्रैफ़िक में देरी 1.2.3.4के लिए जहां कमांड निष्पादित किया जाता है। कमांड hostname -Iका उपयोग होस्ट के मुख्य आईपी को प्राप्त करने के लिए किया जाता है लेकिन मान को सीधे कमांड के अंदर बदला जा सकता है।

मुझे 0msहोस्ट से आने वाले ट्रैफ़िक से मिलान करने के लिए देरी के साथ एक और फ़िल्टर जोड़ना पड़ा । यह सुनिश्चित करने के लिए कि यह सुरुचिपूर्ण नहीं है, लेकिन मैं कुछ अच्छे काम करने में कामयाब नहीं हुआ हूं।

अंतिम कमांड को सिंगल पोर्ट से मिलान करने के लिए बदला जा सकता है।

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 18583 0xffff flowid 1:1

18583IP के बजाय पोर्ट में ट्रैफ़िक में देरी के लिए 1.2.3.4


मैंने ट्रैफ़िक में देरी के लिए इस उत्तर पर एक दूसरी विधि भी ढूंढ ली है ताकि अन्य ट्रैफ़िक पर प्रभाव न पड़े।1.2.3.4:18583

tc qdisc add dev eth0 root handle 1: prio
tc filter add dev eth0 protocol ip  parent 1: prio 1 u32 match ip dst 1.2.3.4 match ip dport 18583 0xffff flowid 1:1
tc filter add dev eth0 protocol all parent 1: prio 2 u32 match ip dst 0.0.0.0/0 flowid 1:2
tc filter add dev eth0 protocol all parent 1: prio 2 u32 match ip protocol 1 0xff flowid 1:2
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 10ms
tc qdisc add dev eth0 parent 1:2 handle 20: sfq
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.