Outils pour utilisateurs

Outils du site


sisr5:maquettefw

Construire une maquette d'expérimentation à base de containers LXC

La maquette prise en exemple est initialement relative au TP "iptables" mais peut bien sûr servir d'exemple pour architecturer tout type de réseau à base de containers LXC ! Imagine ! 8-)

Schéma de principe

Maquetter avec netLXC

Schéma de câblage virtuel !

Il s'agit ici de créer un réseau (virtuel) en connectant les interfaces (virtuelles aussi) des machines (containers LXC) à des ports (toujours virtuels) de switchs (encore et toujours virtuels !!). Nous nous situons ici au niveau des couches 1 et 2 du modèle OSI. On ne s'occupe donc pas de l'adressage IP !

Création de 3 containers LXC

Nous allons créer 3 containers :

  • Container “serveur”,
  • Container “station”,
  • Container “fw”.
root@netLXC:/home/btssio# lxc-copy -n templex -N station 
root@netLXC:/home/btssio# lxc-copy -n templex -N serveur
root@netLXC:/home/btssio# lxc-copy -n templex -N fw
root@netLXC:/home/btssio#

Création des 2 réseaux (Extérieur et Intérieur) par attachement des containers à des switchs virtuels

On branche la filasse virtuelle ! 8-)
La distribution netLXC est déjà équipée de switchs virtuels… Autant les utiliser !
root@netLXC:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800278eeff1	no		enp0s3
br1		8000.000000000000	no		
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no		
lxcbr0		8000.00163e000000	no		
root@netLXC:/home/btssio# 

Connexion de "serveur" à "br1"

Comme indiqué dans l'howto, il faut modifier le fichier de configuration du container “serveur” (/var/lib/lxc/serveur/config) :

...
...
...

####################################

# Connexion du container "serveur" au bridge virtuel br1

lxc.net.0.type = veth
lxc.net.0.flags = up

lxc.net.0.link = br1
lxc.net.0.name = serveth0
lxc.net.0.veth.pair = S1P1

Connexion de "fw" à "br1" et à "br2"

Comme indiqué dans l'howto, il faut modifier le fichier de configuration du container “fw” (/var/lib/lxc/fw/config) :

...
...

####################################

# Connexion du container "fw" au bridge virtuel br1

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br1
lxc.net.0.name = fweth0
lxc.net.0.veth.pair = S1P2


##################################

# Connexion du container "fw" au bridge virtuel br2
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br2
lxc.net.0.name = fweth1
lxc.net.0.veth.pair = S2P1

Connexion de "station" à "br1" et à "br2"

Comme indiqué dans l'howto, il faut modifier le fichier de configuration du container “fw” (/var/lib/lxc/station/config) :

##################################

...

# Connexion du container "station" au bridge virtuel br2

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br2
lxc.net.0.name = stationeth0
lxc.net.0.veth.pair = S2P2 

Lancement et arrêt de tous les containers

Pour rendre la vie agréable, il est tentant d'écrire un p'tit script… :-O
root@netLXC2018:/home/btssio# cat maquette.sh 
#!/bin/bash
lxc-start -n  station 
lxc-start -n fw 
lxc-start -n serveur 
root@netLXC2018:/home/btssio# chmod 775 maquette.sh 
root@netLXC2018:/home/btssio# ls -l maquette.sh 
-rwxrwxr-x 1 root root 71 sept. 23 18:54 maquette.sh
root@netLXC2018:/home/btssio#
Attention : le fichier de configuration de station (par exemple) /var/lib/lxc/station/config sera lu par LXC au démarrage du container… mais… si vous exécutez la commande Linux “reboot” pour redémarrer le container “station”, le fichier /var/lib/lxc/station/config ne sera pas relu.

Dans le cas d'une modification du fichier /var/lib/lxc/station/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 station

Après exécution du script de lancement des containers, on vérifie la bonne réussite de l'opération !

root@netLXC2018:/home/btssio# lxc-ls -f
NAME                STATE    IPV4  IPV6  AUTOSTART  
--------------------------------------------------
R1                  STOPPED  -     -     NO         
fw                  RUNNING  -     -     NO         
serveur             RUNNING  -     -     NO         
station             RUNNING  -     -     NO         
super-template-deb  STOPPED  -     -     NO         
templex             STOPPED  -     -     NO         
root@netLXC2018:/home/btssio# 

… et on vérifie aussi la bonne connexion aux bridges !

