คงจะยากมากๆ(แต่ เป็นไปได้) เพื่อให้มีระบบ Linux โดยใช้ routing stack เดียว ทำการเราต์แพ็กเก็ตแบบ multi-homed จากตัวมันเองไปยังตัวมันเองโดยไม่ต้องใช้ แท้จริง
อินเตอร์เฟซ.
แต่บน Linux นั้นง่ายมากที่จะสร้างสแต็กเครือข่ายเพิ่มเติมเพื่อจำลองระบบหลายระบบภายในระบบเดียว: โดยใช้ เนมสเปซเครือข่าย.
ที่นี่คุณสามารถละทิ้งหนึ่งในสอง NIC ไปยังเนมสเปซเครือข่ายใหม่ซึ่งจะเป็นแบบเพียร์ไปยังเนมสเปซเครือข่ายเริ่มต้น (โฮสต์) พวกเขาจะไม่สื่อสารโดยตรง แต่ผ่านเราเตอร์ภายนอกเท่านั้น สมมติว่าอินเทอร์เฟซมีชื่อจริงๆ ก
และ ข
และเราเตอร์ใช้ที่อยู่ 10.0.1.1/24
+ 10.0.2.1/24
.
สร้างเนมสเปซเครือข่ายใหม่พร้อมการจัดการที่อำนวยความสะดวกเพิ่มเติมเมื่อใช้งาน iproute2 เครื่องมือ (ภายใต้ประทุน ไฟล์จำลองเนมสเปซจะถูกเมาต์เพื่อเก็บทรัพยากรไว้โดยไม่ต้องดำเนินการ เป็นต้น)
ip netns เพิ่ม sideB
ย้ายอินเทอร์เฟซ ข
ไปยังเนมสเปซเครือข่ายใหม่:
ip link ตั้งค่า dev B netns sideB
หมายเหตุ: อินเตอร์เฟสไร้สายต้องใช้ ฉัน
สั่งการแทน
กำหนดค่าเนมสเปซเครือข่ายใหม่:
การตั้งค่าเครือข่ายทั้งหมดจะสูญหายไปเมื่ออินเทอร์เฟซเปลี่ยนเนมสเปซ (ทั้งบนโฮสต์ที่อินเทอร์เฟซหายไป ที่อยู่ทริกเกอร์หายไป เส้นทางทริกเกอร์หายไป และบนเนมสเปซเครือข่ายใหม่):
ลิงก์ ip -n sideB ตั้งค่า dev B ขึ้น
ที่อยู่ ip -n sideB เพิ่ม 10.0.2.5/24 dev B
ไม่จำเป็น แต่ในกรณีที่ iperf3 สับสน มีอินเทอร์เฟซย้อนกลับการทำงาน:
ตั้งค่าลิงค์ ip -n sideB ได้เลย
กำหนดเส้นทางระหว่างสองฝั่ง (เนมสเปซเริ่มต้น/โฮสต์อาจมีอยู่แล้วผ่านเส้นทางเริ่มต้น แต่ขอให้ชัดเจน)
เส้นทาง ip เพิ่ม 10.0.2.0/24 ผ่าน 10.0.1.1 dev A
เส้นทาง ip -n sideB เพิ่ม 10.0.1.0/24 ผ่าน 10.0.2.1 dev B
ตอนนี้สามารถเรียกใช้ได้ (ในสองเทอร์มินัล):
iperf3 -s
ip netns ผู้บริหาร sideB iperf3 -c 10.0.1.5
โดยไคลเอ็นต์ทำงานในเนมสเปซเครือข่ายใหม่
เมื่อการวัดสิ้นสุดลง การลบเนมสเปซของเครือข่ายจะทำให้ NIC กลับสู่เนมสเปซโฮสต์ แต่ถ้ากระบวนการใดถูกทิ้งไว้โดยไม่ได้ตั้งใจโดยใช้เนมสเปซเครือข่ายนี้ (เช่น ip netns exec side B ตั้งค่าสลีป 9999
) ที่ ip netns ลบ sideB
ด้านล่างนี้จะลบเฉพาะเนมสเปซออกจากมุมมองของ iproute2 เครื่องมือต่างๆ แต่จริงๆ แล้วไม่ได้ลบเนมสเปซจนกว่ากระบวนการจะสิ้นสุด ทำให้ยากต่อการกู้คืน NIC ย้ายกลับไปก่อนดีกว่า:
ip -n ลิงก์ sideB ตั้งค่า dev B netns 1
ip netns ลบ sideB
ที่ไหน 1
หมายถึงเนมสเปซเครือข่ายของ PID 1: เนมสเปซเริ่มต้น/โฮสต์ นอกจากนี้ยังอนุญาตให้ทำการทดลองภายในคอนเทนเนอร์ที่ได้รับ NIC จริง (เนื่องจากมี 1
เนมสเปซของเครือข่ายคือเนมสเปซของคอนเทนเนอร์ แทนที่จะเป็นเนมสเปซของโฮสต์จริง) มิฉะนั้น NIC จริงจะปรากฏขึ้นอีกครั้งบนโฮสต์และจะหายไปตลอดกาลในคอนเทนเนอร์หากไม่มีการเข้าถึงโฮสต์
หากไม่มีเครื่องมือ (เช่น udev + ถ้าอัพดาวน์'s อนุญาต hotplug
หรือ NetworkManager) ที่ตรวจจับการปรากฏของ NIC จะต้องกำหนดค่าใหม่อีกครั้งเมื่อกลับมา