From 613a060f17a4d52f434948bdb156712c2fc1ac9c Mon Sep 17 00:00:00 2001 From: ycharbi Date: Sat, 27 Mar 2021 19:36:19 +0100 Subject: [PATCH] =?UTF-8?q?Refonte=20compl=C3=A8te=20du=20fichier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adaptation des explications à l'évolution des outils et amélioration de celles-ci. --- README.md | 72 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index f75dd2c..6cfa2e3 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,64 @@ -# Fichier *ifup.sh* -Ce fichier est le script d'initialisation des interfaces réseau pour les conteneurs *Systemd-nspawn* que j'ai écrit. +# Usage +Les fichiers *ifup.sh* et *ifdown.sh* sont les scripts de gestion des *VLAN* pour les conteneurs [Systemd-nspawn](https://doc.ycharbi.fr/index.php/Conteneurs_-_systemd) écrit par mes soins. Ils se bases sur la technologie de [filtrage des *VLAN*](https://doc.ycharbi.fr/index.php/Vlan_-_linux) 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](https://philip-trauner.me/blog/post/machinectl-autologin) le service `systemd-nspawn@.service` pour y ajouter les directives adéquates (notez l'emplacement des fichiers) : -Il gère la création de plusieurs interfaces réseau ainsi que les VLAN et peut mettre ces interfaces dans des ponts différents. Afin qu'il s'exécute au démarrage d'un conteneur, il faut ajouter à la directive *[Service]* du fichier */lib/systemd/system/systemd-nspawn@.service* le paramètre suivant: ``` bash +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*. + +``` ini +[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.* - Il faut au préalable ajouter deux lignes de commentaires au dessus de chaque directive "*Interface=*" dans le fichier de configuration de votre conteneur: -``` bash + +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](https://doc.ycharbi.fr/index.php/Conteneurs_-_systemd#Fichier_de_configuration) de celui-ci. + +Pour une interface non étiqueté : + +``` ini PONT=votrepont VLAN=vid ``` -Le script vérifie que ce que vous avez renseigné est valide. Si non, il ne fait rien. Le fichier "*apache1.nspawn*" est un exemple (se trouve dans */etc/systemd/nspawn/* sur le système de test). -Pour tester le script sans créer les interfaces, veillez remplacer les lignes d'initialisation du tableau *commandes_a_executer[]* de la fonction *generCmdIntRzo()* par les lignes suivantes: +Pour une interface de tronc 802.1Q : +``` ini +PONT=votrepont +8021Q=vid1,vi2,vid3 +``` -``` bash -commandes_a_executer+=( "echo \"ip link add ${interface} type veth peer name ${interface}_h\"" ) -commandes_a_executer+=( "echo \"ip link set ${interface}_h up\"" ) -commandes_a_executer+=( "echo \"ip link set ${interface}_h master ${pont}\"" ) -commandes_a_executer+=( "echo \"bridge vlan del dev ${interface}_h vid 1 PVID untagged master\"" ) -commandes_a_executer+=( "echo \"bridge vlan add dev ${interface}_h vid ${vlan} pvid untagged master\"" ) +Il est possible de mixer les notions au travers de plusieurs interfaces comme dans l'exemple suivant (fichier `/etc/systemd/nspawn/web.nspawn`) : +``` ini +[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 ``` -# À tester -Tester le comportement du script lorsque aucun fichier de configuration n'existe et en fonction du résultat, ajouter un test sur ce critaire. - + +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. + +:warning: *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.* :warning: +# 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()` : + +``` bash +echo ${commandes_a_executer["${id_commande_rzo}"]} +``` \ No newline at end of file