LXC Debian Jessie
Virtualisation facile !
Installer et configurer LXC sur Debian Jessie en trois coups de cuiller à pot
Installation de LXC
- apt-get install lxc lxctl
Création d’un container
- lxc-create -n NomContainer -t debian
-n nom du container
-t template de l’OS à utiliser
Bien noter le mot de passe root qui s’affichera à la fin de la création du container lxc.
Configuration du réseau sur l’hôte
Il y a plusieurs façons de configurer le réseau, pour ma part je préfère créer un (ou plusieurs) sous-réseaux pour mes containers qui seront "natter" par la machine hôte.
Pour illustrer, on pourrait dire que les sous-réseaux sont cloisonnés à l’intérieur de l’hôte qui fera office de pare-feu vers l’extérieur.
Autoriser "l’ip forwarding"
- nano /etc/sysctl.conf
- net.ipv4.ip_forward=1
Recharger la configuration du système pour prendre en compte la modification.
- sysctl -p
Configurer l’interface qui servira de bridge
La paquet bridge-utils est nécessaire, il est normalement installé en dépendance de lxc, au cas ou :
- apt-get install bridge-utils
Paramétrage de /etc/network/interfaces
Redémarrer le service réseau afin de prendre en compte la nouvelle interface br0
- service networking restart
Vérifier que l’interface réseau est bien présente :ifconfig
devrait renvoyer quelque chose comme ça
- br0 Link encap:Ethernet HWaddr 22:ce:06:00:1d:7f
- inet adr:192.168.100.254 Bcast:192.168.100.255 Masque:255.255.255.0
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:0 errors:0 dropped:0 overruns:0 frame:0
- TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 lg file transmission:0
- RX bytes:0 (0.0 B) TX bytes:3915 (3.8 KiB)
Activer le partage de connexion internet pour les containers LXC :
On va donner l’accès internet aux containers LXC à travers wlan0 (On verra comment automatiser ça sur un hôte au profil itinérant qui se connecte sur des interfaces diverses et variées : wlan0 eth0 usb0... )
- iptables -t nat -F POSTROUTING
- iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Configuration du réseau sur les containers LXC
Attention ! il ne s’agit pas de paramétrer le réseau à l’intérieur du container mais d’éditer un fichier de configuration qui se chargera de configurer le réseau au démarrage de celui-ci.
Par défaut, Debian installe les nouveaux containers dans /var/lib/lxc ; ce dossier contient tous les containers créés, qui eux-même contiennent des fichiers de logs, de configs et le dossier rootfs qui comme son nom l’indique, correspond à la racine du système virtualisé ( / ).
Afin de configurer le réseau sur notre container LXC, nous allons éditer son fichier de config /var/lib/lxc/NomContainer
Extrait de la configuration réseau d’un container /var/lib/lxc/NomContainer/config
- lxc.network.type = veth
- lxc.network.name = veth0
- lxc.network.flags = up
- lxc.network.link = br0
- lxc.network.veth.pair = veth0
- lxc.network.ipv4 = 192.168.100.1/24
- lxc.network.ipv4.gateway = 192.168.100.254
Démarrage du container et test du réseau
- lxc-start -n NomContainer -d
-n nom du container
-d en mode daemon
La commande pour contrôler si notre container LXC est bien démarré :
- lxc-ls -f
Devrait retourner
- NAME STATE IPV4 IPV6 AUTOSTART
- ---------------------------------------------------------
- NomContainer RUNNING 192.168.100.1 - NO
Sur l’hôte un petit ping 192.168.100.1 devrait retourner :
- PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
- 64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.087 ms
On va se connecter directement au container LXC
- lxc-console -n NomContainer
Se connecter au container, j’espère que vous avez bien noté le mot de passe root lors de sa création sinon vous pouvez toujours consulter l’article dédié au changement de mot de passe root d’un container LXC.
Une fois connecté, on va tester l’accès internet en utilisant apt pour installer ping afin de "pinguer" la machine hôte :
- root@NomContainer:~#apt-get install inetutils-ping
- Les NOUVEAUX paquets suivants seront installés :
- inetutils-ping
- (...)
- Paramétrage de inetutils-ping (2:1.9.2.39.3a460-3) ..
- root@NomContainer:~#ping 192.168.100.254
- PING 192.168.100.254 (192.168.100.254): 56 data bytes
- 64 bytes from 192.168.100.254: icmp_seq=0 ttl=64 time=0,163 ms
- 64 bytes from 192.168.100.254: icmp_seq=1 ttl=64 time=0,163 ms
Et voilà, Juste ça marche !