Para que o veth funcione, uma extremidade do túnel deve ser conectada com outra interface. Uma vez que você quer manter tudo isso virtual, você pode conectar a extremidade vm1 do túnel (vm2 é a outra extremidade do túnel) com uma interface virtual de tipo de toque, em uma ponte chamada brm. Agora você dá endereços IP para brm e para vm2 (10.0.0.1 e 10.0.0.2, respectivamente), habilitar o encaminhamento IPv4 por meio de
echo 1 > /proc/sys/net/ipv4/ip_forward
traga todas as interfaces, e adicione uma rota instruindo o kernel a alcançar os endereços IP 10.0.0.0/24. Isso é tudo.
Se você quiser criar mais pares, repita as etapas abaixo com diferentes sub-redes, por exemplo, 10.0.1.0/24, 10.0.2.0/24 e assim por diante. Como você ativou o encaminhamento IPv4 e adicionou rotas apropriadas à tabela de roteamento do kernel, elas poderão se comunicar imediatamente.
Além disso, lembre-se que a maioria dos comandos que você está usando (brctl, ifconfig, ...) são obsoletos: o pacote iproute2 tem comandos para fazer tudo isso, veja abaixo o uso do comando Comando ip .
Esta é uma sequência correta de comandos para o uso de interfaces do tipo veth :
primeiro crie todas as interfaces necessárias,
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
Perceba que não trazemos brm e vm2 porque temos que atribuir endereços IP, mas trouxemos tapm e vm1, o que é necessário para incluí-los na bridge brm. Agora escravize as interfaces tapm e vm1 para a bridge brm,
ip link set tapm master brm
ip link set vm1 master brm
agora forneça endereços para a ponte e para a interface veth restante vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
agora traga vm2 e brm,
ip link set brm up
ip link set vm2 up
Não há necessidade de adicionar a rota à sub-rede 10.0.0.0/24 explicitamente, ela é gerada automaticamente, você pode verificar com ip route show . Isso resulta em
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
Você também pode fazer isso de trás para frente, isto é, de vm2 de volta para 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
A aplicação mais útil de NICs do tipo veth é um namespace de rede , que é usado em containers Linux (LXC). Você inicia um chamado nnsm da seguinte forma
ip netns add nnsm
então nós transferimos vm2 para ele,
ip link set vm2 netns nnsm
nós damos o novo namespace de rede com uma interface (absolutamente necessária),
ip netns exec nnsm ip link set dev lo up
permitimos NATting na máquina principal,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(se você estiver conectado à Internet via eth0 , caso contrário, mude de acordo), inicie um shell no novo namespace de rede,
ip netns exec nnsm xterm &
e agora, se você começar a digitar no novo xterm, verá que está em uma máquina virtual separada com o endereço IP 10.0.0.2, mas poderá acessar a Internet. A vantagem disso é que o novo namespace de rede tem sua própria pilha, o que significa, por exemplo, que você pode iniciar uma VPN enquanto o resto do seu PC não está na VPN. Esta é a engenhoca em que os LXCs são baseados.
EDITAR:
Eu cometi um erro, trazendo a interface vm2 traz para baixo e limpa seu endereço. Assim, você precisa adicionar esses comandos de dentro do 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 agora você pode navegar pelo xterm.
Os comandos ip
também podem ser feitos antes do xterm com
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