Dépôts de configurations et scripts pour le logiciel de conteneurisation Systemd-nspawn.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ycharbi 20311f0d13
Ajout du support des interfaces physiques + mise à jour de la documentation
3 years ago
README.md Ajout du support des interfaces physiques + mise à jour de la documentation 3 years ago
ifdown.sh Ajout du support des interfaces physiques + mise à jour de la documentation 3 years ago
ifup.sh Ajout du support des interfaces physiques + mise à jour de la documentation 3 years ago

README.md

Usage

Les fichiers ifup.sh et ifdown.sh sont les scripts de gestion des interfaces réseaux supportant les VLAN pour les conteneurs Systemd-nspawn écrit par mes soins. Ils se bases sur la technologie de filtrage des VLAN du noyau Linux.

  • ifup.sh permet l'attribution d'une interface physique à un conteneur ainsi que la création et le placement d'une interface réseau virtuelle dans un VLAN ou dans un tronc 802.1Q. Il se charge également de l'intégrer à un pont spécifique (l'existence préalable de ce dernier est requise)
  • ifdown se charge de supprimer les interfaces créées par Systemd-nspawn après l'extinction du conteneur

Afin qu'ils s'exécutent au démarrage et à l'arrêt d'un conteneur, il faut modifier le service systemd-nspawn@.service pour y ajouter les directives adéquates (notez l'emplacement des scripts dans l'exemple) :

systemctl edit systemd-nspawn@.service

Collez-y le contenu suivant. Ceci aura pour effet de créer le fichier /etc/systemd/system/systemd-nspawn@.service.d/override.conf qui persistera aux mises à jour du paquet systemd-container.

[Service]
ExecStartPre=/etc/systemd/nspawn/ifup.sh %i
ExecStopPost=/etc/systemd/nspawn/ifdown.sh %i

Pour configurer les interfaces réseaux d'un conteneur, il faut :

  • pour une interface virtuelle : ajouter deux lignes de commentaires au dessus de chaque directive Interface= dans le fichier de configuration de celui-ci
  • pour une interface physique : utiliser la directive Interface= de façon normale en veillant à ne pas avoir l'une des deux lignes de commentaire dans les deux lignes au dessus de celle-ci

Pour une interface non étiqueté :

#PONT=votrepont
#VLAN=vid

Pour une interface de tronc 802.1Q :

#PONT=votrepont
#8021Q=vid1,vi2,vid3

Il est possible de mixer les notions au travers de plusieurs interfaces comme dans l'exemple suivant (fichier /etc/systemd/nspawn/web.nspawn) :

[Network]
#PONT=br0
#VLAN=100
Interface=web_100
#PONT=br0
#VLAN=121
Interface=web_121
#PONT=br0
#8021Q=5,210
Interface=web_T1

Interface=eth2
#PONT=br0
#8021Q=181,1109
Interface=web_T2

Le script vérifie que ce que vous avez renseigné est valide. S'il rencontre la moindre erreur, il s'interrompt sans modifier le système et vous oriente sur le problème. En utilisation avec un conteneur, les messages de retour du script sont visibles dans le journal du service via systemctl status systemd-nspawn@votreConteneur.service ou journalctl -xe.

⚠️ J'attire votre attention sur le fait que l'ajout, en cours de fonctionnement, de directives Interface= dans le ficher de configuration de votre conteneur a pour effet de neutraliser l'exécution d'ifdown.sh. Ceci est intrinsèque à la façon dont il fonctionne. Les interfaces créées par ifup.sh devront alors êtres supprimées manuellement. ⚠️

Tests sans altérations

Si vous voulez modifier les scripts, il peut être pratique d'afficher les commandes générées au lieu de les appliquer lors de vos tests. Pour se faire, vous pouvez ajouter la commande echo devant l'action d'exécution comme suit (et comme précisé en commentaire dans le script) dans la fonction execCmdIntRzo() (le script exige un nom de conteneur en paramètre) :

echo ${commandes_a_executer["${id_commande_rzo}"]}