Installation lxc sur debian 8 ou 9:¶
Prérequis:
apt install lxc bridge-utils
Création de l'interface réseau bridge¶
Afin que les containers puissent communiquer avec le réseau local: (éditer le fichier /etc/network/interfaces)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0
address 192.168.1.254
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
dns-nameservers 192.168.1.249
post-up ifconfig eth0 mtu 9000
Édition du fichier /etc/lxc/default.conf¶
Afin de gagner du temps pour la création d'un container d'un point de vu réseau
lxc.network.type = veth
lxc.network.link = br0
lxc.network.hwaddr = 00:3e:4d:xx:xx:xx
lxc.network.flags = up
Pour la version 3 de LXC:¶
lxc.net.0.type = veth
lxc.net.0.link = br0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
**lxc.apparmor.profile = generated**
**lxc.apparmor.allow_nesting = 1**
Création d'un container debian 9 par exemple¶
lxc-create -n debian-ct -t debian -- -a amd64 --release=stretch
Paramétrage réseau du conteneur¶
Il faudra éditer le fichier /var/lib/lxc/nom-du-conteneur/config
lxc.network.type = veth
lxc.network.link = br0
lxc.network.hwaddr = 00:3e:4d:3f:ad:74
lxc.network.flags = up
lxc.network.ipv4 = 192.168.1.248/24 192.168.1.255
lxc.network.ipv4.gateway = 192.168.1.1
Pour la version 3 de lxc:¶
-
Ajouter lxc.start.auto = 1 pour un démarrage auto du conteneur
-
Bien penser à éditer la config réseau "(/etc/network/interfaces)" du conteneur en mettant l'option manual pour l'attribution de l'adressage IP.
-
Ajouter si nécessaire l'adresse du serveur dns dans le fichier "/etc/resolv.conf du conteneur"
Monter un répertoire de la machine hôte (host) dans un conteneur¶
Il faudra utiliser l'option lxc.mount.entry dans le fichier de configuration du container
lxc.mount.entry=/export/library mnt/montage-perso none bind 0 0
- On peut rajouter l'option rw "ex: ...none bind,rw" afin d'obtenir les droits de lire et écrire à l'intérieur du container
- Avec l'option create=dir, on peut créer le répertoire à l'intérieur du container sans le créer manuellement
ex:
lxc.mount.entry=/export/library mnt/montage-perso none bind,create=dir 0 0
Passthrough d'un périphérique usb¶
Pour monter un périphérique usb dans un container lxc, ça se passe là aussi dans le fichier de configuration du conteneur:
- Exemple pour un tuner tnt usb:
lxc.cgroup.devices.allow = c 212:* rwm
lxc.mount.entry = /dev/dvb dev/dvb none bind,optional,create=dir
ps: Un lien vers une vidéo (allemand) https://www.youtube.com/watch?v=5ipAI-iee8I
Du changement dans LXC V3.0¶
Changement de syntaxe dans les fichiers de configuration des containers à partir de la version 3 de LXC
Pour modifier les fichiers de config pour chaque container, un script a été créée, il suffit de faire:
lxc-update-config -h|--help [-c|--config]
exemple:
lxc-update-config -c tv-ct
La nouvelle syntaxe, pour la version 3 de lxc resemble à ça:
Legacy Key (removed from LXC master) | New Key |
-------------------------------------|-------------------------------|
lxc.aa_profile | lxc.apparmor.profile |
lxc.aa_allow_incomplete | lxc.apparmor.allow_incomplete |
lxc.console | lxc.console.path |
lxc.devttydir | lxc.tty.dir |
lxc.haltsignal | lxc.signal.halt |
lxc.id_map | lxc.idmap |
lxc.init_cmd | lxc.init.cmd |
lxc.init_gid | lxc.init.gid |
lxc.init_uid | lxc.init.uid |
lxc.limit | lxc.prlimit |
lxc.logfile | lxc.log.file |
lxc.loglevel | lxc.log.level |
lxc.mount | lxc.mount.fstab |
lxc.network | lxc.net |
lxc.network. | lxc.net.[i]. |
lxc.network.flags | lxc.net.[i].flags |
lxc.network.hwaddr | lxc.net.[i].hwaddr |
lxc.network.ipv4 | lxc.net.[i].ipv4.address |
lxc.network.ipv4.gateway | lxc.net.[i].ipv4.gateway |
lxc.network.ipv6 | lxc.net.[i].ipv6.address |
lxc.network.ipv6.gateway | lxc.net.[i].ipv6.gateway |
lxc.network.link | lxc.net.[i].link |
lxc.network.macvlan.mode | lxc.net.[i].macvlan.mode |
lxc.network.mtu | lxc.net.[i].mtu |
lxc.network.name | lxc.net.[i].name |
lxc.network.script.down | lxc.net.[i].script.down |
lxc.network.script.up | lxc.net.[i].script.up |
lxc.network.type | lxc.net.[i].type |
lxc.network.veth.pair | lxc.net.[i].veth.pair |
lxc.network.vlan.id | lxc.net.[i].vlan.id |
lxc.pts | lxc.pty.max |
lxc.rebootsignal | lxc.signal.reboot |
lxc.rootfs | lxc.rootfs.path |
lxc.se_context | lxc.selinux.context |
lxc.seccomp | lxc.seccomp.profile |
lxc.stopsignal | lxc.signal.stop |
lxc.syslog | lxc.log.syslog |
lxc.tty | lxc.tty.max |
lxc.utsname | lxc.uts.name |
Fonctionnement avec zerotier ou openvpn¶
Il faudra ajouter les lignes suivantes au fichier de configuration du container (/var/lib/ct/config), afin d'autoriser le container à utiliser les cartes réseaux virtuels:
lxc.cgroup.devices.allow = c 10:200 rwm
lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
lxc.cgroup2.devices.allow = c 10:200 rwm
lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"
Site pour fonctionnement avec zerotier: https://forum.level1techs.com/t/zerotier-in-lxc-proxmox/155515/2
Site de référence pour les modification de la v3: https://lists.linuxcontainers.org/pipermail/lxc-users/2018-February/014041.html
Site intéressant 1: https://www.linuxembedded.fr/2013/07/configuration-reseau-de-lxc/
Site intéressant 2: https://debian-facile.org/doc:autres:vm:lxc:reseau-bridge
Site intéressant 3: https://askubuntu.com/questions/743620/where-is-the-configuration-file-of-a-lxc-container