Outils pour utilisateurs

Outils du site


reseau:netlxcqg

netLXC Quick Guide

Cette prise en main rapide du kit de simulation réseau netLXC va vous permettre de maquetter sans difficulté vos premiers réseaux à base de composants à noyau Linux ! :-)

Présentation du kit de simulation netLXC

Comment disposer du produit netLXC ?

netLXC est, fondamentalement, une appliance virtuelle à base de Debian 8.6 au format VirtualBox. Deux solutions s'offrent à vous :

  • la première, pour les impatients, est de cloner une MV netLXC existante,
  • la seconde, plus formatrice mais plus dispendieuse en temps, est de la fabriquer !

Architecture netLXC

La boite à outils à disposition de l'utilisateur de netLXC

La couche logicielle LXC est montée sur une machine virtuelle hôte Debian nommée netLXC.

Les switchs virtuels

Sur cette MV netLXC ont été créé 7 ponts virtuels :

bridge adresse IP pré-configurée
br0wan type LAN/WAN10.0.2.15/24 (fournie par serveur DHCP VirtualBox)
br1 type LAN172.17.1.254/24
br2 type LAN172.17.2.254/24
br3 type LAN172.17.3.254/24
br4 type LAN172.17.4.254/24
br5 type LAN172.17.5.254/24
br6 type LAN172.17.6.254/24
Pour que la vie soit douce, j'ai pré-configuré les adresses IP des bridges… Bien entendu, on peut modifier cet adressage, ajouter ou supprimer des bridges (pourquoi les supprimer ? Les désactiver suffit !) :-)
Attention ! Si vous changez les adresses IP des bridges, utilisez des adresses IP privées et évitez tout particulièrement les réseaux suivants :
  • réseau privé de VirtualBox : 10.0.2.0/24
  • réseau privé du lycée : 10.187.37.0/24

sinon… les ennuis commencent… :-(

Terminator !

Pour gérer de manière ergonomique les nombreux terminaux relatifs aux différents containers, n'hésitez pas à utiliser… Terminator !!

Terminator, pré-installé sur netLXC, va vous permettre de gérer tous vos terminaux dans une fenêtre UNIQUE avec l'organisation qui vous convient le mieux…

Architecture-type d'un container

Comment commencer à maquetter des réseaux avec netLXC sans souffrance ?

Nous allons, dans ce Quick Guide, concevoir des maquettes réseaux simples pour prendre en main netLXC et avoir conscience de son potentiel.

Après cette mise en jambes… que chacun vole de ses propres ailes… !! :-)

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# ifconfig
br1       Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
          inet adr:172.17.1.254  Bcast:172.17.1.255  Masque:255.255.255.0
          adr inet6: fe80::b433:5bff:febc:2924/64 Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:885 errors:0 dropped:0 overruns:0 frame:0
          TX packets:910 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:71156 (69.4 KiB)  TX bytes:88326 (86.2 KiB)

br2       Link encap:Ethernet  HWaddr ba:97:9d:8f:b3:8c  
          inet adr:172.17.2.254  Bcast:172.17.2.255  Masque:255.255.255.0
          adr inet6: fe80::b897:9dff:fe8f:b38c/64 Scope:Lien

...
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 de la liaison entre le container et un bridge virtuel

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

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
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:~# ifconfig
lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:200 (200.0 B)  TX bytes:200 (200.0 B)

vers_br1  Link encap:Ethernet  HWaddr 0e:1a:e0:bd:b1:ec  
          adr inet6: fe80::c1a:e0ff:febd:b1ec/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:3377 (3.2 KiB)  TX bytes:648 (648.0 B)

root@station1:~#
La commande usuelle “ifconfig” 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… ) !!
root@station1:~# ifconfig vers_br1 172.17.1.1/24

root@station1:~# ping 172.17.1.254 -c 4 
PING 172.17.1.254 (172.17.1.254): 56 data bytes
64 bytes from 172.17.1.254: icmp_seq=0 ttl=64 time=0,043 ms
64 bytes from 172.17.1.254: icmp_seq=1 ttl=64 time=0,120 ms
64 bytes from 172.17.1.254: icmp_seq=2 ttl=64 time=0,079 ms
64 bytes from 172.17.1.254: icmp_seq=3 ttl=64 time=0,079 ms
--- 172.17.1.254 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0,043/0,080/0,120/0,027 ms
root@station1:~#

Dernière vérification, cette fois-ci sur la machine hôte :

