Configurer des conteneurs LXC avec des IP publiques.

La grande majorité des documents, tutoriels et exemples concernant LXC proposent une configuration réseau NAT. Il est toutefois possible que les conteneur aient leur propre ip.

Pour avoir des conteneurs LXC à ip publique via les ipfailovers fournies par les boites comme online.net ou OVH, Il faut commencer par paramétrer un pont réseau sur le serveur hôte.


 apt-get install bridge-utils

Voici un modèle pour le fichier /etc/network/interfaces de l’hôte :


auto lo
iface lo inet loopback

# The primary network interface

auto eth0
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address [adresse IPV4 du serveur hôte]
        netmask [masque de sous réseau du serveur hôte]
        network [network du serveur hôte]
        broadcast [broadcast du serveur hôte]
        gateway [gateway du serveur hôte]
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        post-up link set vmbr0 adress [adresse mac de l'interface publique du serveur hôte]
 

Surtout ne pas oublier l'adresse mac du serveur hôte, un pont réseau ça prend pour automatiquement pour adresse mac celle dont l'interface connecté a la plus petite adresse mac.

Je ne reviens pas sur la création de conteneur LXC sous debian wheezy, les tutoriels sont nombreux à ce sujet.

Une fois le conteneur créé il faut modifier le ficher /var/lib/lxc/nom-du-conteneur/config en ajoutant cette section network:


#network
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = vmbr0
lxc.network.hwaddr = adresse mac virtuelle type KVM générée chez online/OVH 
Vérifiez aussi ces paramètres :

lxc.rootfs = /var/lib/lxc/roger42/rootfs
lxc.tty = 4
lxc.pts = 1024
lxc.arch = amd64
lxc.utsname = nom-du-conteneur
lxc.cap.drop = sys_module mac_admin mac_override sys_time

Ensuite ça se passe dans le fichier /var/lib/lxc/roger42/rootfs/etc/network/interfaces :


auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
    address [ip failover]
    netmask 255.255.255.255
    broadcast [broadcast de l'ip failover (en général elle même)]
    post-up route add [ip de la gateway de l'hote] dev eth0
    post-up route add default gw [ip de la gateway de l'hote]
    post-down route del [ip de la gateway de l'hote] dev eth0
    post-down route del default gw [ip de la gateway de l'hote]

Là le conteneur est complètement indépendant, il lui faudra son firewall en propre.

Attention :

Dans cette configuration, si iptables est actif dans le conteneur alors l’extinction d'un conteneur va faire planter l’hôte : kernel panic. A priori c'est un bug du noyau.
Si vous voulez utiliser cette configuration il faut installer le noyau des backports.

Dans le fichier /etc/apt/sources.list ajouter :


deb http://ftp.debian.org/debian/ wheezy-backports main non-free contrib

puis dans la console en root :


apt-get update

enfin installer le noyau :


apt-get -t wheezy-backports install linux-image-amd64