5 votes

Un conteneur LXC avec un réseau en pont expose une fausse adresse MAC au réseau externe

J'exécute un conteneur LXC (lxc 0.7.2-1) sur Debian Squeeze avec un réseau de pont configuré par le livre avec une IP publique et j'ai le problème qu'il expose la fausse adresse MAC du conteneur LXC au réseau externe où elle est bloquée par la sécurité du port du commutateur, empêchant ainsi le conteneur LXC de communiquer avec le monde. J'exécute un autre conteneur LXC sur Ubuntu 12.04.2 LTS (lxc 0.7.5-3ubuntu67) avec la même configuration réseau mais je n'ai aucun problème car il n'expose pas de fausses adresses MAC au réseau externe et toutes les communications passent par le MAC de l'hôte.

Actuellement, j'essaie de trouver les différences de configuration réseau entre les hôtes, mais sans grand succès. Pourrait-il s'agir d'un comportement de lxc lui-même dépendant de la version ?

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

Configuration réseau de 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 /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

Configuration du réseau 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

4voto

Sveatoslav Points 101

La différence est que le conteneur LXC sur Ubuntu utilise l'adresse IP d'un sous-réseau différent et a l'IP de son hôte comme passerelle par défaut alors que le conteneur LXC sur Debian utilise l'IP du même sous-réseau que l'hôte et a sa passerelle par défaut identique à celle de l'hôte.

Lorsque le conteneur LXC a une IP provenant d'un sous-réseau différent de celui de son hôte et utilise son hôte comme passerelle par défaut, les paquets provenant du conteneur LXC sont acheminés et lorsqu'ils quittent l'interface réseau de l'hôte, ils ont le MAC de l'hôte. Lorsque le conteneur LXC se trouve sur le même sous-réseau que l'hôte et utilise la même passerelle, les paquets sont pontés et conservent le faux MAC de LXC. Ma solution est de forcer le routage par l'hôte même s'ils sont sur le même sous-réseau. Dans ce cas, mon conteneur LXC a les caractéristiques suivantes /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 

et l'hôte LXC a ce qui suit dans sysctl.conf

net.ipv4.ip_forward=1
net.ipv4.conf.bond0.proxy_arp = 1

et en /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

J'ai supprimé les options non pertinentes des configurations ci-dessus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X