root@netLXC2017:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
br1		8000.fe535a00f07c	no		station1br1
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio# 

Nous voyons que l'interface “stationbr1” (un port virtuel en quelque sorte… ) de br1 est bien active…

Opération réussie !

Bien entendu, il est conseillé de “figer en dur la configuration IP” de l'interface “vers_br1” en modifiant le fichier “/etc/network/interfaces” du container “station1

L'astuce du Chef ! pour pré-configurer adresses MAC et IP avant démarrage du container...

On arrête le container “station1”

On rajoute les lignes suivantes dans le fichier /var/lib/lxc/station1/config

lxc.utsname = station1
# 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


# Pour pré-configurer le container au niveau MAC et IP,
# on rajoute les lignes infra


# Fixer une adresse MAC arbitraire à l'interface "vers_br1"
lxc.net.0.hwaddr = 00:FF:AA:00:01:02
# Fixer une adresse IP (à éviter si vous utilisez un serveur DHCP of course...
lxc.net.0.ipv4 = 172.17.1.1/24
# Ici, il s'agit de l'adresse de br1 qui joue le rôle de passerelle.
# Fixer une gateway pour aller voir ailleurs si l'herbe est plus verte...
#lxc.net.0.ipv4.gateway = 172.17.1.254 

Vérification après démarrage du container…

root@station1:~# ifconfig
lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:200 (200.0 B)  TX bytes:200 (200.0 B)

vers_br1  Link encap:Ethernet  HWaddr 00:ff:aa:00:01:02  
          inet adr:172.17.1.1  Bcast:172.17.1.255  Masque:255.255.255.0
          adr inet6: fe80::2ff:aaff:fe00:102/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:3377 (3.2 KiB)  TX bytes:648 (648.0 B)

root@station1:~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         172.17.1.254    0.0.0.0         UG    0      0        0 vers_br1
172.17.1.0     0.0.0.0         255.255.255.0   U     0      0        0 vers_br1
root@station1:~# 
Opération réussie !

Construire nos 2 premiers réseaux LAN à base de containers LXC !

A vous, amis étudiants, de mettre en application ce que l'on a appris ensemble supra ! 8-)

Nous allons réaliser 2 LANs correspondant aux 2 maquettes suivantes… et nous essaierons plus tard de les faire communiquer via un container-router…

A vous de jouer ! Réalisez ces 2 LAN en utilisant au maximum les différentes possibilités de configuration étudiées supra… !! :-)

Maquette 1

Après réalisation de la maquette 1, vous devez obtenir cela :

root@netLXC2017:/home/btssio# brctl show 
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
br1		8000.fe2c0f6fca6d	no		station1br1
							station2br1
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.000000000000	no		
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio# 

Bien vérifier que :

  • “station1” communique avec “station2”,
  • “station1” et “station2” communiquent avec la passerelle (le bridge) soit avec l'IP 172.17.1.254

Maquette 2

Après réalisation des 2 maquettes, vous devriez obtenir quelque chose comme cà…

root@netLXC2017:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
br1		8000.fed8f605f1eb	no		station1br1
							station2br1
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.fe6a36a9d013	no		station3br5
							station4br5
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio#

Plus surprenant… a priori…

Une station attachée à br1 communique avec une station liée à br5… Comment cela est-ce possible ?

root@station2:~# traceroute 172.17.5.1
traceroute to 172.17.5.1 (172.17.5.1), 30 hops max, 60 byte packets
 1  172.17.1.254 (172.17.1.254)  0.030 ms  0.004 ms  0.003 ms
 2  172.17.5.1 (172.17.5.1)  0.012 ms  0.005 ms  0.005 ms
root@station2:~#

La commande usuelle “traceroute” nous montre que le paquet ICMP généré par la commande ping atteint la passerelle (en fait br1). si la communication etre les 2 LAN se fait, c'est donc que la machine hôte assure le routage…

Voyons tout cela :

root@netLXC2017:/home/btssio# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 br0wan
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 br0wan
172.17.1.0      0.0.0.0         255.255.255.0   U     0      0        0 br1
172.17.2.0      0.0.0.0         255.255.255.0   U     0      0        0 br2
172.17.3.0      0.0.0.0         255.255.255.0   U     0      0        0 br3
172.17.4.0      0.0.0.0         255.255.255.0   U     0      0        0 br4
172.17.5.0      0.0.0.0         255.255.255.0   U     0      0        0 br5
172.17.6.0      0.0.0.0         255.255.255.0   U     0      0        0 br6
root@netLXC2017:/home/btssio#

