Pourquoi revenir à LXC ?
- J'ai utilisé avec bonheur LXD 2.0 sur Ubuntu 16.04, mais depuis la version 4.0 il est obligatoire d'utiliser "snap" pour l'installation. J'ai alors eu de gros problèmes de compatibilité entre les conteneurs crées sur "apt" et leur mise en oeuvre avec "snap".
- Snap ne me conviens pas. Je trouve ce système de package lent et gourmand en ressources.
- Je reviens donc à la version LXC d'origine sur une distribution qui me semble plus adapté dans un contexte serveur : Debian 10.
Installation
- Utilisation de la commande : apt install lxc
Installation/création d'un bridge virtuel (en mode NAT)
- Création d'un fichier /etc/default/lxc-net avec le contenu suivant :
USE_LXC_BRIDGE="true"
- Modification du fichier /etc/lxc/default.conf. Remplacer la ligne "lxc.net.0.type = empty" par :
lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
- Il est possible (mais pas obligatoire) d'affiner la configuration dans le fichier /usr/lib/x86_64-linux-gnu/lxc/lxc-net
- Relance du service avec : systemctl restart lxc-net
- Vérification de la présence d'une nouvelle carte réseau : ip addr
Création d'un conteneur (en mode privilégié)
- Les templates sont dans le dossier /usr/share/lxc/templates, il est possible de les modifier (à vos risques et perils). Sur Debian, seuls les templates "alpine", "debian" et "ubuntu" fonctionnent.
- La commande générale de création est : lxc-create -n nomImage -t nomTemplate -- -r release . Les paramètres situés après "--" sont les paramètres du template.
- Par exemple pour une Ubuntu 16.04 : lxc-create -n srv1 -t ubuntu -- -r xenial
- Les conteneurs sont créés dans le dossier : /var/lib/lxc
- Pour afficher la liste des conteneurs : lxc-ls -f
- Pour la démarrer : lxc-start -n srv1
- Pour l'arrêter : lxc-stop -n srv1
- Pour lancer le conteneur après un reboot, ajouter à la fin du fichier /var/lib/lxc/srv1/config :
lxc.start.auto = 1
Création d'un conteneur avec "download" (en mode privilégié)
- Les conteneurs suivants sont disponibles :
- alpine : 3.9 3.10 3.11 3.12 edge
- alt : Sisyphus P9
- apertis : v2019.4 v2020.2
- archlinux : current
- centos : 6 7 8 8-Stream
- debian : bulleye buster sid stretch
- devuan : ascii beowolf
- fedora : 31 32 33
- funtoo : 1.4
- gentoo : current
- kali : current
- mint : sarah serena sonya sylvia tara tina tricia ulyana
- opensuse : 15.1 15.2 tumbleweed
- openwrt : 18.06 19.07 snapshot
- oracle : 6 7 8
- plamo : 6.x 7.x
- pld : current
- sabayon : current
- ubuntu : bionic focal groovy hirsute trusty xenial
- voidlinux : current
- Les architectures : i386 amd64 (et plus rarement ppc64el s390x armhf arm64)
- Liste complète, voir le site : https://uk.lxd.images.canonical.com
- La commande générale de création est : lxc-create -n nomImage -t download -- --dist centos --release 7 --arch amd64
Ajouter --no-validate s'il y a un problème de certificat.
Backup d'un conteneur (en mode privilégié)
- On utilise le conteneur "myDebian" par exemple
- Arrêt du conteneur : lxc-stop -n myDebian
- Archivage avec tar, dans le dossier /var/lib/lxc : tar -cvzf myDebian.tgz myDebian
- Il est possible de copier l'archive sur un autre serveur LXC
- Désarchivage : myDebian.tgz doit être dans le dossier /var/lib/lxc : tar -xvzf myDebian.tgz
- Il est possible de renommer le conteneur : lxc-copy -R -n myDebian -N srv99
- Dans ce cas, il faut ensuite modifier le fichier hostname :
- lxc-attach -n srv99
- mcedit /etc/hostname
Attribution d'adresses IP fixes
- Dans mon exemple, je garde une plage d'adresse IP dynamique entre 10.0.3.100 et 10.0.3.254. Les adresses IP fixes seront configurés manuellement entre 10.0.3.2 et 10.0.3.99. Je configure ensuite le conteneur "srv99".
- Dans le fichier /usr/lib/x86_64-linux-gnu/lxc/lxc-net :
LXC_DHCP_RANGE="10.0.3.100,10.0.3.254" LXC_DHCP_MAX="155"
- Lancer la commande systemctl restart lxc-net pour prendre en compte les modifications.
- Dans le fichier /var/lib/lxc/srv99/config , ajoutez les lignes :
lxc.net.0.ipv4.address = 10.0.3.99/24 lxc.net.0.gateway = auto
- Dans le conteneur srv99, dans le fichier /etc/network/interfaces , commenter ensuite les lignes :
#auto eth0 #iface eth0 inet dhcp
Configuration du firewall
- Il faut activer le routage, pour cela activez la ligne net.ipv4.ip_forward=1 dans le fichier /etc/sysctl.conf
- Pour la configuration iptables, installez avec apt : iptables-persistent
- Puis modifiez le fichier /etc/iptables/rules.v4 :
########### # REGLES NAT ########### *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] # SNAT -A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE # EXEMPLE DNAT -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.45:80 COMMIT ########### # REGLES FIREWALL ########### *filter :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] COMMIT
- Pour recharger la nouvelle configuration : systemctl restart netfilter-persistent