LXCコンテナ(lxc 0.7.2-1)をDebian squeezeで実行しており、ブリッジネットワークは 本 パブリックIPで構成されていますが、偽のMACアドレスがLXCコンテナから外部ネットワークに公開されるという問題がありますスイッチポートのセキュリティによってブロックされるため、LXCコンテナが世界と通信できなくなります。同じネットワーク構成でUbuntu12.04.2 LTS(lxc 0.7.5-3ubuntu67)で別のLXCコンテナーを実行しますが、偽のMACを外部ネットワークに公開せず、すべての通信がホストのMACで行われるため、問題はありません。
現在、ホスト間のネットワーク構成の違いを見つけようとしていますが、あまり成功していません。それはおそらくlxc自体のバージョン依存の動作でしょうか?
Debian/etc/network/interfaces
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
DebianLXCネットワーク構成
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/etc/network/interfaces
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
UbuntuLXCネットワーク構成
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
違いは、UbuntuのLXCコンテナが異なるサブネットのIPアドレスを使用し、デフォルトゲートウェイとしてホストのIPを使用する場合、DebianのLXCコンテナがホストと同じサブネットのIPを使用し、デフォルトゲートウェイがホストのIPと同じになることです。
LXCコンテナーがホストとは異なるサブネットからのIPを持ち、そのホストをデフォルトゲートウェイとして使用する場合、LXCコンテナーからのパケットはルーティングされ、ホストのネットワークインターフェイスを離れるときにホストのMACがあります。 LXCコンテナがホストと同じサブネット上にあり、同じゲートウェイを使用している場合、パケットはブリッジされ、LXCの偽のMACを保持します。私の解決策は、ホストが同じサブネット上にある場合でも、ホストを介したルーティングを強制することです。この場合、私のLXCコンテナには次のものがあります/ etc/network/interfaces:
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
および/ etc/network/interfaces:
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
上記の設定から無関係なオプションを削除しました。