Eu gostaria de configurar três interfaces de rede virtual ( veth
) que podem se comunicar. Para simular um cluster de três nós, cada programa se liga a uma veth
interface. Eu gostaria de fazer isso sem o LXC, se possível.
Eu tentei usar:
- Criou três
veth
pares:sudo ip link add type veth
- Criou uma ponte
sudo brctl addbr br0
- Adicionado um de cada par na ponte:
sudo brctl addif br0 veth1
sudo brctl addif br0 veth3
sudo brctl addif br0 veth5
- Configurou as interfaces:
sudo ifconfig veth0 10.0.0.201 netmask 255.255.255.0 up
sudo ifconfig veth2 10.0.0.202 netmask 255.255.255.0 up
sudo ifconfig veth4 10.0.0.203 netmask 255.255.255.0 up
Então eu verifiquei se funciona usando: ping -I veth0 10.0.0.202
mas não :(
O acrescentei endereços IP para o veth1
, veth3
, veth5
e br0
as interfaces na faixa 10.0.1.x / 24. Mas isso não ajuda.
Alguma ideia? ou um guia, tudo o que encontro em como usá-lo com o LXC. Ou estou tentando algo que não é possível?
linux
networking
Reinder
fonte
fonte
br0
ele mesmo?Respostas:
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
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,
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,
agora forneça endereços para a ponte e para a interface veth restante vm2,
agora traga vm2 e brm 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
Você também pode fazer isso ao contrário, ou seja , do vm2 para o brm:
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
então transferimos vm2 para ele,
damos ao novo namespace da rede uma interface lo (absolutamente necessária),
nós permitimos NATting na máquina principal,
(se você estiver conectado à Internet via eth0 , altere de acordo), inicie um shell no novo espaço para nome da rede,
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:
e agora você pode navegar no xterm.
Os
ip
comandos também podem ser feitos antes do xterm comfonte
Aqui está uma configuração de ponte de 5 nós que eu uso que funciona. Você deve poder usar o ifconfig para atribuir endereços às interfaces do NodeX
e limpar
fonte