ฉันต้องทำการตั้งค่าเช่นนี้ (กับ Linux):
- ฉันต้องการมีเนมสเปซเครือข่าย (สมมติว่า
weth_ns) ด้วยอินเทอร์เฟซเครือข่ายที่เชื่อมต่อกับอินเทอร์เน็ต (th0)
- ฉันต้องการมี แตกต่าง อินเทอร์เฟซเครือข่ายเป็นเส้นทางเริ่มต้นในเนมสเปซโฮสต์ (
eth0)
- ฉันต้องการที่จะสามารถใช้สิ่งต่าง ๆ เช่น
ขด, กับ บาง ชนิดของอินเทอร์เฟซเพื่อใช้เครือข่ายอย่างโปร่งใส ข้างใน เนมสเปซนั้นเพื่อเชื่อมต่ออินเทอร์เน็ต
อย่างนั้นอย่างนี้.

ฉันไม่สามารถทำให้มันทำงานได้ สิ่งที่ฉันทำจนถึงตอนนี้:
ip netns เพิ่ม weth_ns
ตั้งค่าลิงค์ ip weth0 netns weth_ns
ip netns exec weth_ns ลิงก์ ip ตั้งค่า dev weth0 ขึ้น
ip netns exec weth_ns ip a # เพื่อดูรายการเพื่อให้แน่ใจว่ามีอยู่
ip netns ผู้บริหาร weth_ns dhclient weth0
ip netns exec weth_ns curl website.com # ทำงานได้ตามปกติ
สิ่งนี้ตั้งค่าเนมสเปซและวางอินเทอร์เฟซไว้ที่นั่น นั่นทำให้ curl ทำงานในเนมสเปซ ตอนนี้ฉันต้องการใช้การเชื่อมต่อเนมสเปซแบบแยกจากโฮสต์
สิ่งที่ฉันพยายามทำคือตั้งค่าบริดจ์และตั้งค่า iptables ภายในเนมสเปซ ดังนั้นสิ่งที่ฉันทำ:
ip link เพิ่ม veth0_left พิมพ์ veth peer veth0_right
ลิงค์ ip เพิ่มบริดจ์ชนิดบริดจ์ 0
ip link ตั้งค่า bridge0 ขึ้น
ip addr add 10.9.0.0/24 dev bridge0 # 10.9.0.0 คือที่อยู่ที่ฉันคิดขึ้นมา
ip link ตั้งค่า veth0_left master bridge0 ขึ้น
ip link ตั้ง dev veth0_right netns weth_ns
ip netns exec weth_ns ip link set dev veth0_right up
ip netns exec mobile_ns ip addr เพิ่ม 10.9.0.1/24 dev veth0_right
นี่เป็นการเพิ่ม brige; ตอนนี้ฉันสามารถ ping จากเนมสเปซไปยังเนมสเปซได้สำเร็จ ดังนั้นสะพานจึงใช้งานได้
ping 10.9.0.1 # ใช้งานได้
ip netns exec mobile_ns ping 10.9.0.0 # ใช้งานได้
และตอนนี้ฉันต้องตั้งค่า iptables เพื่อใช้การเชื่อมต่อภายในเนมสเปซ ฉันสงสัยว่านี่คือจุดที่ฉันทำผิดพลาดบางอย่าง นี่คือสิ่งที่ฉันรวบรวมจากแหล่งออนไลน์ต่างๆ:
ip netns exec mobile_ns ทุบตี
# ทั้งหมดต่อไปนี้ในเนมสเปซทุบตี:
iptables -t nat -A POSTROUTING -s 10.9.0.0/255.255.255.0 -o weth0 -j MASQUERADE
iptables -A FORWARD -i weth0 -o veth0_right -m state --state ESTABLISHED,RELATED -j ยอมรับ
iptables -A FORWARD -o weth0 -i veth0_right -m state --state ESTABLISHED,RELATED -j ยอมรับ
(ทุกเครือข่ายที่เกี่ยวข้องมี /proc/sys/net/ipv4/conf/<network>/forwarding ตั้งค่าเป็น 1 จากทั้งภายในและภายนอกเนมสเปซ)
และ...มันไม่ทำงาน เครือข่ายของฉันควรมีลักษณะดังนี้ แต่ฉันไม่สามารถเชื่อมต่อผ่าน curl ด้วยอย่างใดอย่างหนึ่ง veth0_left หรือ สะพาน0 เชื่อมต่อเครือข่าย.

ฉันคงทำอะไรผิดไปสักแห่ง
แก้ไข:
เพื่อระบุว่า "ไม่ทำงานหมายความว่าอย่างไร"
ขด --interface bridge0 8.8.8.8
curl: (7) ล้มเหลวในการเชื่อมต่อกับพอร์ต 8.8.8.8 80: ไม่มีเส้นทางไปยังโฮสต์
ขด -- อินเทอร์เฟซ veth0_left 8.8.8.8
curl: (7) ล้มเหลวในการเชื่อมต่อกับพอร์ต 8.8.8.8 80: ไม่มีเส้นทางไปยังโฮสต์
เมื่อฉันพยายามดู tcpdump ภายในเนมสเปซ ฉันเห็น ใครมี คำขอ ARP แต่บนอินเทอร์เฟซบริดจ์เท่านั้น ดูเหมือนว่าจะไม่ "ไป" ในส่วนต่อประสาน weth0