วิธีการตั้งค่าเครือข่ายเสมือน "veth"


26

ฉันต้องการตั้งค่าอินเทอร์เฟซเครือข่ายเสมือนสามตัว ( veth) ซึ่งสามารถสื่อสารกันได้ ในการจำลองคลัสเตอร์สามโหนดแต่ละโปรแกรมจะผูกกับหนึ่งvethอินเตอร์เฟส ฉันต้องการทำโดยไม่มี LXC ถ้าเป็นไปได้

ฉันพยายามใช้:

  • สร้างสามvethคู่:sudo ip link add type veth
  • สร้างสะพาน sudo brctl addbr br0
  • เพิ่มหนึ่งคู่ในแต่ละบริดจ์:
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • กำหนดค่าอินเตอร์เฟส:
    • sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
    • sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
    • sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up

จากนั้นฉันตรวจสอบว่าใช้งานping -I veth0 10.0.0.202ได้หรือไม่ :(

ผมเพิ่มที่อยู่ IP ไปveth1, veth3, veth5และbr0อินเตอร์เฟซในช่วง 10.0.1.x / 24 แต่นั่นก็ไม่ได้ช่วยอะไร

ความคิดใด ๆ หรือคำแนะนำทั้งหมดที่ฉันพบในการใช้งานกับ LXC หรือฉันกำลังลองสิ่งที่ไม่สามารถทำได้


คือbr0ตัวเองได้หรือไม่
grawity

ใช่มันขึ้นอยู่ กำหนดค่าเหมือนสัตว์เลี้ยง
Reinder

คำตอบ:


31

เพื่อให้สัตวแพทย์ใช้งานได้ปลายด้านหนึ่งของอุโมงค์จะต้องเชื่อมต่อกับส่วนต่อประสานอื่น เนื่องจากคุณต้องการเก็บเสมือนนี้ทั้งหมดคุณสามารถเชื่อมสะพาน vm1 ที่ปลายอุโมงค์ (vm2 คือปลายอุโมงค์) ด้วยอินเตอร์เฟสเสมือนแบบแตะในสะพานที่เรียกว่า brm ตอนนี้คุณให้ที่อยู่ IP แก่ brm และ vm2 (10.0.0.1 และ 10.0.0.2 ตามลำดับ) เปิดใช้งานการส่งต่อ IPv4 โดยใช้วิธี

echo 1 > /proc/sys/net/ipv4/ip_forward

นำส่วนต่อประสานทั้งหมดขึ้นมาและเพิ่มเส้นทางที่สั่งให้เคอร์เนลทำอย่างไรจึงจะเข้าถึงที่อยู่ IP 10.0.0.0/24 นั่นคือทั้งหมดที่

หากคุณต้องการสร้างคู่เพิ่มเติมให้ทำซ้ำขั้นตอนด้านล่างด้วยซับเน็ตที่แตกต่างกันเช่น 10.0.1.0/24, 10.0.2.0/24 และอื่น ๆ เนื่องจากคุณเปิดใช้งานการส่งต่อ IPv4 และเพิ่มเส้นทางที่เหมาะสมไปยังตารางการกำหนดเส้นทางเคอร์เนลพวกเขาจะสามารถพูดคุยกันได้ทันที

นอกจากนี้โปรดจำไว้ว่าคำสั่งส่วนใหญ่ที่คุณใช้ (brctl, ifconfig, ... ) ล้าสมัยแล้ว: ชุดiproute2มีคำสั่งให้ทำทั้งหมดนี้ดูด้านล่างการใช้คำสั่งip

นี่เป็นลำดับของคำสั่งที่ถูกต้องสำหรับการใช้อินเตอร์เฟสของประเภทveth :

สร้างส่วนต่อประสานที่จำเป็นทั้งหมดก่อน

ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge

โปรดสังเกตว่าเราไม่ได้นำ brm และ vm2 ขึ้นมาเพราะเราต้องกำหนดที่อยู่ IP แต่เราได้นำ tapm และ vm1 ซึ่งจำเป็นต้องรวมไว้ในบริดจ์ brm ในตอนนี้ให้อินเทอร์เฟซ tapm และ vm1 เป็นสะพาน brm

ip link set tapm master brm
ip link set vm1 master brm

ตอนนี้ให้ที่อยู่แก่บริดจ์และส่วนต่อประสาน veth ที่เหลือ vm2

ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2

ตอนนี้นำ vm2 และ brm ขึ้นมา

ip link set brm up
ip link set vm2 up

ไม่มีความจำเป็นที่จะเพิ่มเส้นทางไปยังเครือข่ายย่อย 10.0.0.0/24 อย่างชัดเจนว่ามันถูกสร้างขึ้นโดยอัตโนมัติ ,, คุณอาจตรวจสอบกับIP แสดงเส้นทาง ผลลัพธ์นี้ใน

ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms

คุณสามารถย้อนกลับได้เช่นจาก vm2 กลับไปที่ brm:

ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms

--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

แอปพลิเคชันที่มีประโยชน์มากที่สุดของ NICs ของveth kind คือเนมสเปซเครือข่ายซึ่งเป็นสิ่งที่ใช้ในตู้คอนเทนเนอร์ Linux (LXC) คุณเริ่มต้นหนึ่งเรียกว่า nnsm ดังนี้

ip netns add nnsm

จากนั้นเราโอน vm2 ไปยังมัน

ip link set vm2 netns nnsm 

เรามอบเนมสเปซเครือข่ายใหม่ด้วยอินเตอร์เฟซ lo (จำเป็นจริงๆ)

ip netns exec nnsm  ip link set dev lo up

เราอนุญาตให้ NATting ในเครื่องหลัก

iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(หากคุณเชื่อมต่อกับอินเทอร์เน็ตผ่านeth0มิฉะนั้นจะเปลี่ยนแปลงตามนั้น) เริ่มต้นเชลล์ในเนมสเปซเครือข่ายใหม่

ip netns exec nnsm xterm & 

และตอนนี้หากคุณเริ่มพิมพ์ใน xterm ใหม่คุณจะพบว่าคุณอยู่ในเครื่องเสมือนที่แยกต่างหากพร้อมด้วยที่อยู่ IP 10.0.0.2 แต่คุณสามารถเข้าถึงอินเทอร์เน็ตได้ ข้อดีของการทำเช่นนี้คือเนมสเปซเครือข่ายใหม่มีสแต็กของตัวเองซึ่งหมายความว่าคุณสามารถเริ่ม VPN ในขณะที่ส่วนที่เหลือของพีซีของคุณไม่ได้อยู่ใน VPN นี่คือการคุมกำเนิด LXCs ขึ้นอยู่กับ

แก้ไข:

ฉันทำผิดพลาดการนำอินเตอร์เฟส vm2 มาทำให้มันลดลงและลบที่อยู่ออก ดังนั้นคุณต้องเพิ่มคำสั่งเหล่านี้จากภายใน xterm:

ip addr add 10.0.0.2/24 dev vm2
ip link set dev  vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

และตอนนี้คุณสามารถนำทางจากภายใน xterm

ipคำสั่งนอกจากนี้ยังสามารถทำมาก่อน xterm ด้วย

ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1

ขอบคุณสำหรับคำอธิบาย ฉันเห็นเฉพาะใน xterm อินเตอร์เฟส vm2 หายไป
Reinder

ขอบคุณอีกครั้ง. ผมได้ทำสคริปต์เพื่อติดตั้งสาม xterm ของและสามารถ ping กับแต่ละอื่น ๆ :)
Reinder