effectivement… ! :-)

Par contre, malgré les lignes :

Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 br0wan
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 br0wan
Impossible pour une stationx LXC de communiquer avec l'Internet… On lâche l'affaire pour l'instant…

Désactivons la fonction de routage sur la machine hôte :

root@netLXC2017:/home/btssio# echo 0 > /proc/sys/net/ipv4/ip_forward
root@netLXC2017:/home/btssio#

là… la communication entre 2 stations attachées respectivement à 2 LAN différentes se fait… moins bien !

root@station2:~# ping 172.17.5.1 -c 3
PING 172.17.5.1 (172.17.5.1): 56 data bytes
--- 172.17.5.1 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
root@station2:~# traceroute 172.17.5.1
traceroute to 172.17.5.1 (172.17.5.1), 30 hops max, 60 byte packets
 1  * * *
 2  * * * 
CQFD !!!! :-)

Faire communiquer les réseaux LAN entre eux... même si le routage est désactivé sur l'hôte netLXC !

Nous allons ici montrer qu'il sera possible pour nous de maquetter n'importe quel type de réseau aussi complexe soit-il…

Les limites seront celles du noyau Linux utilisé et de… nos compétences et notre imagination ! 8-)

nous allons d'abord désactiver la fonction de routage de netLXC :

root@netLXC2017:/home/btssio# echo 0  > /proc/sys/net/ipv4/ip_forward

Désormais, la communication entre les 2 LAN créés au préalable ne doit plus se faire…

Il va donc falloir rajouter un routeur bi-pattes (en fait un container à 2 interfaces (une pour chaque LAN) selon la maquette infra :

Le nombre de containers à lancer est maintenant conséquent… Pour éviter de saisir de manière répétitive les commandes “lxc-start”, je vous suggère d'écrire un p'tit script… !

Si tout est bien câblé, nous devrions obtenir quelque chose comme cela…

root@netLXC2017:/home/btssio# brctl show 
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
br1		8000.fe10c16cd09b	no		routeurbr1
							station1br1
							station2br1
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.fe0a7d7aa07f	no		routeurbr5
							station3br5
							station4br5
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio#

Extrait du fichier /var/lib/lxc/routeur/config

lxc.utsname = routeur

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br1
lxc.net.0.name = vers_br1
lxc.net.0.veth.pair = routeurbr1
# lxc.net.0.ipv4.gateway = 
lxc.net.0.ipv4 = 172.17.1.253/24

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br5
lxc.net.0.name = vers_br5
lxc.net.0.veth.pair = routeurbr5
# lxc.net.0.ipv4.gateway = 
lxc.net.0.ipv4 = 172.17.5.253/24
A vous de jouer, amis étudiants ! :-)

Quelques diagnostics que vous pouvez faire…

  • depuis une station (ici station2)
root@station2:~# ifconfig
lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:200 (200.0 B)  TX bytes:200 (200.0 B)

vers_br1  Link encap:Ethernet  HWaddr be:99:aa:67:e4:b8  
          inet adr:172.17.1.2  Bcast:172.17.1.255  Masque:255.255.255.0
          adr inet6: fe80::bc99:aaff:fe67:e4b8/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:273 errors:0 dropped:0 overruns:0 frame:0
          TX packets:374 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:27049 (26.4 KiB)  TX bytes:34900 (34.0 KiB)

<code>root@station2:~# ping 172.17.5.1 -c 2
PING 172.17.5.1 (172.17.5.1): 56 data bytes
64 bytes from 172.17.5.1: icmp_seq=0 ttl=63 time=0,099 ms
64 bytes from 172.17.5.1: icmp_seq=1 ttl=63 time=0,119 ms
--- 172.17.5.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0,099/0,109/0,119/0,000 ms
root@station2:~# traceroute 172.17.5.1
traceroute to 172.17.5.1 (172.17.5.1), 30 hops max, 60 byte packets
 1  172.17.1.253 (172.17.1.253)  0.033 ms  0.006 ms  0.005 ms
 2  172.17.5.1 (172.17.5.1)  0.017 ms  0.008 ms  0.008 ms
root@station2:~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         172.17.1.253    0.0.0.0         UG    0      0        0 vers_br1
172.17.1.0      0.0.0.0         255.255.255.0   U     0      0        0 vers_br1
root@station2:~# 
  • depuis le routeur :
