Cara mengatur jaringan virtual `veth`

26

Saya ingin mengatur tiga antarmuka jaringan virtual ( veth) yang dapat berkomunikasi satu sama lain. Untuk mensimulasikan tiga simpul cluster, setiap program kemudian mengikat ke satu vethantarmuka. Saya ingin melakukannya tanpa LXC jika memungkinkan.

Saya mencoba menggunakan:

  • Dibuat tiga vethpasang:sudo ip link add type veth
  • Membuat jembatan sudo brctl addbr br0
  • Menambahkan satu dari setiap pasangan ke jembatan:
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • Konfigurasi antarmuka:
    • 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

Kemudian saya memverifikasi apakah berfungsi menggunakan: ping -I veth0 10.0.0.202tetapi tidak :(

Saya menambahkan alamat IP ke veth1, veth3, veth5dan br0antarmuka di kisaran 10.0.1.x / 24. Tapi itu tidak membantu.

Ada ide? atau panduan, semua saya temukan dalam cara menggunakannya dengan LXC. Atau apakah saya mencoba sesuatu yang tidak mungkin?

Reinder
sumber
Apakah br0itu sendiri?
grawity
Ya, sudah habis. Dikonfigurasi seperti veth's
Reinder

Jawaban:

31

Agar veth berfungsi, satu ujung terowongan harus dijembatani dengan antarmuka lain. Karena Anda ingin menyimpan ini semua virtual, Anda dapat menjembatani ujung vm1 terowongan (vm2 adalah ujung lain dari terowongan) dengan antarmuka virtual tipe-ketukan, di jembatan yang disebut brm. Sekarang Anda memberikan alamat IP ke brm dan vm2 (masing-masing 10.0.0.1 dan 10.0.0.2), aktifkan penerusan IPv4 melalui

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

tingkatkan semua antarmuka, dan tambahkan rute yang memerintahkan kernel cara mencapai alamat IP 10.0.0.0/24. Itu saja.

Jika Anda ingin membuat lebih banyak pasangan, ulangi langkah-langkah di bawah ini dengan subnet yang berbeda, misalnya 10.0.1.0/24, 10.0.2.0/24, dan seterusnya. Karena Anda mengaktifkan penerusan IPv4 dan menambahkan rute yang sesuai ke tabel routing kernel, mereka akan dapat berbicara satu sama lain segera.

Juga, ingat bahwa sebagian besar perintah yang Anda gunakan (brctl, ifconfig, ...) sudah usang: suite iproute2 memiliki perintah untuk melakukan semua ini, lihat di bawah ini saya menggunakan perintah ip .

Ini adalah urutan perintah yang benar untuk penggunaan antarmuka tipe veth :

pertama buat semua antarmuka yang diperlukan,

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

Perhatikan kami tidak memunculkan brm dan vm2 karena kami harus menetapkannya alamat IP, tetapi kami memunculkan tapm dan vm1, yang perlu untuk memasukkannya ke dalam brm jembatan. Sekarang memperbudak antarmuka tapm dan vm1 ke jembatan brm,

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

sekarang berikan alamat ke bridge dan ke antarmuka veth2 veth yang tersisa,

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

sekarang bawa vm2 dan brm ke atas,

ip link set brm up
ip link set vm2 up

Tidak perlu menambahkan rute ke subnet 10.0.0.0/24 secara eksplisit, itu dihasilkan secara otomatis, Anda dapat memeriksa dengan ip route show . Ini menghasilkan

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

Anda juga dapat melakukannya mundur, yaitu dari vm2 kembali ke 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

Aplikasi NIC yang paling berguna dari jenis Veth adalah namespace jaringan , yang digunakan dalam wadah Linux (LXC). Anda memulai satu yang disebut nnsm sebagai berikut

ip netns add nnsm

maka kami mentransfer vm2 ke sana,

ip link set vm2 netns nnsm 

kami memberkati namespace jaringan baru dengan antarmuka lo (benar-benar diperlukan),

ip netns exec nnsm  ip link set dev lo up

kami mengizinkan NATting di mesin utama,

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

(jika Anda terhubung ke Internet melalui eth0 , jika tidak ubah sesuai), mulai shell di namespace jaringan baru,

ip netns exec nnsm xterm & 

dan sekarang, jika Anda mulai mengetik xterm baru, Anda akan menemukan Anda berada di mesin virtual yang terpisah dengan alamat IP 10.0.0.2, tetapi Anda dapat menjangkau Internet. Keuntungan dari ini adalah bahwa namespace jaringan baru memiliki tumpukan sendiri, yang berarti, misalnya, Anda dapat memulai VPN di dalamnya sementara sisa komputer Anda tidak di VPN. Ini adalah alat yang mendasari LXC.

EDIT:

Saya membuat kesalahan, membawa antarmuka vm2 membawanya turun dan membersihkan alamatnya. Jadi, Anda perlu menambahkan perintah-perintah ini, dari dalam 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

dan sekarang Anda dapat menavigasi dari dalam xterm.

The ipperintah juga dapat dilakukan sebelum xterm dengan

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
MariusMatutiae
sumber
Terima kasih atas penjelasannya. Saya hanya melihat lo di xterm, antarmuka vm2 hilang.
Reinder
Terima kasih lagi. Saya telah membuat skrip untuk mengatur tiga xterm, dan kaleng ping satu sama lain :)
Reinder
Hanya satu masalah .... Ketika saya mengirim siaran UPD dalam satu xterm yang lain menerima paket dari 10.0.0.254 (brm). Untuk skrip saya lihat: di sini (tidak dapat mempostingnya di komentar)
Reinder
Saya memiliki masalah dalam memunculkan vm1 :( # tautan ip tambahkan dev tipe vm1 veth nama rekan vm2 ip: jawaban RTNETLINK: File ada # tautan ip atur dev vm1 ke atas ip: SIOCGIFFLAGS: Tidak ada perangkat seperti itu
resultsway
@ MariusMatutiae Saya harus mencoba beberapa kali jadi saya setuju dengan perintah pertama tapi entah bagaimana salin tempel saya tidak sesuai untuk yang kedua (Saya menggunakan minicom ke perangkat) jadi singkatnya saya mengikuti persis seperti yang disarankan. Saya rasa saya tidak punya paket iproute2.
resultsway
0

Berikut ini adalah pengaturan jembatan 5 simpul yang saya gunakan yang berfungsi. Anda harus dapat menggunakan ifconfig untuk menetapkan alamat ke antarmuka 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

dan untuk membersihkan

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
Neil McGill
sumber