Aby veth fungoval, musí být jeden konec tunelu přemostěn jiným rozhraním. Protože toto vše chcete zachovat virtuální, můžete přemostit konec tunelu vm1 (vm2 je druhý konec tunelu) pomocí virtuálního rozhraní typu tap v mostě zvaném brm. Nyní přidělíte IP adresy brm a vm2 (10.0.0.1 a 10.0.0.2), povolíte přesměrování IPv4 pomocí
echo 1 > /proc/sys/net/ipv4/ip_forward
aktivujte všechna rozhraní a přidejte cestu, která kernel instruuje, jak dosáhnout IP adres 10.0.0.0/24. To je vše.
Pokud chcete vytvořit více párů, opakujte kroky níže s různými podsítěmi, například 10.0.1.0/24, 10.0.2.0/24 atd. Protože jste povolili předávání IPv4 a přidali příslušné cesty do směrovací tabulky jádra, budou spolu moci okamžitě mluvit.
Pamatujte také, že většina příkazů, které používáte (brctl, ifconfig,...), je zastaralá:iproute2 Suite má příkazy k tomu všemu, viz níže moje použití ip příkaz.
Toto je správná posloupnost příkazů pro použití rozhraní typu veth :
nejprve vytvořte všechna požadovaná rozhraní,
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
Všimněte si, že jsme nevyvolali brm a vm2, protože jim musíme přiřadit IP adresy, ale vyvolali jsme tapm a vm1, které je nutné zahrnout do mostu brm. Nyní zotročte rozhraní tapm a vm1 na most brm,
ip link set tapm master brm
ip link set vm1 master brm
nyní zadejte adresy mostu a zbývajícímu rozhraní veth vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
nyní přiveďte vm2 a brm up,
ip link set brm up
ip link set vm2 up
Není třeba přidávat trasu do podsítě 10.0.0.0/24 explicitně, je automaticky generována, můžete zkontrolovat pomocí ip route show . Výsledkem je
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
Můžete to udělat i pozpátku, tj. z vm2 zpět 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
Nejužitečnější aplikace NIC z veth druh je názvový prostor sítě , což je to, co se používá v kontejnerech Linux (LXC). Spustíte program s názvem nnsm následovně
ip netns add nnsm
pak do něj přeneseme vm2,
ip link set vm2 netns nnsm
vybavíme nový síťový jmenný prostor rozhraním lo (nezbytně nutné),
ip netns exec nnsm ip link set dev lo up
povolujeme NATting v hlavním počítači,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(pokud jste připojeni k internetu přes eth0 , jinak se odpovídajícím způsobem změňte), spusťte shell v novém síťovém jmenném prostoru
ip netns exec nnsm xterm &
a teď, když začnete psát nový xterm, zjistíte, že jste v samostatném virtuálním počítači s IP adresou 10.0.0.2, ale můžete se dostat na internet. Výhodou toho je, že nový síťový jmenný prostor má svůj vlastní zásobník, což znamená, že v něm například můžete spustit VPN, zatímco zbytek vašeho počítače ne na VPN. Na tom jsou založeny LXC.
EDIT:
Udělal jsem chybu, uvedení rozhraní vm2 jej stáhne a vymaže jeho adresu. Musíte tedy přidat tyto příkazy z 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 nyní můžete procházet z xterm.
ip
příkazy lze také provést před xterm pomocí
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