ในทราฟฟิกการตั้งค่ามัลติคาสต์ TX ของฉันถูกทำเครื่องหมายด้วย iptables แต่การกำหนดเส้นทางนโยบายโดยใช้ตารางเส้นทางใหม่ไม่ทำงาน แม้ว่าจะใช้งานได้กับ unicast TX packets (การเปลี่ยนเส้นทางแพ็กเก็ตต้นทางจาก eth0 เป็น eth5) การใช้ tc ฉันสามารถรับทราฟฟิก eth0 mcast เป็น eth5 src mac และที่อยู่ ip ของ src ได้เปลี่ยนไปแล้วที่ eth5 ดังนั้นจะไม่มีปัญหาในการเรียนรู้ของสวิตช์ การสนับสนุนเคอร์เนลทั้งหมดสำหรับการกำหนดเวลาแพ็คเก็ตเคอร์เนล CONFIG_NET_SCHED ต้องเปิดใช้งาน
ทำงานด้านล่างสำหรับการรับส่งข้อมูลแบบหลายผู้รับและแบบหลายผู้รับที่เปลี่ยนเส้นทางจาก eth0 เป็น eth5
Netfilter สามารถใช้เพื่อโต้ตอบโดยตรงกับโครงสร้างที่แสดงถึงแพ็กเก็ตในเคอร์เนล โครงสร้างนี้ sk_buff ประกอบด้วยเขตข้อมูลที่เรียกว่า“ __u32 nfmark” ที่เรากำลังจะแก้ไข TC จะอ่านค่านั้นเพื่อเลือกคลาสปลายทางของแพ็กเก็ต
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A เอาท์พุท -s $ {IP_ADDR_ETH0} -p udp - จับคู่หลายพอร์ต - กีฬา 329,330 -o eth0 -j มาร์ค - ชุดเครื่องหมาย 2
จะสร้างแผนภูมิที่แสดงถึงนโยบายการจัดตารางเวลาของเราและใช้ PRIO qdisc (ตัวจัดตารางเวลาแพ็คเก็ต) (สามารถลองใช้รายการอื่นที่มีอยู่) qdiscs ติดที่รากของอุปกรณ์
tc qdisc เพิ่ม dev eth0 root handle 15: prio
ตอนนี้มีนโยบายการจัดทำทราฟฟิกด้านหนึ่งและอีกด้านหนึ่งที่ทำเครื่องหมายแพ็คเก็ต ในการเชื่อมต่อทั้งสองเราจำเป็นต้องมีตัวกรอง
อ้างอิง man tc-mirred (8): การกระทำที่อนุญาตให้ทำมิเรอร์แพ็กเก็ต (คัดลอก) หรือเปลี่ยนเส้นทาง (ขโมย) แพ็กเก็ตที่ได้รับ การทำมิเรอร์เป็นสิ่งที่บางครั้งเรียกว่า Switch Port Analyzer (SPAN) และมักใช้ในการวิเคราะห์และ / หรือกระแสการดีบัก
อ้างอิง man tc-fw (8): fw - fwmark กรองการควบคุมการจราจรตัวกรอง fw ช่วยให้การจำแนกแพ็คเก็ตขึ้นอยู่กับการตั้งค่า fwmark ก่อนหน้านี้โดย iptables หากเหมือนกันกับ 'จุดจับ' ของตัวกรองตัวกรองจะจับคู่ 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 parent 15: 0 โปรโตคอล ip prio 1 จัดการการเปลี่ยนเส้นทาง 0x2 fw การกระทำที่ผิดพลาด dev eth1
แสดงกฎที่ตั้งไว้ด้านบน: tc qdisc แสดง dev eth0 tc filter แสดง dev eth0
ลบ / unset เหนือกฎชุด: tc qdisc del dev eth0 root