Cách thiết lập mạng ảo `veth`


26

Tôi muốn thiết lập ba giao diện mạng ảo ( veth) có thể giao tiếp với nhau. Để mô phỏng một cụm ba nút, mỗi chương trình sau đó liên kết với một vethgiao diện. Tôi muốn làm điều đó mà không có LXC nếu có thể.

Tôi đã thử sử dụng:

  • Tạo ba vethcặp:sudo ip link add type veth
  • Tạo một cây cầu sudo brctl addbr br0
  • Đã thêm một trong mỗi cặp vào cầu:
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • Cấu hình các giao diện:
    • 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

Sau đó, tôi đã xác minh nếu hoạt động bằng cách sử dụng: ping -I veth0 10.0.0.202nhưng nó không :(

Các tôi đã thêm địa chỉ IP đến veth1, veth3, veth5br0giao diện trong khoảng 10.0.1.x / 24. Nhưng điều đó không có ích.

Có ý kiến ​​gì không? hoặc một hướng dẫn, tất cả những gì tôi tìm thấy trong cách sử dụng nó với LXC. Hay tôi đang thử thứ gì đó không thể?


br0chính nó lên?
grawity

Vâng, nó là lên. Định cấu hình nó giống như veth's
Reinder

Câu trả lời:


31

Để 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 vethkhô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 iplệ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

Cám ơn vì đã giải thích. Tôi chỉ thấy lo trong xterm, giao diện vm2 bị thiếu.
Giới thiệu lại

Cảm ơn một lần nữa. Tôi đã tạo một tập lệnh để thiết lập ba xterm và có thể ping với nhau :)
Reinder

Chỉ có một vấn đề .... Khi tôi gửi một bản phát sóng CẬP NHẬT trong một xterm, những người khác nhận được gói từ 10.0.0.254 (brm). Đối với kịch bản của tôi, hãy xem: tại đây (không thể đăng nó trong phần bình luận)
Reinder

Tôi gặp sự cố khi nâng vm1 lên :( # ip link thêm dev vm1 loại veth tên ngang hàng vm2 ip: RTNETLINK câu trả lời: Tệp tồn tại # ip link set dev vm1 up ip: SIOCGIFFLAGS: Không có thiết bị như vậy
quả

@ MariusMatutiae Tôi đã phải thử vài lần vì vậy tôi đồng ý với lệnh đầu tiên nhưng bằng cách nào đó, bản sao dán của tôi không phù hợp cho lần thứ hai (Iam sử dụng minicom cho thiết bị) vì vậy tôi đã làm theo đúng như đề xuất. Tôi nghĩ rằng tôi không có gói iproute2.
quả

0

Đây là một thiết lập cầu 5 nút mà tôi sử dụng hoạt động. Bạn sẽ có thể sử dụng ifconfig để gán địa chỉ trên các giao diện 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

và để làm sạch

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.