मेरे सेटअप में मल्टीकास्ट TX ट्रैफ़िक को iptables द्वारा चिह्नित किया गया था, लेकिन नई रूटिंग टेबल का उपयोग करते हुए पॉलिसी राउटिंग ने कभी काम नहीं किया। हालांकि इसने यूनिकैस्ट TX पैकेट्स के लिए काम किया था (eth0 से eth5 के पैकेटों की उत्पत्ति को पुनः निर्देशित करते हुए)। Tc का उपयोग करने से मुझे eth5 में m0 ट्रैफ़िक मिल सकता है src mac और src ip एड्रेस को t5 से बदल दिया जाता है ताकि स्विच लर्निंग के साथ कोई समस्या न पैदा हो। कर्नेल पैकेट शेड्यूलिंग CONFIG_NET_SCHED के लिए सभी कर्नेल समर्थन सक्षम होना चाहिए
नीचे की ओर से काम करता है unicast और मल्टिकास्ट ट्रैफिक के लिए eth0 से eth5 तक रीडायरेक्ट
नेटफिल्टर का उपयोग सीधे कर्नेल में एक पैकेट का प्रतिनिधित्व करने वाली संरचना के साथ बातचीत करने के लिए किया जा सकता है। इस संरचना, sk_buff में "__u32 nfmark" नामक एक फ़ील्ड शामिल है जिसे हम संशोधित करने जा रहे हैं। तब एक पैकेट के गंतव्य वर्ग का चयन करने के लिए टीसी उस मूल्य को पढ़ेगा।
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match मल्टीपॉर्ट --dports 329,330 -o eth0 -j MARK --सेट-मार्क 2
एक पेड़ बनाने जा रहे हैं जो हमारी शेड्यूलिंग नीति का प्रतिनिधित्व करता है, और जो PRIO qdisc (पैकेट शेड्यूलर) का उपयोग करता है (अन्य उपलब्ध लोगों की कोशिश कर सकता है)। डिवाइस की जड़ में संलग्न qdiscs
टीसी qdisc देव eth0 रूट संभाल 15: prio जोड़ें
अब एक तरफ ट्रैफ़िक को आकार देने की नीति है, और दूसरी तरफ़ पैकेट मार्किंग है। दोनों को जोड़ने के लिए, हमें एक फिल्टर की आवश्यकता है।
संदर्भित व्यक्ति tc-mirred (8): mirred कार्रवाई पैकेट मिररिंग (प्रतिलिपि) या पुनर्निर्देशन (चोरी) को प्राप्त पैकेट को प्राप्त करने की अनुमति देती है। मिररिंग जिसे कभी-कभी स्विच पोर्ट एनालाइज़र (SPAN) के रूप में संदर्भित किया जाता है और आमतौर पर विश्लेषण और / या डिबग प्रवाह के लिए उपयोग किया जाता है।
संदर्भित मैन tc-fw (8): fw - fwmark ट्रैफिक कंट्रोल फ़िल्टर fw फ़िल्टर iptables द्वारा पहले से निर्धारित fwmark के आधार पर पैकेट को वर्गीकृत करने की अनुमति देता है। यदि यह फ़िल्टर के 'हैंडल' के समान है, तो फ़िल्टर मेल खाता है। iptables MARK लक्ष्य या CONNMARK का उपयोग करके पूरे कनेक्शन के साथ एकल पैकेट को चिह्नित करने की अनुमति देता है।
MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address
IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
tc फ़िल्टर जोड़ें dev eth0 पैरेंट 15: 0 प्रोटोकॉल IP prio 1 हैंडल 0x2 fw एक्शन पेडिट ex munge eth src set $ {MAC_ADDR_ETH1} पाइप \ एक्शन पेडिट ex munge ip src सेट $ {IP_ADDR_ETH1_pH1 देव eth1
निर्धारित नियमों से ऊपर दिखाएं: tc qdisc show dev eth0 tc फ़िल्टर शो dev eth0
सेट नियमों से ऊपर / हटाएं: tc qdisc del dev eth0 root