O contêiner LXC só pode acessar o host via bridge

3

Eu tenho um contêiner LXC com o i686 Ubuntu 12.04 em execução em um host x86_64 Ubuntu 12.04. Eu configurei uma ponte usando as instruções aqui . No entanto, o ping do contêiner só passa para o host e não para outras máquinas na rede local. Da mesma forma, apenas o host e não as outras máquinas vêem o sistema operacional do contêiner.

O arquivo /etc/network/interfaces do host tem a seguinte aparência:

auto lo
iface lo inet loopback

iface eth0 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0

O arquivo /etc/network/interfaces do container tem a seguinte aparência:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

E aqui está a parte relevante da configuração do contêiner:

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

Alguma idéia do que estou fazendo errado?

Informação adicional:

A saída de iptables-save no host:

$ sudo iptables-save
# Generated by iptables-save v1.4.12 on Sat Oct 26 06:06:48 2013
*filter
:INPUT ACCEPT [6854:721708]
:FORWARD ACCEPT [4067:538895]
:OUTPUT ACCEPT [4967:522405]
COMMIT
# Completed on Sat Oct 26 06:06:48 2013
# Generated by iptables-save v1.4.12 on Sat Oct 26 06:06:48 2013
*nat
:PREROUTING ACCEPT [82235:21547307]
:INPUT ACCEPT [16:1070]
:OUTPUT ACCEPT [9386:583359]
:POSTROUTING ACCEPT [14693:1291952]
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Sat Oct 26 06:06:48 2013

A saída de brctl show no host:

$ brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.080027409684   no      eth0
                            vethBkwWyV

A saída de ifconfig br0 no host:

$ ifconfig br0
br0       Link encap:Ethernet  HWaddr 08:00:27:40:96:84  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe40:9684/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:232863 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59518 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:34437354 (34.4 MB)  TX bytes:198492871 (198.4 MB)

A saída de ifconfig eth0 no host:

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:40:96:84  
          inet6 addr: fe80::a00:27ff:fe40:9684/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:299419 errors:0 dropped:0 overruns:0 frame:0
          TX packets:203569 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:59077446 (59.0 MB)  TX bytes:372056540 (372.0 MB)

A saída de ifconfig eth0 no contêiner:

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3e:74:08:2b  
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe74:82b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81 errors:0 dropped:0 overruns:0 frame:0
          TX packets:113 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8506 (8.5 KB)  TX bytes:9021 (9.0 KB)
    
por vitaut 25.10.2013 / 19:38

1 resposta

1

Para resolver o problema, você pode verificar o seguinte:

  1. os endereços IP de br0 (host) e eth0 (container) estão na mesma sub-rede.
  2. O
  3. encaminhamento de ip está ativado: cat / proc / sys / net / ipv4 / ip_forward
  4. o tráfego não é bloqueado pelo iptables.

UPD: se o acima não resolver o problema:

  1. verifique o estado do cache de arp no contêiner e os hosts de lan arp -n
  2. depurar pacotes arp e icmp com tcpdump: /usr/sbin/tcpdump -n -i <ifname> arp or icmp
  3. verifique as tabelas de rotas com route
por 25.10.2013 / 21:23