Để veth hoạt động, một đầu của đường hầm phải được bắc cầu bằng một giao diện khác. Vì bạn muốn giữ tất cả ảo này, bạn có thể bắc cầu cuối vm1 của đường hầm (vm2 là đầu kia của đường hầm) với giao diện ảo kiểu tap, trong một cây cầu gọi là brm. Bây giờ bạn cung cấp địa chỉ IP cho brm và vm2 (tương ứng 10.0.0.1 và 10.0.0.2), cho phép chuyển tiếp IPv4 bằng phương tiện
echo 1 > /proc/sys/net/ipv4/ip_forward
đưa tất cả các giao diện lên và thêm một tuyến đường hướng dẫn kernel cách tiếp cận địa chỉ IP 10.0.0.0/24. Đó là tất cả.
Nếu bạn muốn tạo nhiều cặp hơn, hãy lặp lại các bước bên dưới với các mạng con khác nhau, ví dụ 10.0.1.0/24, 10.0.2.0/24, v.v. Vì bạn đã bật chuyển tiếp IPv4 và thêm các tuyến thích hợp vào bảng định tuyến kernel, chúng sẽ có thể nói chuyện với nhau ngay lập tức.
Ngoài ra, hãy nhớ rằng hầu hết các lệnh bạn đang sử dụng (brctl, ifconfig, ...) đã lỗi thời: bộ iproute2 có các lệnh để thực hiện tất cả điều này, xem bên dưới cách sử dụng lệnh ip của tôi .
Đây là một chuỗi lệnh chính xác cho việc sử dụng các giao diện của loại veth :
đầu tiên tạo tất cả các giao diện cần thiết,
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
Lưu ý rằng chúng tôi đã không đưa ra brm và vm2 vì chúng tôi phải gán cho chúng địa chỉ IP, nhưng chúng tôi đã đưa lên tapm và vm1, điều cần thiết để đưa chúng vào cầu nối. Bây giờ làm nô lệ các giao diện tapm và vm1 đến cầu nối,
ip link set tapm master brm
ip link set vm1 master brm
Bây giờ cung cấp địa chỉ cho cây cầu và giao diện veth còn lại vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
Bây giờ mang vm2 và brm lên,
ip link set brm up
ip link set vm2 up
Không cần phải thêm tuyến vào mạng con 10.0.0.0/24 một cách rõ ràng, nó được tạo tự động ,, bạn có thể kiểm tra với ip route show . Kết quả này trong
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
Bạn cũng có thể làm ngược lại, tức là từ vm2 trở lại 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
Ứng dụng hữu ích nhất của các loại veth là không gian tên mạng , là thứ được sử dụng trong các thùng chứa Linux (LXC). Bạn bắt đầu một cái gọi là nnsm như sau
ip netns add nnsm
sau đó chúng tôi chuyển vm2 cho nó,
ip link set vm2 netns nnsm
chúng tôi cung cấp không gian tên mạng mới với giao diện lo (hoàn toàn cần thiết),
ip netns exec nnsm ip link set dev lo up
chúng tôi cho phép NATting trong máy chính,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(nếu bạn được kết nối với Internet thông qua eth0 , nếu không thì thay đổi tương ứng), bắt đầu một vỏ trong không gian tên mạng mới,
ip netns exec nnsm xterm &
và bây giờ, nếu bạn bắt đầu nhập vào xterm mới, bạn sẽ thấy bạn đang ở trong một máy ảo riêng biệt có địa chỉ IP 10.0.0.2, nhưng bạn có thể truy cập Internet. Ưu điểm của việc này là không gian tên mạng mới có ngăn xếp riêng, có nghĩa là, bạn có thể khởi động VPN trong đó trong khi phần còn lại của máy tính của bạn không có trên VPN. Đây là các LXC contraption được dựa trên.
CHỈNH SỬA:
Tôi đã làm sai, mang giao diện vm2 mang nó xuống và xóa địa chỉ của nó. Vì vậy, bạn cần thêm các lệnh này, từ bên trong 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
và bây giờ bạn có thể điều hướng từ trong xterm.
Các ip
lệnh cũng có thể được thực hiện trước xterm với
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
chính nó lên?