Я столкнулся с некоторыми проблемами, связанными с тем, что eth0 в контейнере lxc не работает. Я уже пробовал Соединение контейнеров LXC с хостом eth0, чтобы они могли иметь общедоступный IP, но это не помогает.
На моем хосте (Ubuntu на виртуальном боксе):
# cat /proc/sys/net/ipv4/ip_forward
1
config
# 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
Любая помощь?
У вас включен iptables (или ip6tables) на вашем хосте? Если да, вам необходимо ПРИНЯТЬ трафик в цепочке FORWARD вашего моста с участием:
iptables -A FORWARD -p all -i br0 -j ACCEPT
Причина в том, что опция br-nf (фильтр мостовой сети) включен по умолчанию в ядре 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
Перейдите по этой ссылке для получения дополнительной информации о Взаимодействие ebtables / iptables на мосту на базе Linux.