ycharbi
f8dd00e706
|
4 years ago | |
---|---|---|
README.md | 4 years ago | |
ifdown.sh | 4 years ago | |
ifup.sh | 4 years ago |
README.md
Usage
Les fichiers ifup.sh et ifdown.sh sont les scripts de gestion des 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 la création et le placement d'une interface réseau 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 fichiers) :
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
ExecStart=
ExecStart=systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth --settings=override --machine=%i
ExecStopPost=/etc/systemd/nspawn/ifdown.sh %i
Note : j'ai également retiré le -U
des paramètres d'initialisation, d'où les deux ExecStart=
(le premier, vide, permettant de réinitialiser la valeur par défaut). Ceci correspond à un besoin personnel et est facultatif.
Pour configurer les interfaces réseaux d'un conteneur, il faut ajouter deux lignes de commentaires au dessus de chaque directive Interface=
dans le fichier de configuration de celui-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
#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.
⚠️ 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 ce faire, vous pouvez ajouter la commande echo
devant l'action d'exécution comme suit dans la fonction execCmdIntRzo()
:
echo ${commandes_a_executer["${id_commande_rzo}"]}