我有一个 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
要解决该问题,您可以检查以下内容:
- br0(主机)和 eth0(容器)的 ip 地址位于同一子网。
- ip 转发已打开: cat /proc/sys/net/ipv4/ip_forward
- 流量没有被 iptables 阻止。
UPD:如果上述方法不能解决问题:
- 检查容器和局域网主机上的 arp 缓存状态
arp -n
- 使用 tcpdump 调试 arp 和 icmp 数据包:
/usr/sbin/tcpdump -n -i <ifname> arp or icmp
- 检查路由表
route