我遇到了一些问题,lxc 容器上的 eth0 无法工作。我已经尝试过 将 LXC 容器桥接到主机 eth0,以便它们可以拥有公共 IP,但这没有帮助。
在我的主机上(virtualbox 上的 Ubuntu):
# cat /proc/sys/net/ipv4/ip_forward
1
配置
# cat /var/lib/lxc/config
lxc.config
lxc.utsname=ubuntu
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
我用上述配置创建了一个容器
# lxc-create -t centos -f config -n centos1
然后启动
# lxc-start -d -n centos1
# lxc-console -n centos1
看来 veth 连接正确,因为主机说
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.080027bb0aca no eth0
veth48BKPz
lxcbr0 8000.000000000000 no
并且主机上的默认网关似乎也设置正确
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.11.1 0.0.0.0 UG 100 0 0 br0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 lxcbr0
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
在 lxc 容器上
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.11.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1009 0 0 eth0
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
有什么帮助吗?
答案1
你的主机上是否启用了 iptables (或 ip6tables)?如果启用了,您需要接受桥接器转发链上的流量和:
iptables -A FORWARD -p all -i br0 -j ACCEPT
原因是 br-nf(bridge-net filter)选项默认启用在 2.6 内核中,桥接流量通过 iptables。可以禁用它通过做:
echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
请点击此链接获取更多信息基于 Linux 的桥接器上的 ebtables/iptables 交互。