LXC容器只能通过网桥访问主机

LXC容器只能通过网桥访问主机

我有一个 LXC 容器,其中 i686 Ubuntu 12.04 在 x86_64 Ubuntu 12.04 主机上运行。我已使用说明设置了桥接这里。但是,容器发出的 ping 只会到达主机,而不会到达本地网络上的其他机器。同样,只有主机才能看到容器操作系统,而其他机器看不到。

主机的/etc/network/interfaces文件如下所示:

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

容器的/etc/network/interfaces文件如下所示:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

以下是容器配置的相关部分:

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

知道我做错了什么吗?

附加信息:

iptables-save主机上的输出:

$ 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

brctl show主机上的输出:

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

ifconfig br0主机上的输出:

$ 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)

ifconfig eth0主机上的输出:

$ 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)

ifconfig eth0容器上的输出:

$ 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)

答案1

要解决该问题,您可以检查以下内容:

  1. br0(主机)和 eth0(容器)的 ip 地址位于同一子网。
  2. ip 转发已打开: cat /proc/sys/net/ipv4/ip_forward
  3. 流量没有被 iptables 阻止。

UPD:如果上述方法不能解决问题:

  1. 检查容器和局域网主机上的 arp 缓存状态arp -n
  2. 使用 tcpdump 调试 arp 和 icmp 数据包:/usr/sbin/tcpdump -n -i <ifname> arp or icmp
  3. 检查路由表route

相关内容