ฉันกำลังปรับขนาดอุปกรณ์ตรวจสอบความปลอดภัย ขั้นตอนการจำกัดอัตราคือกระบวนการแบบเธรดเดี่ยวที่วิเคราะห์และแยกข้อมูลจากโฟลว์ของเครือข่าย
สำหรับเป้าหมายระยะสั้น ฉันต้องการปรับขนาดนี้โดยการทำโหลดบาลานซ์จากอินเทอร์เฟซการจับภาพจริงไปยังอินเทอร์เฟซหุ่นจำลองหรือแตะภายใน จากนั้นจึงมีหลายอินสแตนซ์ของกระบวนการเธรดเดียวที่รันโดยใช้สิ่งเหล่านั้นเป็นอินพุต
แต่ละอินสแตนซ์ของกระบวนการเธรดเดียวต้องการโฟลว์เครือข่ายที่สมบูรณ์ (เช่น ทูเพิลที่ตรงกัน - TCP หรือ UDP) ฉันไม่สนใจเกี่ยวกับทราฟฟิกหลังจากที่มันจะชนกับอินเทอร์เฟซจำลอง - จากนั้นมันก็หลุด ดังนั้นฉันจึงไม่ต้อง
กังวลเกี่ยวกับเส้นทางกลับหรือสิ่งที่เกี่ยวข้อง
หลังจากอ่านมาระยะหนึ่ง ฉันคิดว่าการแฮชตามโฟลว์และการดำเนินการเปลี่ยนเส้นทางแบบ tc-mirred อาจเป็นวิธีแก้ปัญหาที่ฉันกำลังมองหา
ฉันมาไกลแล้ว:
#ตั้งค่าอินเทอร์เฟซ
PHYS="เอธ1"
INT_COUNT=4 # มาจากจำนวนคอร์ของ CPU
# สร้างอินเทอร์เฟซจำลอง
สำหรับฉันใน {1..$INT_COUNT}
ทำ ip link เพิ่ม dummy$i พิมพ์ dummy
ip link ตั้งค่า dummy$i ขึ้น
เสร็จแล้ว
# สร้าง qdisc
tc qdisc เพิ่ม dev $PHY ขาเข้า
# กรองตามทูเพิลการไหล ชั้นเรียนถูกสร้างขึ้นโดยอัตโนมัติเนื่องจากตัวหาร
ตัวกรอง tc เพิ่ม dev $PHYS parent ffff: จัดการ 1 \
โฟลว์แฮชคีย์ src,dst,proto,proto-src,proto-dst \
ตัวหาร $INT_COUNT
# ตอนนี้ใช้การดำเนินการเปลี่ยนเส้นทางกับคลาสที่สร้างขึ้น
# สำหรับแต่ละอินเทอร์เฟซจำลอง
สำหรับฉันใน {1..$INT_COUNT}
ทำตัวกรอง tc เพิ่ม dev $PHYS parent ffff: โปรโตคอล ip u32 ตรงกับ u32 0 0 \
การกระทำมิเรอร์ขาออกเปลี่ยนเส้นทาง dev dummy$i
เสร็จแล้ว
เป็นส่วนสุดท้ายที่ฉันไม่สามารถเข้าใจได้
คลาสถูกสร้างขึ้นโดยอัตโนมัติด้วยคำสั่งตัวหารในการกรอง เนื่องจากตัวหารใช้โมดูโลของแฮช ฉันควรได้คลาสที่สามารถอ้างอิงได้
ฉันจะพูดว่า "คลาส" N "ไปที่ dummyN" ได้อย่างไร
ฉันได้อ่านเรื่องนี้มามากแล้ว แต่ฉันคิดว่ามีบางส่วนที่สำคัญที่ฉันไม่เข้าใจ ฉันคิดว่าฉันต้องการการเคลื่อนไหวที่ไหลลื่น แต่ฉันไม่แน่ใจ
เคล็ดลับหรือคำแนะนำใด ๆ เกี่ยวกับเรื่องนี้จะได้รับการชื่นชมอย่างมาก