Outils pour utilisateurs

Outils du site


reseau:si5-howto28

Comment attacher un container LXC à un (ou plusieurs) bridge(s) virtuel(s) ?

Cet “howto” est, au départ, un extrait du "Quick Guide netLXC". Il a été amélioré gràce aux remarques judicieuses de Moussa CHAABT, étudiant TSSIO année 1, 2016-2017.

Merci à lui !! ;-)

Ici, on se positionne au niveau de la couche 2 du modèle OSI et nous allons réaliser de manière virtuelle et dans le contexte LXC ce que nous savons bien faire au niveau physique dans la vraie vie !
  • On déballe un PC et un switch,
  • on monte un NIC sur le PC (si celui-ci n'en est pas déjà pourvu),
  • on prend une filasse (classiquement un câble cuivre “paires torsadées à connectique RJ45) et on relie le port d'un switch avec le NIC du PC !

Attacher un container à un bridge : la base !

Nous allons ici rester humble… Juste attacher un container (une station de travail virtuelle) à un bridge (un switch virtuel) !

Etape 1 : fabriquer une station de travail nommée "station1" par clonage à partir de "templex"

Etape 2 : mise en réseau

Rien de bien compliqué à condition de bien comprendre et d'être cohérent !
Configuration de la machine netLXC hôte

Bien vérifier que le bridge sur lequel on veut connecter le container (ici br1) existe et possède une adresse IP privée…

Au besoin, vous pouvez créer un bridge particulier pour des besoins qui vous sont propres…

root@netLXC2017:/home/btssio# root@netLXC2018:/home/btssio# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0wan state UP group default qlen 1000
    link/ether 08:00:27:f9:39:de brd ff:ff:ff:ff:ff:ff
3: br0wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 08:00:27:f9:39:de brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global br0wan
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fef9:39de/64 scope link 
       valid_lft forever preferred_lft forever
4: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether fe:da:5e:e5:64:7c brd ff:ff:ff:ff:ff:ff
    inet 172.17.1.254/24 brd 172.17.1.255 scope global br1
       valid_lft forever preferred_lft forever
    inet6 fe80::b491:80ff:fe57:83ab/64 scope link 
       valid_lft forever preferred_lft forever
5: br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether fe:97:21:0d:f7:06 brd ff:ff:ff:ff:ff:ff
    inet 172.17.2.254/24 brd 172.17.2.255 scope global br2
       valid_lft forever preferred_lft forever
    inet6 fe80::aca1:86ff:fee8:e194/64 scope link 
       valid_lft forever preferred_lft forever
6: br3: <BROADCAST...

...
Bien noter son adresse IP !
root@netLXC2017:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
br1		8000.000000000000	no		
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio#   

Ici, nous voyons que br1 est bien là… mais ne sert pas à grand-chose ! :-)

Configuration du container

nous allons éditer “/var/lib/lxc/station1/config” et ajouter les lignes qui vont bien…

# Configuration de type réseau virtuel Ethernet bridge
lxc.net.0.type = veth
lxc.net.0.flags = up
# On choisit ici le bridge sur lequel on va se connecter
lxc.net.0.link = br1
# On indique ici le nom l'interface virtuelle qui sera créée sur le container
lxc.net.0.name = vers_br1
# On indique ici le nom l'interface virtuelle qui sera créée sur le bridge
lxc.net.0.veth.pair = station1br1

A ce stade, il est important de bien comprendre ce que l'on fait…

Attention : le fichier /var/lib/lxc/station1/config sera lu par LXC au démarrage du container… mais… si vous exécutez la commande Linux “reboot” pour redémarrer le container, le fichier /var/lib/lxc/station1/config ne sera pas relu.

Dans le cas d'une modification du fichier /var/lib/lxc/station1/config une fois le container démarré, il faut stopper le container puis le relancer par les commandes infra depuis la machine hôte “netLXC” :

root@netLXC2017:/home/btssio# lxc-stop -n station1 -k
root@netLXC2017:/home/btssio# lxc-start -n station1
  • On démarre le container “station1”
root@netLXC2017:/home/btssio# lxc-start -n station1
root@station1:~# root@station1:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
24: vers_br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 9a:cb:2d:bb:4c:c8 brd ff:ff:ff:ff:ff:ff
root@station1:~#
La commande usuelle “ip link” nous montre que l'interface “vers_br1” a bien été créée sur le container… Il ne reste plus qu'à lui donner une adresse IP (de préférence sur le même réseau que celui de br1… ) !!

Pour fixer une adresse IP à l'interface vers_br1, vous pouvez intervenir de 2 manières :

  • soit de manière “usuelle” en configurant l'interface vers_br1 dans le container et plus précisément dans le fichier /etc/network/interfaces,
  • soit de l'extérieur du container en configurant de manière ad hoc le fichier /var/lib/lxc/station1/config.

Attacher un container LXC à 2 bridges (ou plus !!)

Le container “R1” est maintenant doté de 2 cartes virtuelles Ethernet connectées à 2 switchs : br1 et br2.

Si vous activez la fonction de routage du container R1, vous obtenez donc un routeur à noyau Linux pleinement fonctionnel ! :-)

reseau/si5-howto28.txt · Dernière modification: 2020/06/08 12:13 (modification externe)