O contêiner LXC com rede em ponte expõe endereço MAC falso à rede externa

5

Estou executando o contêiner LXC (lxc 0.7.2-1) no squeeze do Debian com a rede em ponte configurada por o livro com IP público e tenho problema que ele expõe endereço MAC falso do contêiner LXC à rede externa, onde fica bloqueado pela segurança da porta do switch, evitando assim que o contêiner LXC se comunique com o mundo. Eu executo outro contêiner LXC no Ubuntu 12.04.2 LTS (lxc 0.7.5-3ubuntu67) com a mesma configuração de rede, mas não tenho nenhum problema, pois ele não expõe MACs falsos à rede externa e todas as comunicações acompanham o MAC do host.

Atualmente, estou tentando encontrar diferenças na configuração de rede entre hosts, mas sem muito sucesso. Poderia ser possivelmente o comportamento dependente da versão do próprio lxc?

Debian / etc / network / interfaces

auto br0
iface br0 inet static
    bridge_ports eth0
    bridge_fd 0
    bridge_stp off
    bridge_maxwait 0
    address   y.y.y.9
    netmask   255.255.255.192
    broadcast y.y.y.63
    gateway   y.y.y.1
    pre-up iptables-restore < /etc/iptables.up.rules

Configuração de rede do Debian LXC

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = fe:95:57:4b:b4:9b
lxc.network.ipv4 = y.y.y.12/26

Ubuntu / etc / network / interfaces

auto br0
iface br0 inet static
    bridge_ports eth0
    bridge_fd 0
    bridge_stp off
    bridge_maxwait 0
    address   z.z.z.146
    netmask   255.255.255.0
    broadcast z.z.z.255
    gateway   z.z.z.1
    pre-up iptables-restore < /etc/iptables.rules
    up route add x.x.x.1 br0

Configuração de rede do Ubuntu LXC

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = x.x.x.1/32
lxc.network.hwaddr = 00:16:3e:87:b5:b9
    
por AlexD 11.07.2013 / 12:14

1 resposta

4

A diferença é que o contêiner LXC no Ubuntu usa endereço IP de uma sub-rede diferente e tem o IP do host como gateway padrão quando o contêiner LXC no Debian usa IP da mesma sub-rede como host e tem seu gateway padrão igual ao host.

Quando o contêiner LXC tem IP de uma sub-rede diferente de seu host e usa seu host como gateway padrão, os pacotes do contêiner LXC são roteados e, quando saem da interface de rede do host, eles têm o MAC do host. Quando o contêiner LXC está na mesma sub-rede que o host e usa o mesmo gateway, os pacotes são vinculados e retêm o MAC falso do LXC. Minha solução é forçar o roteamento por meio do host, mesmo se eles estiverem na mesma sub-rede. Nesse caso, meu contêiner LXC tem as seguintes / etc / network / interfaces :

auto eth0
iface eth0 inet static
    address   y.y.y.12
    netmask   255.255.255.255
    post-up route add y.y.y.9 dev eth0
    post-up route add default gw y.y.y.9 

e o host LXC tem o seguinte em sysctl.conf

net.ipv4.ip_forward=1
net.ipv4.conf.bond0.proxy_arp = 1

e em / etc / network / interfaces :

 auto bond0
 iface bond0 inet static
   address y.y.y.9
   netmask 255.255.255.192
   broadcast y.y.y.63
   gateway y.y.y.1

 auto lxcbr0
 iface lxcbr0 inet static
    bridge_ports none
    bridge_fd 0
    bridge_stp off
    bridge_maxwait 0
    address   192.168.120.1
    netmask   255.255.255.0
    up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
    up /sbin/ip route add to y.y.y.12 dev lxcbr0

Eu removi as opções irrelevantes das configurações acima.

    
por 11.07.2013 / 12:54