Interfaces de ponte extras são adicionadas automaticamente

4

Eu tenho uma ponte configurada entre eth0 e br0 , a bridge funciona bem, mas às vezes, por razões e circunstâncias desconhecidas, eu continuo recebendo essas interfaces off vethXXXXXX adicionadas à bridge. Quando isso acontece, minhas instâncias do LXC não podem falar com a Internet.

Quando executo brctl delif br0 vethNbUtXk && brctl delif br0 vethYqTf0F , tudo está bem novamente.

Alguma ideia de onde essas interfaces de aparência estranha estão vindo?

root@ubuntuserver:/var/lib/lxc# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.080027ca5f7a       no              eth0
                                                        vethNbUtXk
                                                        vethYqTf0F
lxcbr0          8000.000000000000       no
virbr0          8000.000000000000       yes

Exemplo ifconfig quando um desses adaptadores ímpares vethXXXXXX foi criado

vethPBkvAC Link encap:Ethernet  HWaddr fe:14:5c:cb:62:d6
          inet6 addr: fe80::fc14:5cff:fecb:62d6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3194 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3214 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:309019 (309.0 KB)  TX bytes:311213 (311.2 KB)
    
por David Parks 28.03.2013 / 08:42

2 respostas

2

Isso pode lançar alguma luz: dispositivo Virtual Ethernet . Pode dar-lhe algo como este : Claro que você não tem alguma configuração em /var/lib/lxc/ with lxc.network.type = veth ?

grep -r 'veth' /var/lib/lxc/
    
por 28.03.2013 / 10:37
8

Para futuros leitores, eu escrevi este e-mail para alguns dos meus colegas que estão trabalhando comigo na configuração do LXC e descobrindo a ponte.

Bom, eu passei a maior parte do dia hoje mexendo com o trabalho em rede no LXC, e agora as coisas estão bem mais claras, então pensei em repassar o que aprendi.

Primeiro, algumas definições, então nós sabemos para o que estamos olhando (eu realmente não entendi a diferença entre uma ponte como br0 ou virbr0 e uma interface como eth0, e eu definitivamente não sabia o que essas interfaces como vethILNaLo foram para).

Ponte

Uma ponte é mostrada como uma interface no ifconfig, mas uma ponte não faz nada além de conectar 2 outras redes, não é uma interface de rede. Você pode ver e alterar pontes usando brctl show e configurá-las permanentemente em / etc / networking / interfaces.

Uma ponte é melhor pensada como um interruptor.

Exemplos de pontes que vemos:

  • br0
  • lxcbr0
  • virbr0

Interface de rede

As interfaces são realmente atribuídas a um único host, uma única interface não pode ser atribuída a vários hosts. O host envia e recebe tráfego de rede para uma interface. A interface escolhida depende da tabela de roteamento, route mostrará isso.

A razão pela qual precisamos de bridging é que a eth0 está fisicamente conectada ao sistema operacional host e também não pode ser conectada a um contêiner ou outra máquina virtual.

Exemplos de interfaces físicas que vemos:

  • eth0
  • vethILNaLo

Algumas notas sobre o segundo: vethILNaLo

  • Essa é uma interface física criada para cada contêiner LXC que é iniciado, está anexada ao contêiner e vista dentro do contêiner como eth0
  • Cada vez que você define lxc.network.type=veth no arquivo de configuração LXC, ele cria outra dessas interfaces físicas e o anexa no contêiner, você pode usar lxc.network.name = eth0 para definir o nome da interface dentro do contêiner (o padrão de eth0, eth1, etc geralmente funciona)
  • Quando essa interface é criada, ela não está conectada a nada, é como se ela não estivesse conectada

Conectando vethILNaLo a uma rede usando uma ponte

Lembre-se de que uma bridge é como um switch baseado em software. Se você conectar duas interfaces, elas serão conectadas da mesma maneira que um switch conecta computadores físicos.

Em /etc/network/interfaces definimos e criamos br0, basicamente definimos um switch. Nesse mesmo arquivo nós também conectamos eth0 ao nosso “switch” br0:

iface br0 inet static
        bridge_ports eth0

No arquivo de configuração do LXC, conectamos a interface física dos containers ao mesmo swtich:

lxc.network.type=veth
lxc.network.link=br0

/etc/network/interfaces é configurado quando o computador é iniciado (isso faz sentido, a interface eth0 do host deve estar sempre conectada ao nosso "switch"), e o LXC cuida da criação da porta física do nosso contêiner LXC e a conecta nosso "switch" chamado br0 (a diferença entre uma bridge e um switch é muito pequena, então para isso é bom pensar neles como o mesmo, um switch é apenas um pouco mais inteligente que uma bridge).

O que é lxcbr0 e virbr0?

lxcbr0 e virbr0 são adicionados automaticamente pelo LXC, ambos são a mesma coisa (o virbr0 é uma versão mais antiga mantida para compatibilidade com versões anteriores, lxcbr0 é mais recente, mas faz exatamente a mesma coisa). Essas duas pontes (também conhecidas como “switches”) também fornecem recursos de NAT / roteamento. Então, se você conectasse sua máquina virtual a essas pontes, seria como conectá-la a um roteador.

Como não precisamos de outro roteador (todos os nossos contêineres LXC terão seu próprio IP na rede), removi as duas pontes não usadas do sistema operacional host no documento de compilação

    
por 28.03.2013 / 13:23