Score:0

เชื่อมต่ออินเทอร์เน็ตผ่านการเชื่อมต่อเครือข่ายภายในเนมสเปซเครือข่ายโดยไม่ต้องตั้งค่าเป็นเส้นทางเริ่มต้น

ธง ca

ฉันต้องทำการตั้งค่าเช่นนี้ (กับ 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 เชื่อมต่อเครือข่าย.

แผนภาพที่ 2

ฉันคงทำอะไรผิดไปสักแห่ง


แก้ไข:

เพื่อระบุว่า "ไม่ทำงานหมายความว่าอย่างไร"

ขด --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

Score:0
ธง ca

อา. สิ่งที่เป็น ขด - อินเทอร์เฟซ ไม่สามารถหาเส้นทางได้อย่างน่าอัศจรรย์

ตามที่อธิบายไว้ที่นี่

https://superuser.com/questions/1223177/why-does-curl-not-work-with-non-default-network-interface-in-centos-6

โพสต์คำตอบ

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