ปัญหาเดียวเท่านั้น .... เมื่อฉันส่งการออกอากาศ UPD ในหนึ่ง xterm อื่น ๆ ได้รับแพ็คเก็ตจาก 10.0.0.254 (brm) สำหรับสคริปต์ของฉันดู: ที่นี่ (ไม่สามารถโพสต์ไว้ในความคิดเห็น)
Reinder

ฉันมีปัญหาในการแสดง vm1 up :( # ip link เพิ่ม dev vm1 ประเภท veth เพียร์ชื่อ vm2 ip: RTNETLINK คำตอบ: ไฟล์มีอยู่ # ip link set dev vm1 ขึ้น ip: SIOCGIFFLAGS: ไม่มีอุปกรณ์ดังกล่าว
resultsway

@ MariusMatutiae ฉันต้องลองสองครั้งดังนั้นฉันจึงเห็นด้วยกับคำสั่งแรก แต่อย่างใดคัดลอกวางของฉันไม่เหมาะสำหรับที่สอง (Iam ใช้ minicom ไปยังอุปกรณ์) ดังนั้นในระยะสั้นฉันตามอย่างที่แนะนำ ฉันคิดว่าฉันไม่มีแพ็คเกจ iproute2
resultsway

0

นี่คือการตั้งค่าบริดจ์ 5 โหนดที่ฉันใช้ คุณควรจะสามารถใช้ ifconfig เพื่อกำหนดที่อยู่ลงในอินเตอร์เฟส NodeX

ip link add dev Node1s type veth peer name Node1
ip link add dev Node2s type veth peer name Node2
ip link add dev Node3s type veth peer name Node3
ip link add dev Node4s type veth peer name Node4
ip link add dev Node5s type veth peer name Node5

ip link set Node1 up
ip link set Node2 up
ip link set Node3 up
ip link set Node4 up
ip link set Node5 up

ip link set Node1s up
ip link set Node2s up
ip link set Node3s up
ip link set Node4s up
ip link set Node5s up

brctl addbr Br
ifconfig Br up

brctl addif Br Node1s
brctl addif Br Node2s
brctl addif Br Node3s
brctl addif Br Node4s
brctl addif Br Node5s

และทำความสะอาด

brctl delif Br Node1s
brctl delif Br Node2s
brctl delif Br Node3s
brctl delif Br Node4s
brctl delif Br Node5s
brctl delif Br Node1
brctl delif Br Node2
brctl delif Br Node3
brctl delif Br Node4
brctl delif Br Node5

ifconfig Br down
brctl delbr Br

ip link del dev Node1
ip link del dev Node2
ip link del dev Node3
ip link del dev Node4
ip link del dev Node5
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.