Chciałbym skonfigurować trzy interfejsy sieci wirtualnej ( veth
), które mogą się ze sobą komunikować. Aby zasymulować klaster z trzema węzłami, każdy program łączy się z jednym veth
interfejsem. Chciałbym to zrobić bez LXC, jeśli to możliwe.
Próbowałem użyć:
- Utworzono trzy
veth
pary:sudo ip link add type veth
- Utworzono most
sudo brctl addbr br0
- Dodano jedną z każdej pary do mostu:
sudo brctl addif br0 veth1
sudo brctl addif br0 veth3
sudo brctl addif br0 veth5
- Skonfigurowane interfejsy:
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
Następnie sprawdziłem, czy działa przy użyciu: ping -I veth0 10.0.0.202
ale nie działa :(
I dodaje adresy IP do veth1
, veth3
, veth5
i br0
interfejsów w zakresie 10.0.1.x / 24. Ale to nie pomaga.
Jakieś pomysły? lub przewodnik, wszystko, co znajduję w tym, jak go używać z LXC. A może próbuję czegoś, co nie jest możliwe?
linux
networking
Reinder
źródło
źródło
br0
samo?Odpowiedzi:
Aby veth działał, jeden koniec tunelu musi być połączony z innym interfejsem. Ponieważ chcesz zachować to wszystko jako wirtualne, możesz zmostkować koniec vm1 tunelu (vm2 jest drugim końcem tunelu) za pomocą interfejsu wirtualnego typu tap, w moście zwanym brm. Teraz podajesz adresy IP brm i vm2 (odpowiednio 10.0.0.1 i 10.0.0.2), włącz przekazywanie IPv4 za pomocą
uruchom wszystkie interfejsy i dodaj trasę instruującą jądro, jak dotrzeć do adresów IP 10.0.0.0/24. To wszystko.
Jeśli chcesz utworzyć więcej par, powtórz poniższe kroki z różnymi podsieciami, na przykład 10.0.1.0/24, 10.0.2.0/24 i tak dalej. Ponieważ włączyłeś przekazywanie IPv4 i dodałeś odpowiednie trasy do tabeli routingu jądra, będą mogli od razu ze sobą rozmawiać.
Pamiętaj też, że większość używanych poleceń (brctl, ifconfig, ...) jest przestarzała: pakiet iproute2 zawiera polecenia do wykonania tego wszystkiego, patrz poniżej moje użycie polecenia ip .
To jest poprawna sekwencja poleceń do używania interfejsów typu veth :
najpierw utwórz wszystkie wymagane interfejsy,
Zauważ, że nie uruchomiliśmy brm i vm2, ponieważ musimy przypisać im adresy IP, ale wprowadziliśmy tapm i vm1, co jest konieczne, aby uwzględnić je w bryle mostu. Teraz zniewolmy interfejsy tapm i vm1 do mostu brm,
teraz podaj adresy mostowi i pozostałemu interfejsowi veth2,
teraz przywołaj vm2 i brm,
Nie ma potrzeby jawnego dodawania trasy do podsieci 10.0.0.0/24, jest ona generowana automatycznie, można sprawdzić za pomocą ip route show . To skutkuje
Możesz to również zrobić wstecz, tj. Z vm2 z powrotem do brm:
Najbardziej użyteczne stosowanie kart sieciowych z Veth rodzaj jest nazw sieci , co jest, co jest wykorzystywane w pojemnikach Linux (lxc). Możesz uruchomić jeden o nazwie nnsm w następujący sposób
następnie przesyłamy do niego vm2,
wyposażamy nową przestrzeń nazw sieci w interfejs lo (absolutnie konieczne),
zezwalamy na NATting w głównej maszynie,
(jeśli masz połączenie z Internetem przez eth0 , w przeciwnym razie zmień odpowiednio), uruchom powłokę w nowej sieciowej przestrzeni nazw,
a teraz, jeśli zaczniesz pisać w nowym xterm, przekonasz się, że jesteś na osobnej maszynie wirtualnej o adresie IP 10.0.0.2, ale możesz połączyć się z Internetem. Zaletą tego jest to, że nowa przestrzeń nazw sieci ma swój własny stos, co oznacza, na przykład, możesz uruchomić w niej VPN, podczas gdy reszta twojego komputera nie jest w VPN. To jest urządzenie, na którym bazują LXC.
EDYTOWAĆ:
Popełniłem błąd, sprowadzając interfejs vm2, sprowadza go i usuwa adres. Dlatego musisz dodać te polecenia z poziomu xterm:
a teraz możesz nawigować z poziomu xterm.
Te
ip
polecenia mogą być również wykonane z przed xtermźródło
Oto 5-węzłowy most, którego używam, który działa. Powinieneś być w stanie używać ifconfig do przypisywania adresów do interfejsów NodeX
i posprzątać
źródło