เพื่อให้สัตวแพทย์ใช้งานได้ปลายด้านหนึ่งของอุโมงค์จะต้องเชื่อมต่อกับส่วนต่อประสานอื่น เนื่องจากคุณต้องการเก็บเสมือนนี้ทั้งหมดคุณสามารถเชื่อมสะพาน 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
br0
ตัวเองได้หรือไม่