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ą
echo 1 > /proc/sys/net/ipv4/ip_forward
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,
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
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,
ip link set tapm master brm
ip link set vm1 master brm
teraz podaj adresy mostowi i pozostałemu interfejsowi veth2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
teraz przywołaj vm2 i brm,
ip link set brm up
ip link set vm2 up
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
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
Możesz to również zrobić wstecz, tj. Z vm2 z powrotem do 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
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
ip netns add nnsm
następnie przesyłamy do niego vm2,
ip link set vm2 netns nnsm
wyposażamy nową przestrzeń nazw sieci w interfejs lo (absolutnie konieczne),
ip netns exec nnsm ip link set dev lo up
zezwalamy na NATting w głównej maszynie,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(jeśli masz połączenie z Internetem przez eth0 , w przeciwnym razie zmień odpowiednio), uruchom powłokę w nowej sieciowej przestrzeni nazw,
ip netns exec nnsm xterm &
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:
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
a teraz możesz nawigować z poziomu xterm.
Te ip
polecenia mogą być również wykonane z przed xterm
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
samo?