Compreendendo os comutadores virtuais no Linux

3

Estou confuso com a maneira como tenho que configurar os comutadores virtuais no Linux. Eu procedido da seguinte forma:

ip link add name br0 type bridge
ip link set br0 up

Isso deve criar um comutador virtual chamado br0. Agora vamos suponha que eu tenho um dispositivo de rede física chamado eth0 e uma torneira vnet0 dispositivo criado pelo KVM / qemu na minha máquina. O dispositivo de toque é automaticamente anexado a br0 (por configuração) e eth0 pode ser adicionado à mão:

ip link set eth0 master br0

Ambos os dispositivos devem agora ser anexados ao switch br0.

Eu atribui o endereço IP 192.168.1.1 para eth0 e 192.168.1.2 para a interface de rede dentro do virtualização. Claro que a interface de toque em si não sabe alguma coisa sobre esse endereço.

Se eu tivesse exatamente essa configuração com um interruptor físico de um virtual, eu esperaria ser capaz de pingar o endereço 192.168.1.2 do sistema host. No entanto, esse IP não pode ser acessado via ping:

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.1.2 icmp_seq=1 Destination Host Unreachable
...

Por que isso?

Eu esperava que a eth0 enviasse uma solicitação ARP para todos os segmentos de Ethernet dos quais faz parte. Este é o físico, mas também aquele definido por br0. A solicitação ARP deveria ter sido respondida pelo vnet0 com seu endereço MAC.

A solução que encontrei foi atribuir um endereço IP para br0 também:

ip addr add 192.168.1.3/24 dev br0

Agora o ping funciona bem.

    
por Democritus 20.02.2017 / 22:26

1 resposta

3

I assigned the IP address 192.168.1.1 to eth0

É aí que esta configuração deu errado. eth0 foi definido como uma interface de membro de ponte (camada 2) e, portanto, não deve ter nenhum endereço IP (camada 3).

(Você provavelmente terminou com uma espécie de configuração quebrada envolvendo duas rotas diretas para 192.168.1.0/24) através de duas interfaces diferentes, das quais apenas uma funcionava. Mas os detalhes exatos da configuração incorreta não importam realmente.)

Why is that?

I expected eth0 to send an ARP request into all Ethernet segments it's part of. This is the physical one, but also the one defined by br0.

O eth0 não envia nenhum ARP. Não é mais uma interface de camada 3, uma vez que faz parte de uma ponte.

  • As portas (camada 2) dessa ponte são
    • eth0 ,
    • tap0 e
    • a ponte em si.
  • Os participantes da camada 3 nessa ponte são (na mesma ordem)
    • Todos os dispositivos que podem ser acessados por meio de eth0 (provavelmente: um monte de outros dispositivos em sua rede local)
    • O que quer que esteja no outro e de tap0 (o que provavelmente é uma coisa)
    • A interface br0
por 20.02.2017 / 23:01