root@routeur:~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
172.17.1.0      0.0.0.0         255.255.255.0   U     0      0        0 vers_br1
172.17.5.0      0.0.0.0         255.255.255.0   U     0      0        0 vers_br5
root@routeur:~#

Accéder à l'extérieur !

En l'état, notre réseau ne peut pas communiquer vers l'extérieur.

Par contre, notre machine hôte netLXC le peut !

root@netLXC2017:/home/btssio# traceroute www.free.fr
traceroute to www.free.fr (212.27.48.10), 30 hops max, 60 byte packets
 1  10.0.2.2 (10.0.2.2)  0.136 ms  0.231 ms  0.098 ms
 2  192.168.0.1 (192.168.0.1)  0.416 ms  0.431 ms  0.535 ms
 3  192.168.1.254 (192.168.1.254)  0.896 ms  1.169 ms  1.051 ms
 4  nor87-h02-176-143-31-62.dsl.sta.abo.bbox.fr (176.143.31.62)  10.299 ms  10.480 ms  10.423 ms
 5  194.158.113.109 (194.158.113.109)  11.179 ms  11.127 ms  11.755 ms
 6  be65.cbr01-poi.net.bbox.fr (212.194.171.164)  20.567 ms  16.962 ms  20.788 ms
 7  be5.cbr01-ntr.net.bbox.fr (212.194.171.137)  22.229 ms  17.919 ms  17.918 ms
 8  * * *
 9  * * *
10  p11-crs16-1-be1012.intf.routers.proxad.net (194.149.162.85)  24.724 ms  26.824 ms  23.803 ms
11  p11-9k-1-be1000.intf.routers.proxad.net (78.254.249.130)  20.463 ms  21.081 ms  17.350 ms
12  bzn-9k-2-sys-be2001.intf.routers.proxad.net (194.149.161.246)  17.921 ms  17.846 ms  17.996 ms
13  www.free.fr (212.27.48.10)  18.282 ms  16.360 ms  16.582 ms
root@netLXC2017:/home/btssio#

Nous voyons que le premier routeur accédé est le routeur d'interface 10.0.2.2.

Nous savons aussi, qu'à la construction de netLXC, nous avons installé un bridge br0wan d'adresse 10.0.2.x (ici : 10.0.2.15).

root@netLXC2017:/home/btssio# ifconfig
br1       Link encap:Ethernet  HWaddr fe:1c:c0:ec:da:34  
          inet adr:172.17.1.254  Bcast:172.17.1.255  Masque:255.255.255.0
          adr inet6: fe80::54aa:4aff:fe4c:6904/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50 errors:0 dropped:0 overruns:0 frame:0
          TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:3408 (3.3 KiB)  TX bytes:7853 (7.6 KiB)
...
br0wan    Link encap:Ethernet  HWaddr 08:00:27:4a:d2:c0  
          inet adr:10.0.2.15  Bcast:10.0.2.255  Masque:255.255.255.0
          adr inet6: fe80::a00:27ff:fe4a:d2c0/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1011 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:976580 (953.6 KiB)  TX bytes:73418 (71.6 KiB)
...
Il faut donc “tirer une filasse” entre le container “routeur” et le bridge br0wan“ de la machine hôte netLXC.

Il faut, pour ce faire, modifier le fichier /var/lib/lxc/routeur/config qui devient (extrait) :

lxc.utsname = routeur

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br1
lxc.net.0.name = vers_br1
lxc.net.0.veth.pair = routeurbr1
# lxc.net.0.ipv4.gateway = 172.17.1.254
lxc.net.0.ipv4 = 172.17.1.253/24

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br5
lxc.net.0.name = vers_br5
lxc.net.0.veth.pair = routeurbr5
# lxc.net.0.ipv4.gateway = 172.17.5.254
lxc.net.0.ipv4 = 172.17.5.253/24

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br0wan
lxc.net.0.name = vers_br0wan
lxc.net.0.veth.pair = routeurbr0wan

Modifier aussi le fichier /etc/network/interfaces du container “routeur” en rajoutant ces lignes :

# bridge br0wan, notre passerelle vers l'extérieur, vers l'Internet et peut-être plus loin encore...
auto vers_br0wan
iface vers_br0wan inet dhcp
        bridge_fd 0
        bridge_maxwait 0
On voit ici que l'interface “vers_br0wan” sera configurée par le serveur DHCP de virtualbox…

Si tout va bien, on devrait obtenir ceci…

