Perché veth funzioni, un'estremità del tunnel deve essere colmata con un'altra interfaccia. Dal momento che vuoi mantenere tutto questo virtuale, puoi collegare l'estremità vm1 del tunnel (vm2 è l'altra estremità del tunnel) con un'interfaccia virtuale di tipo tap, in un bridge chiamato brm. Ora dai gli indirizzi IP a brm e a vm2 (rispettivamente 10.0.0.1 e 10.0.0.2), abilita l'inoltro IPv4 tramite
echo 1 > /proc/sys/net/ipv4/ip_forward
attiva tutte le interfacce e aggiungi un percorso che istruisce il kernel su come raggiungere gli indirizzi IP 10.0.0.0/24. È tutto.
Se desideri creare più coppie, ripeti i passaggi seguenti con sottoreti diverse, ad esempio 10.0.1.0/24, 10.0.2.0/24 e così via. Dal momento che hai abilitato l'inoltro IPv4 e hai aggiunto percorsi appropriati alla tabella di routing del kernel, saranno in grado di parlare tra loro immediatamente.
Inoltre, ricorda che la maggior parte dei comandi che stai utilizzando (brctl, ifconfig,...) sono obsoleti:iproute2 suite ha i comandi per fare tutto questo, vedi sotto il mio uso dell'ip comando.
Questa è una corretta sequenza di comandi per l'uso di interfacce di tipo veth :
creare prima tutte le interfacce richieste,
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
Si noti che non abbiamo richiamato brm e vm2 perché dobbiamo assegnare loro gli indirizzi IP, ma abbiamo richiamato tapm e vm1, che è necessario per includerli nel bridge brm. Ora asservisci le interfacce tapm e vm1 al bridge brm,
ip link set tapm master brm
ip link set vm1 master brm
ora dai gli indirizzi al bridge e alla rimanente interfaccia veth vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
ora porta in primo piano vm2 e brm,
ip link set brm up
ip link set vm2 up
Non è necessario aggiungere esplicitamente il percorso alla sottorete 10.0.0.0/24, viene generato automaticamente, puoi controllare con ip route show . Ciò si traduce in
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
Puoi anche farlo all'indietro, cioè da vm2 a 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
L'applicazione più utile dei NIC del veth kind è uno spazio dei nomi di rete , che è ciò che viene utilizzato nei contenitori Linux (LXC). Ne inizi uno chiamato nnsm come segue
ip netns add nnsm
quindi trasferiamo vm2 su di esso,
ip link set vm2 netns nnsm
dotiamo il nuovo spazio dei nomi di rete di un'interfaccia lo (assolutamente necessaria),
ip netns exec nnsm ip link set dev lo up
consentiamo il NATting nella macchina principale,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(se sei connesso a Internet tramite eth0 , altrimenti cambia di conseguenza), avvia una shell nel nuovo spazio dei nomi di rete,
ip netns exec nnsm xterm &
e ora, se inizi a digitare il nuovo xterm, ti ritroverai in una macchina virtuale separata con indirizzo IP 10.0.0.2, ma puoi raggiungere Internet. Il vantaggio di ciò è che il nuovo spazio dei nomi di rete ha il proprio stack, il che significa, ad esempio, che puoi avviare una VPN al suo interno mentre il resto del tuo PC non sulla VPN. Questo è il congegno su cui si basano gli LXC.
MODIFICA:
Ho commesso un errore, portando l'interfaccia vm2 lo fa cadere e cancella il suo indirizzo. Quindi devi aggiungere questi comandi, dall'interno di 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
e ora puoi navigare dall'interno di xterm.
Il ip
i comandi possono anche essere eseguiti prima dell'xterm con
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