root@netLXC2018:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.080027f939de	no		eth0
							vbr0wan
br1		8000.fe1875476302	no		S1P1
							S1P2
br2		8000.fe059998393d	no		S2P1
							S2P2
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no	

Configuration IP des containers, tests usuels

Nous allons maintenant configurer la ou les interface(s) des containers LXC “station”, “fw” et “serveur” selon le plan d'adressage IP défini supra. On travaille donc ici en couche 3 du modèle OSI ! On oublie les switchs !! =)

Pour passer des commandes Linux à un container LXC, il faut :

  • que le container soit… démarré ! 8-)
  • que l'on attache une “console” au container !
root@netLXC:/home/btssio# lxc-start -n fw
root@netLXC:/home/btssio# lxc-ls -f fw
NAME STATE   AUTOSTART GROUPS IPV4 IPV6 
fw   RUNNING 0         -      -    -    
root@netLXC:/home/btssio# lxc-attach -n fw
root@fw:/home/btssio#

Pour configurer les adresses IP des interfaces d'un container LXC et attribuer à la machine une éventuelle adresse passerelle, 2 méthodes s'offrent à nous :

Méthode traditionnelle à la mode Linux

Méthode à la mode LXC

Cette méthode consiste à figer les adresses IP de chaque interface d'un container LXC directement depuis l'extérieur du container en rajoutant les lignes de configuration qui vont bien dans son fichier de configuration (/var/lib/lxc/nom_du_container/config) :

Ici, on prend l'exemple du container “station” dont on va modifier le fichier de configuration /var/lib/lxc/station/config :

...

##################################

# Connexion du container "station" au bridge virtuel br2

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br2
lxc.net.0.name = stationeth0
lxc.net.0.veth.pair = S2P2

# Adressage IP
lxc.net.0.ipv4 = 173.17.0.200/16
lxc.net.0.ipv4.gateway = 173.17.0.1
Après relance du container “station”, nous vérifions que tout est ok ! 8-)
root@station:~# ip addr stationeth0 show
Command "stationeth0" is unknown, try "ip addr help".
root@station:~# ip addr show dev stationeth0 
14: stationeth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 3a:40:87:95:ed:2b brd ff:ff:ff:ff:ff:ff
    inet 173.17.0.200/16 brd 173.17.255.255 scope global stationeth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3840:87ff:fe95:ed2b/64 scope link 
       valid_lft forever preferred_lft forever
root@station:~#  
root@station:~# ip route
default via 173.17.0.1 dev stationeth0 
173.17.0.0/16 dev stationeth0  proto kernel  scope link  src 173.17.0.200 
root@station:~# 

Et pour finir… ne pas oublier d'activer la fonction de routage sur la machine “fw”. La fonction de routage n'est pas activée par défaut sur les containers LXC !

Tests de routine

In fine, vous devriez obtenir cela :

Couche 2 :

root@netLXC2018:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.080027f939de	no		eth0
							vbr0wan
br1		8000.fe93cd4b35df	no		S1P1
							S1P2
br2		8000.feb66cc16fa3	no		S2P1
							S2P2
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no		
root@netLXC2018:/home/btssio#

Couche 3 :

root@netLXC2018:/home/btssio# lxc-ls -f
NAME                STATE    IPV4                        IPV6  AUTOSTART  
------------------------------------------------------------------------
R1                  STOPPED  -                           -     NO         
fw                  RUNNING  173.17.0.1, 192.168.218.11  -     NO         
serveur             RUNNING  192.168.218.1               -     NO         
station             RUNNING  173.17.0.200                -     NO         
super-template-deb  STOPPED  -                           -     NO         
templex             STOPPED  -                           -     NO         
root@netLXC2018:/home/btssio# 
root@station:~# ping 192.168.218.1 -c 4
PING 192.168.218.1 (192.168.218.1): 56 data bytes
64 bytes from 192.168.218.1: icmp_seq=0 ttl=63 time=0,065 ms
64 bytes from 192.168.218.1: icmp_seq=1 ttl=63 time=0,100 ms
64 bytes from 192.168.218.1: icmp_seq=2 ttl=63 time=0,098 ms
64 bytes from 192.168.218.1: icmp_seq=3 ttl=63 time=0,104 ms
--- 192.168.218.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0,065/0,092/0,104/0,000 ms
root@station:~# 

~~DISCUSSION~~

sisr5/maquettefw.txt · Dernière modification: 2020/06/08 12:13 (modification externe)