Я запускаю контейнер LXC (lxc 0.7.2-1) в сжатии Debian с сетевым мостом, настроенным с помощью книга с общедоступным IP-адресом, и у меня есть проблема, что он предоставляет поддельный MAC-адрес из контейнера LXC во внешнюю сеть, где он блокируется безопасностью порта коммутатора, что предотвращает связь контейнера LXC с миром. Я запускаю другой контейнер LXC в Ubuntu 12.04.2 LTS (lxc 0.7.5-3ubuntu67) с той же сетевой конфигурацией, но у меня нет никаких проблем, так как он не предоставляет поддельные MAC-адреса для внешней сети, а все коммуникации идут с MAC-адресом хоста.
В настоящее время я пытаюсь найти разницу в конфигурации сети между хостами, но без особого успеха. Может ли это быть зависимым от версии поведением самого lxc?
Debian / etc / сеть / интерфейсы
auto br0
iface br0 inet static
bridge_ports eth0
bridge_fd 0
bridge_stp off
bridge_maxwait 0
address y.y.y.9
netmask 255.255.255.192
broadcast y.y.y.63
gateway y.y.y.1
pre-up iptables-restore < /etc/iptables.up.rules
Сетевая конфигурация Debian LXC
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = fe:95:57:4b:b4:9b
lxc.network.ipv4 = y.y.y.12/26
Ubuntu / и т.д. / сеть / интерфейсы
auto br0
iface br0 inet static
bridge_ports eth0
bridge_fd 0
bridge_stp off
bridge_maxwait 0
address z.z.z.146
netmask 255.255.255.0
broadcast z.z.z.255
gateway z.z.z.1
pre-up iptables-restore < /etc/iptables.rules
up route add x.x.x.1 br0
Конфигурация сети Ubuntu LXC
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = x.x.x.1/32
lxc.network.hwaddr = 00:16:3e:87:b5:b9
Разница в том, что контейнер LXC в Ubuntu использует IP-адрес из другой подсети и имеет IP-адрес своего хоста в качестве шлюза по умолчанию, когда контейнер LXC в Debian использует IP-адрес из той же подсети, что и хост, и имеет свой шлюз по умолчанию, такой же, как у хоста.
Когда контейнер LXC имеет IP-адрес из другой подсети, чем его хост, и использует свой хост в качестве шлюза по умолчанию, тогда пакеты из контейнера LXC маршрутизируются, и когда они покидают сетевой интерфейс хоста, они имеют MAC-адрес хоста. Когда контейнер LXC находится в той же подсети, что и хост, и использует тот же шлюз, пакеты передаются по мосту и сохраняют поддельный MAC-адрес LXC. Мое решение - принудительно выполнить маршрутизацию через хост, даже если они находятся в одной подсети. В этом случае мой контейнер LXC имеет следующие / и т.д. / сеть / интерфейсы:
auto eth0
iface eth0 inet static
address y.y.y.12
netmask 255.255.255.255
post-up route add y.y.y.9 dev eth0
post-up route add default gw y.y.y.9
и хост LXC имеет следующее в sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.bond0.proxy_arp = 1
И в / и т.д. / сеть / интерфейсы:
auto bond0
iface bond0 inet static
address y.y.y.9
netmask 255.255.255.192
broadcast y.y.y.63
gateway y.y.y.1
auto lxcbr0
iface lxcbr0 inet static
bridge_ports none
bridge_fd 0
bridge_stp off
bridge_maxwait 0
address 192.168.120.1
netmask 255.255.255.0
up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
up /sbin/ip route add to y.y.y.12 dev lxcbr0
Я удалил ненужные опции из конфигов выше.