root@netLXC2017:/home/btssio# brctl show
bridge name	bridge id		STP enabled	interfaces
br0wan		8000.0800274ad2c0	no		eth0
							routeurbr0wan
br1		8000.fe1cc0ecda34	no		routeurbr1
							station1br1
							station2br1
br2		8000.000000000000	no		
br3		8000.000000000000	no		
br4		8000.000000000000	no		
br5		8000.fe2aec27d8d0	no		routeurbr5
							station3br5
							station4br5
br6		8000.000000000000	no		
root@netLXC2017:/home/btssio#

Vérifications usuelles :

root@routeur:~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 vers_br0wan
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 vers_br0wan
172.17.1.0      0.0.0.0         255.255.255.0   U     0      0        0 vers_br1
172.17.5.0      0.0.0.0         255.255.255.0   U     0      0        0 vers_br5
Notre routeur accède bien aux 3 réseaux; il a également une passerelle vers l'extérieur, le routeur Virtualbox 10.0.2.2.

De facto, le container “routeur” va bien se balader sur l'Internet…

root@routeur:~# ping www.free.fr
PING www.free.fr (212.27.48.10): 56 data bytes
64 bytes from 212.27.48.10: icmp_seq=0 ttl=63 time=17,169 ms
64 bytes from 212.27.48.10: icmp_seq=1 ttl=63 time=17,243 ms
64 bytes from 212.27.48.10: icmp_seq=2 ttl=63 time=17,294 ms
^C--- www.free.fr ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 17,169/17,235/17,294/0,051 ms
root@routeur:~# 

Le but ultime est que les stations “station1… station4” puissent accéder à l'Internet… Est-ce vraiment le cas ?

root@station4:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
...
Petit problème… :-/

N'oublions pas qu'au retour du ping, le routeur VirtualBox n'a pas connaissance des réseaux locaux 172.17.5.0/24 et 172.17.1.0/24.

Le plus simple est de faire de la translation d'adresses (type SNAT) sur le container routeur… à l'aide d'iptables.

root@routeur:~# iptables -t nat -A POSTROUTING -o vers_br0wan -j MASQUERADE
root@routeur:~# iptables -t nat -L POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            
root@routeur:~#

et là... 

<code>root@station4:~# traceroute www.free.fr
traceroute to www.free.fr (212.27.48.10), 30 hops max, 60 byte packets
 1  172.17.5.253 (172.17.5.253)  0.059 ms  0.021 ms  0.018 ms
 2  10.0.2.2 (10.0.2.2)  0.207 ms  0.131 ms  0.102 ms
 3  * * *
 4  192.168.1.254 (192.168.1.254)  0.971 ms  0.900 ms  1.061 ms
 5  nor87-h02-176-143-31-62.dsl.sta.abo.bbox.fr (176.143.31.62)  10.952 ms  10.864 ms  10.778 ms
 6  194.158.113.109 (194.158.113.109)  11.340 ms  9.302 ms  9.748 ms
 7  be65.cbr01-poi.net.bbox.fr (212.194.171.164)  21.022 ms  20.890 ms  20.764 ms
 8  be5.cbr01-ntr.net.bbox.fr (212.194.171.137)  25.484 ms  20.454 ms  25.178 ms
 9  la42.rpt06-th2.net.bbox.fr (212.194.171.145)  16.801 ms  17.310 ms  17.221 ms
10  * * *
11  p11-crs16-1-be1012.intf.routers.proxad.net (194.149.162.85)  17.379 ms  16.345 ms  24.680 ms
12  p11-9k-1-be1000.intf.routers.proxad.net (78.254.249.130)  18.257 ms  18.105 ms  18.233 ms
13  bzn-9k-2-sys-be2001.intf.routers.proxad.net (194.149.161.246)  19.258 ms  19.078 ms  17.323 ms
14  www.free.fr (212.27.48.10)  17.067 ms  17.096 ms  16.706 ms
root@station4:~# 

Dans ce type de montage, le container “routeur” peut jouer le rôle d'un véritable pare-feu… entre le monde réel (VirtualBox et au-delà) et nos maquettes d'expérimentation… par de simples commandes iptables !

Simple le réseau, n'est-il pas vrai ? ;-)

Analyser les trames

Rien de plus simple… il nous suffit de lancer l'analyseur de trames Wireshark sur la machine netLXC et de choisir l'interface à écouter…

There are no longer any limits to your imagination ! =)

~~DISCUSSION~~

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