คำชี้แจงปัญหา
ด้วยการกำหนดค่าด้านล่าง คู่ 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