Score:2

กำหนดเส้นทางการรับส่งข้อมูลผ่านอินเทอร์เฟซทางกายภาพ

ธง cn

ฉันมีอินเทอร์เฟซอีเธอร์เน็ตสองตัวบนเครื่องลินุกซ์ ทั้งสองมีที่อยู่ IP ต่อไปนี้: อินเทอร์เฟซ A: 10.0.1.5/24 อินเทอร์เฟซ B: 10.0.2.5/24

อินเทอร์เฟซทั้งสองเชื่อมต่อกับเราเตอร์ที่จัดเส้นทางระหว่างสองเครือข่าย

ตอนนี้ฉันต้องการเริ่มการวัด iperf3 โดยที่ฉันผูกเซิร์ฟเวอร์กับอินเทอร์เฟซ A และไคลเอ็นต์กับอินเทอร์เฟซ B

ปัญหาคือทราฟฟิกไม่ได้ออกจากส่วนต่อประสานทางกายภาพ แต่จะไหลผ่านเคอร์เนลแทน ส่งผลให้ความเร็วที่แม้แต่ลิงก์ยังทำไม่ได้

ฉันสามารถทำอะไรได้บ้างเพื่อบังคับทราฟฟิกผ่านอินเทอร์เฟซทางกายภาพ ip_forward ถูกปิดใช้งาน

ขอบคุณ.

Score:1
ธง cl
A.B

คงจะยากมากๆ(แต่ เป็นไปได้) เพื่อให้มีระบบ 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 จะต้องกำหนดค่าใหม่อีกครั้งเมื่อกลับมา

cn flag
ขอบคุณ! น่าเสียดายที่ฉันยังไม่สามารถลงคะแนนได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา