คำชี้แจงปัญหา
ด้วยการกำหนดค่าด้านล่าง คู่ veth จะถูกสร้างขึ้นระหว่างเนมสเปซสุทธิเริ่มต้น/หลักและ netns ที่เรียกว่า ns1.
การกำหนดค่ายังสร้างคู่ veth ที่สอง: veth2 อยู่ใน netns ns1 และ veth3 อยู่ใน netns ns2นี้เข้าร่วม ns1 ถึง ns2 สร้างห่วงโซ่: เริ่มต้น netns-veth0 <-> veth1-ns1-veth2 <-> veth3-ns2.
ลิงค์ sudo ip เพิ่ม veth0 ประเภท veth ชื่อเพียร์ veth1
sudo ip -6 addr เพิ่ม CCFF::0/127 เพียร์ CCFF::1/127 dev veth0
ลิงก์ sudo ip ตั้งค่า dev veth0
sudo ip netns เพิ่ม ns1
sudo ip link ตั้งค่า veth1 netns ns1
sudo ip -n ns1 -6 addr เพิ่ม CCFF::1/127 เพียร์ CCFF::0/127 dev veth1
ลิงค์ sudo ip -n ns1 ตั้งค่า dev veth1
เส้นทาง sudo ip -n ns1 -6 เพิ่มค่าเริ่มต้นผ่าน CCFF::0
ลิงค์ sudo ip เพิ่ม veth2 ประเภท veth ชื่อเพียร์ veth3
sudo ip link ตั้งค่า veth2 netns ns1
sudo ip -n ns1 -6 addr เพิ่ม CCFF::2/127 เพียร์ CCFF::3/127 dev veth2
ลิงก์ sudo ip -n ns1 ตั้งค่า dev veth2
sudo ip -n ns1 -6 เส้นทางเพิ่ม CCFF::/64 ผ่าน CCFF::3
sudo ip netns เพิ่ม ns2
ลิงก์ sudo ip ตั้งค่า veth3 netns ns2
sudo ip -n ns2 -6 addr เพิ่ม CCFF::3/127 เพียร์ CCFF::2/127 dev veth3
ลิงค์ sudo ip -n ns2 ตั้งค่า dev veth3
เส้นทาง sudo ip -n ns2 -6 เพิ่มค่าเริ่มต้นผ่าน CCFF::2
sudo ip -6 r เพิ่ม CCFF::/64 ผ่าน CCFF::1
จาก netns เริ่มต้น ฉันสามารถ ping veth0 ซึ่งอยู่ใน netns เดียวกัน
จาก netns เริ่มต้น ฉันสามารถ ping veth1 และ veth2 ซึ่งทั้งคู่อยู่ใน ns1.
จาก netns เริ่มต้นฉันไม่สามารถไพน์ veth3 ซึ่งอยู่ใน ns2.
หากฉันขยายการเปลี่ยนแปลงดังนี้ โดยเพิ่ม veth4 เข้าไป ns2 และ veth5 ใน ns3 ผมมีปัญหาเดียวกัน. ฉันสามารถ ping จากอินเทอร์เฟซใดก็ได้ใน ns1 ไปยังอินเทอร์เฟซใดก็ได้ใน ns2แต่ไม่สามารถเข้าถึงส่วนต่อประสานใด ๆ ใน ns3.
ลิงค์ sudo ip เพิ่ม veth4 ประเภท veth ชื่อเพียร์ veth5
ลิงค์ sudo ip ตั้งค่า veth4 netns ns2
sudo ip netns exec ns2 ip -6 addr เพิ่ม CCFF::4/127 เพียร์ CCFF::5/127 dev veth4
sudo ip netns exec ns2 ลิงก์ ip ตั้งค่า dev veth4
sudo ip netns exec ns2 ip -6 เส้นทางเพิ่ม CCFF::/64 ผ่าน CCFF::5
sudo ip netns เพิ่ม ns3
ลิงค์ sudo ip ตั้งค่า veth5 netns ns3
sudo ip netns exec ns3 ip -6 addr เพิ่ม CCFF::5/127 เพียร์ CCFF::4/127 dev veth5
sudo ip netns exec ns3 ลิงก์ ip ตั้งค่า dev veth5
sudo ip netns exec ns3 ip -6 เส้นทางเพิ่มค่าเริ่มต้นผ่าน CCFF::4
ดูเหมือนว่าฉันสามารถ ping อินเทอร์เฟซใน netns "เพื่อนบ้าน" / "เชื่อมต่อ" โดยตรงไปยังอินเทอร์เฟซที่ฉันส่ง Ping ได้เท่านั้น ฉันไม่สามารถ ping ผ่านเชนเนมสเปซสุทธิได้ การกำหนดเส้นทางถูกต้องทั้งหมด netns เริ่มต้นสามารถ ping อินเทอร์เฟซใดก็ได้ ns1 แต่ไม่มีอะไรเพิ่มเติม อินเทอร์เฟซใน ns1 สามารถ ping อินเทอร์เฟซใด ๆ ใน netns เริ่มต้นหรือ ns2 แต่ไม่มีอะไรใน ns3, และ ns3 สามารถ ping อะไรก็ได้ ns2 แต่ไม่มีอะไรเกินใน ns1 หรือ netns เริ่มต้น
นี่เป็นข้อ จำกัด ของเนมสเปซเครือข่ายหรือไม่
การแก้ไขปัญหา
เปิดใช้งานการส่งต่อ IPv6 แล้ว ip6tables เพิ่งตั้งค่าเป็น "อนุญาตทั้งหมด" ฉันไม่แน่ใจว่าต้องตรวจสอบอะไรอีก
$ip -6 ร
ccff::1 dev veth0 proto kernel metric 256 pref สื่อ
ccff::/127 dev veth0 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
ccff::/64 ผ่าน ccff::1 dev veth0 เมตริก 1024 pref สื่อ
fe80::/64 dev veth0 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
$sudo ip -n ns1 -6 r
ccff:: dev veth1 proto kernel metric 256 pref สื่อ
ccff::/127 dev veth1 proto kernel metric 256 pref สื่อ
ccff::3 dev veth2 proto kernel metric 256 pref สื่อ
ccff::2/127 dev veth2 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
ccff::/64 ผ่าน ccff::3 dev veth2 เมตริก 1024 pref สื่อ
fe80::/64 dev veth1 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
fe80::/64 dev veth2 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
ค่าเริ่มต้นผ่าน ccff:: dev veth1 metric 1024 pref medium
$sudo ip -n ns2 -6 r
ccff::2 dev veth3 proto kernel metric 256 pref สื่อ
ccff::2/127 dev veth3 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
ccff::5 dev veth4 proto kernel metric 256 pref สื่อ
ccff::4/127 dev veth4 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
ccff::/64 ผ่าน ccff::5 dev veth4 เมตริก 1024 pref สื่อ
fe80::/64 dev veth3 โปรโตเคอร์เนลเมตริก 256 pref สื่อ
fe80::/64 dev veth4 เคอร์เนลโปรโตเมตริก 256 pref สื่อ
ค่าเริ่มต้นผ่าน ccff::2 dev veth3 metric 1024 pref medium
$sudo ip -n ns3 -6 ร
ccff::4/127 dev veth5 เคอร์เนลโปรโตเมตริก 256 ลิงก์ดาวน์ pref สื่อ
ค่าเริ่มต้นผ่าน ccff::4 dev veth5 metric 1024 linkdown pref medium
$cat /proc/sys/net/ipv6/conf/all/forwarding
1
$cat /proc/sys/net/ipv6/conf/default/forwarding
1
$sudo ip6tables-บันทึก
# สร้างโดย ip6tables-save v1.8.4 เมื่อวันพุธที่ 17 พฤศจิกายน 22:02:48 น. 2564
*กรอง
: ยอมรับอินพุต [76565:173401906]
:ส่งต่อ ยอมรับ [0:0]
: ยอมรับเอาต์พุต [50440:6536664]
ให้สัญญา
# เสร็จสิ้นวันพุธที่ 17 พ.ย. 22:02:48 น. 2564
$lsb_release -a
ไม่มีโมดูล LSB
รหัสผู้จัดจำหน่าย: Ubuntu
คำอธิบาย: Ubuntu 20.04.3 LTS
เผยแพร่: 20.04
ชื่อรหัส: โฟกัส
$uname -a
Linux l13-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP อ. 26 ต.ค. 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux