ฉันต้องการสร้างสภาพแวดล้อมการทดสอบสำหรับ STP / RSTP ในที่สุดฉันก็ผ่านมา โพสต์นี้ ที่แนะนำให้ใช้เนมสเปซ ดูเหมือนว่านั่นเป็นสิ่งที่ฉันต้องการสร้างสภาพแวดล้อม STP ที่ง่ายที่สุด ฉันลงเอยด้วยการเขียนสคริปต์เช่นนี้:
#!/bin/bash
ถ้า [ "$EUID" -ne 0 ]
จากนั้น echo "กรุณาเรียกใช้ในฐานะรูท"
ทางออก
ไฟ
# กรณีแรก: ลองคู่ veth เดียว
ip netns เพิ่มสีน้ำเงิน
ip link เพิ่ม veth0 พิมพ์ veth peer veth1 netns blue
ip link เพิ่ม veth2 พิมพ์ veth peer veth3 netns blue
ลิงค์ ip ตั้งค่า veth0 ขึ้น
ip netns exec blue ip link ตั้งค่า veth1 แล้ว
ลิงค์ ip ตั้งค่า veth2 ขึ้น
ip netns exec blue ip link ตั้งค่า veth3 ขึ้น
ลิงค์ ip เพิ่มสะพานประเภท mybridge
ip link ตั้งค่า veth0 master mybridge
ชุดลิงค์ ip veth2 มาสเตอร์ mybridge
ip netns exec blue ip link เพิ่มบริดจ์ประเภท bluebridge
ip netns exec blue ip link ตั้งค่า veth1 master bluebridge
ip netns exec blue ip link ตั้งค่า veth3 master bluebridge
ip addr เพิ่ม 10.200.0.1/24 dev mybridge
#brctl stp mybridge บน
ip link ตั้งค่า mybridge ประเภทบริดจ์ stp_state 1
ลิงค์ ip ตั้งค่า mybridge ขึ้น
# เริ่มบันทึกแพ็กเก็ตที่นี่
echo "เริ่มบันทึกแพ็กเก็ต กดปุ่มใดก็ได้เพื่อดำเนินการต่อ"
อ่าน -n 1
ip netns exec blue ip addr เพิ่ม 10.200.0.2/24 dev bluebridge
#ip netns exec blue brctl stp bluebridge เปิด
ip netns exec blue ip link set bluebridge ประเภทบริดจ์ stp_state 1
ip netns exec blue ip link ตั้งค่า bluebridge ขึ้น
เกือบทุกครั้งที่ฉันลงเอยด้วยสถานะที่ทั้ง veth0 และ veth2 กำลังส่งต่อ และฉันจะเจอพายุที่ทำให้เครื่องของฉันทำงานจนกว่าฉันจะลดอินเทอร์เฟซใด ๆ
ความหวังของฉันคือเคอร์เนลเอง (4.19.128 ที่ทำงานใน WSL 2.0 สำหรับการทดสอบปัจจุบันของฉัน) สามารถตรวจพบสิ่งเหล่านี้และ... ไม่ทำให้เกิดพายุ นอกจากนี้ ฉันหวังว่าจะสามารถใช้โปรแกรม RSTP พื้นที่ผู้ใช้ เช่น mstpd (คอมมิชชัน f55f783610e65149) บนบริดจ์หนึ่งหรือทั้งสองบริดจ์เหล่านี้ และพัฒนาสถาปัตยกรรมเครือข่าย โดยจับแพ็กเก็ตบนอินเทอร์เฟซใดๆ ระหว่างทาง
มีบางอย่างที่ฉันขาดหายไป? ฉันได้ลองสิ่งนี้กับเนมสเปซเครือข่ายสามแห่งแล้ว - ดูเหมือนจะยัง เกือบตลอดเวลา นำไปสู่พายุ
ฉันเคยเห็นบางกรณีที่พอร์ตหนึ่งปิดกั้นและอีกพอร์ตหนึ่งส่งต่อตามที่ฉันคาดไว้ นั่นดูเหมือนจะเป็นข้อยกเว้นมากกว่ากฎ
สำหรับผู้ที่เล่นที่บ้าน สคริปต์ง่ายๆ เพื่อเลิกทำอินเทอร์เฟซทั้งหมด:
#!/bin/bash
ถ้า [ "$EUID" -ne 0 ]
จากนั้น echo "กรุณาเรียกใช้ในฐานะรูท"
ทางออก
ไฟ
#ฆ่าสีน้ำเงิน
ip netns exec blue ip link เดล bluebridge
ip netns exec blue ip ลิงค์ del veth1
ip netns exec blue ip ลิงค์ del veth3
ip netns เดลบลู
ip ลิงค์เดล mybridge