Bir veth sanal ağ nasıl kurulur


26

vethBirbirleriyle iletişim kurabilen üç sanal ağ arayüzü ( ) kurmak istiyorum. Üç düğümlü bir kümeyi simüle etmek için her program bir vetharabirime bağlanır . Mümkünse LXC olmadan yapmak istiyorum.

Kullanmayı denedim:

  • Üç vethçift oluşturuldu :sudo ip link add type veth
  • Bir köprü oluşturuldu sudo brctl addbr br0
  • Her bir çiftten birini köprüye ekledi:
    • sudo brctl addif br0 veth1
    • sudo brctl addif br0 veth3
    • sudo brctl addif br0 veth5
  • Arabirimleri yapılandırılmış:
    • 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

Sonra kullanarak çalışıyorsa doğruladı: ping -I veth0 10.0.0.202ama yok :(

Ben IP adresleri eklenmiş veth1, veth3, veth5ve br010.0.1.x / 24 aralığında arayüzleri. Ama bu yardımcı olmuyor.

Herhangi bir fikir? ya da bir rehber, LXC ile nasıl kullanılacağını buldum. Yoksa mümkün olmayan bir şey mi deniyorum?


br0kendisi kadar?
Grawity

Evet, bu kadar. Veth'in gibi yapılandırılmış
Reinder

Yanıtlar:


31

Veth çalışması için, tünelin bir ucu başka bir arayüz ile köprülenmiş olmalıdır. Tüm bunları sanal olarak tutmak istediğiniz için, tünelin vm1 ucunu (vm2 tünelin diğer ucudur), brm adlı bir köprüde, musluk tipi bir sanal arabirim ile köprüleyebilirsiniz. Şimdi IP adreslerini brm'ye ve vm2'ye (sırasıyla 10.0.0.1 ve 10.0.0.2) veriyorsunuz, IPv4'ü yönlendirme yoluyla

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

tüm arayüzleri yukarı kaldırın ve çekirdeğe 10.0.0.0/24 IP adreslerine nasıl erişileceğini bildiren bir rota ekleyin. Bu kadar.

Daha fazla çift oluşturmak istiyorsanız, aşağıdaki adımları farklı alt ağlarla, örneğin 10.0.1.0/24, 10.0.2.0/24 vb. İle tekrarlayın. IPv4 iletmeyi etkinleştirdiğiniz ve çekirdek yönlendirme tablosuna uygun yollar eklediğinizden hemen birbirleriyle konuşabilecekler.

Ayrıca, kullandığınız komutların çoğunun (brctl, ifconfig, ...) eski olduğunu unutmayın: iproute2 suite tüm bunları yapmak için komutlara sahiptir, ip komutunu kullanmamın altına bakın .

Bu, veth tipindeki arayüzlerin kullanımı için doğru bir komut dizisidir :

ilk önce gerekli tüm arayüzleri yaratın,

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

Dikkat edelim ki brm ve vm2'yi getirmedik çünkü IP adreslerini atamak zorunda kaldık ama onları brm'ye eklemek için gerekli olan tapm ve vm1'i getirdik. Şimdi vm1 ve tapm ara yüzlerini brm köprüsüne,

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

şimdi köprüye ve vm2 arabirimine kalan veth arayüzüne adresler ver

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

şimdi vm2 ve brm'yi getir,

ip link set brm up
ip link set vm2 up

Rotayı 10.0.0.0/24 alt ağına açıkça eklemenize gerek yoktur, otomatik olarak oluşturulur, ip yolu gösterisini kontrol edebilirsiniz . Bu sonuçlanır

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

Ayrıca geriye doğru da yapabilirsiniz, yani vm2'den brm'ye:

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

Veth türündeki NIC'lerin en kullanışlı uygulaması, Linux konteynerlerinde (LXC) kullanılan ağ ad alanıdır. Aşağıdaki gibi nnsm denilen birini başlatır

ip netns add nnsm

sonra vm2'yi ona aktarırız,

ip link set vm2 netns nnsm 

Yeni ağ ad alanını lo arayüzü ile donatıyoruz (kesinlikle gerekli),

ip netns exec nnsm  ip link set dev lo up

ana makinede NATting'e izin veriyoruz,

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

(eğer internete eth0 ile bağlıysanız , aksi takdirde değiştiriniz), yeni ağ ad alanında bir kabuk başlatın,

ip netns exec nnsm xterm & 

ve şimdi, eğer yeni xterm'de yazmaya başlarsanız, 10.0.0.2 IP adresine sahip ayrı bir sanal makinede olduğunuzu göreceksiniz, ancak İnternete ulaşabilirsiniz. Bunun avantajı yeni ağ ad pc geri kalanı ise araçlar, örneğin, bunu bir VPN başlayabilirsiniz kendi yığını, sahip olmasıdır değil VPN üzerinde. Bu, LXC'lerin dayandığı kısıtlamadır.

DÜZENLE:

Bir hata yaptım, vm2 arayüzünü getirmek onu aşağı indirdi ve adresini temizledi. Bu nedenle, bu komutları xterm içinden eklemeniz gerekir:

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

ve şimdi xterm içinden gezinebilirsiniz.

ipKomutlar ayrıca xterm'den önce yapılabilir

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

Açıklama için teşekkür ederim. Sadece xterm'de lo görüyorum, vm2 arayüzü eksik.
Reinder,

Tekrar teşekkürler. Üç tane xterm kurmak için bir senaryo hazırladım, ve kutu birbirlerine ping
attı

Sadece bir sorun .... Bir xterm'de bir UPD yayını gönderdiğimde diğerleri paketi 10.0.0.254'ten (brm) alır.
Senaryom

Ben VM1'i yetiştirme sorun var kadar :( # ip bağlantı eklenti dev VM1 tipi Veth akran adı vm2 ip: rtnetlink cevaplar: SIOCGIFFLAGS: Dosya ip yukarı # ip bağlantı seti dev VM1'i var Böyle bir aygıt
resultsway

@ MariusMatutiae Birkaç kez denemek zorunda kaldım, bu yüzden ilk komutu kabul ediyorum, ancak bir şekilde kopya pastamın ikincisi için uygun değil (kısaca cihaza minicom kullanıyorum) bu yüzden kısacası tam olarak önerildiği gibi takip ettim. Sanırım iproute2 paketim yok.
resultsway

0

İşte bu işe yaradığı 5 düğümlü köprü kurulumu. NodeX arabirimlerine adres atamak için ifconfig kullanabilmelisiniz

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

ve temizlemek

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.