Para que o veth funcione, uma extremidade do túnel deve ser conectada a outra interface. Como você deseja manter tudo isso virtual, você pode conectar a extremidade vm1 do túnel (vm2 é a outra extremidade do túnel) com uma interface virtual do tipo torneira, em uma ponte chamada brm. Agora você fornece endereços IP para brm e vm2 (10.0.0.1 e 10.0.0.2, respectivamente), habilite 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 como alcançar os endereços IP 10.0.0.0/24. Isso é tudo.
Se você deseja criar mais pares, repita as etapas abaixo com sub-redes diferentes, 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, eles poderão se comunicar imediatamente.
Além disso, lembre-se de que a maioria dos comandos que você está usando (brctl, ifconfig, ...) são obsoletos: a suíte iproute2 possui comandos para fazer tudo isso, veja abaixo meu uso do 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
Observe que não trouxemos brm e vm2 porque precisamos atribuir endereços IP a eles, mas trouxemos tapm e vm1, que é necessário incluí-los no bridge brm. Agora escravize as interfaces tapm e vm1 na 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 up,
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 o ip route show . Isto 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 ao contrário, ou seja , do vm2 para o 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 contêineres Linux (LXC). Você inicia um chamado nnsm da seguinte maneira
ip netns add nnsm
então transferimos vm2 para ele,
ip link set vm2 netns nnsm
damos ao novo namespace da rede uma interface lo (absolutamente necessária),
ip netns exec nnsm ip link set dev lo up
nós 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 , altere de acordo), inicie um shell no novo espaço para nome da rede,
ip netns exec nnsm xterm &
e agora, se você começar a digitar o novo xterm, verá que está em uma máquina virtual separada com endereço IP 10.0.0.2, mas poderá acessar a Internet. A vantagem disso é que o novo espaço para nome da rede possui sua própria pilha, o que significa, por exemplo, que você pode iniciar uma VPN nela enquanto o resto do seu PC não estiver na VPN. Esta é a engenhoca em que os LXCs se baseiam.
EDITAR:
Cometi um erro ao trazer a interface vm2 para baixo e limpa o endereço. Portanto, você precisa adicionar estes 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 no xterm.
Os ip
comandos 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
br0
ele mesmo?