Conecta a interface virtual à rede física?

2

Como no diagrama abaixo, a rede física é 192.168.99.0/24. veth0 mora dentro de um namespace de rede separado. Eu quero que ele se conecte diretamente na rede física, portanto, node1 e veth0 podem se comunicar através da rede física sem nenhum NAT.

O que eu tentei é:

  • crie uma ponte linux br0
  • conecte veth1 a br0
  • conecte eth0 (NIC físico de node2) a br0

Acontece que, se fizermos o ping de 192.168.99.3 para 192.168.99.1, os pacotes arp virão de veth0 , atravessarão veth1 para br0 e serão transmitidos para node2 \ eth0 , e finalmente é recebido por node1 ' eth0 .

Howerver, quando node1 responde, o pacote destinado ao endereço MAC de veth0 não será recebido pelo eth0 de node2 (incompatibilidade de Mac, eu acho), portanto veth0 não obterá pacotes de resposta arp e ping falha.

Então, se eu não estou entendendo isso errado, alguém pode me dar alguma idéia de como fazer essa rede de bridge acontecer?

UPDATE

Eu reconstruo este ambiente de teste em máquinas bare-metal, acontece que tudo funciona bem. Talvez algo de errado com a rede virtualbox.

    
por dastan 28.04.2017 / 12:38

1 resposta

1

O que você está tentando fazer parece correto, mas há um número importante de pequenos detalhes (limpando a configuração anterior, elevando todas as interfaces, criando um novo namespace de rede para usar uma extremidade do veth par), que não tenho certeza se você fez tudo corretamente. Em particular, eu não sei se você percebeu que precisará dhcp (se você não usar um endereço IP estático) o fim do par veth dentro do novo namespace de rede.

Assim, para lhe dar todos os detalhes, eu lhe direi como faço isso, usando veth : primeiro eu limpo a configuração atual,

# systemctl stop network-manager
# ip link set dev usb0 down   
# ip addr flush dev usb0

então eu crio o par veth , e depois coloco minha interface ethernet (aqui é chamada usb0 ) e uma extremidade do veth parear em uma ponte chamada br1 :

# ip link add veth-a1 type veth peer name veth-b1
# ip link set veth-a1 up
# ip link add br1 type bridge
# ip link set veth-a1 master br1
# ip link set usb0 master br1
# ip link set usb0 up
# ip link set br1 up

Observe que é importante trazer as diferentes interfaces up ; então eu inicio dhclient na bridge :

# dhclient br1
.....
bound to 192.168.11.98 -- renewal in 16650 seconds.

Agora eu transfiro a outra extremidade do par veth para o novo namespace de rede, chamado ns1 , e crie um xterm dentro do novo namespace de rede:

# ip netns add ns1
# ip link set veth-b1 netns ns1
# ip netns exec ns1 xterm &

para que, a partir do xterm eu possa trazer a outra ponta do par veth e iniciar dhclient nele

>
# ip link set dev veth-b1 up
# dhclient veth-b1

Para testar isso, basta ping www.debian.org , e você verificará a conexão e o fato de que os DNSs são importados automaticamente do namespace de rede principal.

Teria sido muito mais fácil com um macvlan , embora ...

    
por 29.04.2017 / 11:47