« Open vSwitch » : différence entre les versions
(Ajout de la source pour la partie LXC.) |
Aucun résumé des modifications |
||
Ligne 154 : | Ligne 154 : | ||
==Configuration== | ==Configuration== | ||
<source lang="bash"> | <source lang="bash"> | ||
Switch#conf t | Switch# conf t | ||
Switch(config)#hostname 3550-I | Switch(config)# hostname 3550-I | ||
3550-I(config)#vlan 10 | 3550-I(config)# vlan 10 | ||
3550-I(config-vlan)#vlan 11 | 3550-I(config-vlan)# vlan 11 | ||
3550-I(config-vlan)#vlan 100 | 3550-I(config-vlan)# vlan 100 | ||
3550-I(config-vlan)#interface g 1/0/1 | 3550-I(config-vlan)# interface g 1/0/1 | ||
3550-I(config-if)#description --- vers Openvswitch --- | 3550-I(config-if)# description --- vers Openvswitch --- | ||
3550-I(config-if)#switchport trunk allowed vlan 1,10,11,100 | 3550-I(config-if)# switchport trunk allowed vlan 1,10,11,100 | ||
3550-I(config-if)#switchport mode trunk | 3550-I(config-if)# switchport mode trunk | ||
3550-I(config-if)#no shutdown | 3550-I(config-if)# no shutdown | ||
3550-I(config-if)#exit | 3550-I(config-if)# exit | ||
3550-I(config)#interface vlan 1 | 3550-I(config)# interface vlan 1 | ||
3550-I(config-if)#ip address 192.168.1.254 255.255.255.0 | 3550-I(config-if)# ip address 192.168.1.254 255.255.255.0 | ||
3550-I(config-if)#no shutdown | 3550-I(config-if)# no shutdown | ||
3550-I(config)#interface vlan 10 | 3550-I(config)# interface vlan 10 | ||
3550-I(config-if)#ip address 192.168.10.254 255.255.255.0 | 3550-I(config-if)# ip address 192.168.10.254 255.255.255.0 | ||
3550-I(config-if)#no shutdown | 3550-I(config-if)# no shutdown | ||
3550-I(config-if)#interface vlan 11 | 3550-I(config-if)# interface vlan 11 | ||
3550-I(config-if)#ip address 192.168.11.254 255.255.255.00 | 3550-I(config-if)# ip address 192.168.11.254 255.255.255.00 | ||
3550-I(config-if)#no shutdown | 3550-I(config-if)# no shutdown | ||
3550-I(config-if)#int vlan 100 | 3550-I(config-if)# int vlan 100 | ||
3550-I(config-if)#ip address 192.168.100.254 255.255.255.0 | 3550-I(config-if)# ip address 192.168.100.254 255.255.255.0 | ||
3550-I(config-if)#no shutdown | 3550-I(config-if)# no shutdown | ||
3550-I(config-if)#do write | 3550-I(config-if)# do write | ||
</source> | </source> | ||
==Script de la section== | ==Script de la section== | ||
Ligne 270 : | Ligne 270 : | ||
lxc.network.ipv4 = 192.168.11.10/24 | lxc.network.ipv4 = 192.168.11.10/24 | ||
</source> | </source> | ||
==Passerelle par défaut== | ==Passerelle par défaut== | ||
À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une [https://fr.wikipedia.org/wiki/Switch_virtual_interface interface de VLAN] (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux. | À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une [https://fr.wikipedia.org/wiki/Switch_virtual_interface interface de VLAN] (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux. | ||
Ligne 295 : | Ligne 292 : | ||
Activation imédiate | Activation imédiate | ||
echo 1 > /proc/sys/net/ipv4/ip_forward | echo 1 > /proc/sys/net/ipv4/ip_forward | ||
==Source de la section== | |||
*http://stackoverflow.com/questions/34021070/lxc-with-open-vswitch#34038873 | |||
=KVM dans des VLAN= | |||
=Sources= | =Sources= | ||
* http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/ | * http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/ |
Version du 12 mai 2017 à 17:57
ATTENTION
L'article est en cours de rédaction et d’expérimentationOpen vSwitch, don son abréviation est OVS, permet de créer des commutateurs virtuels au sein du système d'exploitation. Celui-ci gère les VLANs et les liens Trucks. Ce programme est utile dans plusieurs cas:
- Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)
- Gérer le réseau de chaque VMs ou conteneurs comme des machines physiques
- Communiquer de façon transparente entre un commutateur virtuel et physique
Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.
Installation
Open vSwitch est disponible dans les dépôts Debian
# apt install openvswitch-switch
Configuration OVS
Open vSwitch stock sa configuration dans le fichier /etc/openvswitch/conf.db
. Nous allons voir deux façons de le configurer. Dans les deux cas, c'est ce fichier qui viendra se remplir (et c'est celui-ci qu'il faudra supprimer si vous voulez repartir de zéro).
INFORMATION
Tout au long de la configuration, la commande pour connaître l’état du commutateur virtuel estovs-vsctl show
.Via le fichier interfaces
ATTENTION
Cette partie n'est pas au point. Faites plutôt la méthode en ligne de commande.Nous allons enregistrer la configuration actuel des interfaces réseaux
# cp /etc/network/interfaces /etc/network/interfaces.old
ASTUCE
Effacer le contenu du fichier /etc/network/interface pour éviter toutes confusions.Créer un switch virtuel
Dans le fichier /etc/network/interface ajouter :
# Création d'un switch ovs
allow-ovs br0
iface br0 inet manual
ovs_type OVSBridge
Pour appliquer les changements, il faut redémarrer le PC.
ATTENTION
Si vous redémarrez votre machine vous perdez la connexion!Ajouter un port virtuel au switch
Toujours dans le fichier /etc/network/interface ajouter :
# Ajouter un port virtuel au switch
allow-ovs vport0
iface vport0 inet manual
ovs_bridge br0
ovs_type OVSPort
Ajouter une ligne a la configuration du switch pour associer le port:
# Création d'un switch ovs
allow-ovs br0
iface br0 inet manual
ovs_type OVSBridge
ovs_ports vport0
Ajouter un port physique au switch
Toujours dans le fichier /etc/network/interface ajouter :
# Ajouter un port virtuel au switch
allow-ovs eth0
iface eth0 inet manual
ovs_bridge br0
ovs_type OVSPort
Modifier une ligne a la configuration du switch pour associer le port:
# Création d'un switch ovs
allow-ovs br0
iface br0 inet manual
ovs_type OVSBridge
ovs_ports vport0 eth0
Si vous voulez avoir une ip pour votre machine :
DHCP:
# Création d'un switch ovs
allow-ovs br0
iface br0 inet dhcp
ovs_type OVSBridge
ovs_ports vport0 eth0
IP statique :
# Création d'un switch ovs
allow-ovs br0
iface br0 inet static
ovs_type OVSBridge
ovs_ports vport0 eth0
address 10.50.10.44
netmask 255.255.255.0
gateway 10.50.10.1
Dans ce cas vous pouvez redémarrer votre machine sans perdre la connexion.
Via la ligne de commande
Création du commutateur virtuel
Nous allons créer un pont br0 et configurer l'interface eth0 (notre lien physique vers l’extérieur) pour devenir un port trunk
ovs-vsctl add-br br0
Création du port trunk
Comprenant tout les VLAN
ovs-vsctl add-port br0 eth0 vlan_mode=trunk
transportant uniquement le trafic venant du VLAN 1,10,11 et 100
ovs-vsctl add-port br0 eth0 trunks=1,10,11,100
Création des ports virtuels
Notez qu'on ne tag pas le vlan1.
ovs-vsctl add-port br0 vlan1 -- set interface vlan1 type=internal ovs-vsctl add-port br0 vlan10 tag=10 -- set interface vlan10 type=internal ovs-vsctl add-port br0 vlan11 tag=11 -- set interface vlan11 type=internal ovs-vsctl add-port br0 vlan100 tag=100 -- set interface vlan100 type=internal
Assignation d'une IP aux interfaces de VLAN
Temporaire
ifconfig vlan1 192.168.1.253 netmask 255.255.255.0 up ifconfig vlan10 192.168.10.253 netmask 255.255.255.0 up ifconfig vlan11 192.168.11.253 netmask 255.255.255.0 up ifconfig vlan100 192.168.100.253 netmask 255.255.255.0 up
Permanent
Pour mettre une IP permanente aux interfaces de VLAN, il suffit de les configurer dans le fichier /etc/network/interfaces
les interfaces de VLAN se configurent comme n'importe quelle interface.
Script de la section
Voici un script sans fioriture et facile à lire qui reprend les commandes vu dans cette section pour tester cette procédure sans vous prendre la tête. Prenez l'habitude de lire le code source d'un script avant de l’exécuter pour éviter toute compromission involontaire.
Télécharger le script depuis nos fichiers.
Activer le port trunk
L'interface eth0 est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier /etc/network/interfaces
.
allow-hotplug eth0 iface eth0 inet manual
Et monter l'interface
ifup eth0
Activation du routage
Permanent à partir du prochain démarrage
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
Activation imédiate
echo 1 > /proc/sys/net/ipv4/ip_forward
Configuration Cisco
Pour configurer un équipement Cisco via son port console, nous recommandons le logiciel Minicom sous Linux ou Putty sous Windows.
Configuration
Switch# conf t
Switch(config)# hostname 3550-I
3550-I(config)# vlan 10
3550-I(config-vlan)# vlan 11
3550-I(config-vlan)# vlan 100
3550-I(config-vlan)# interface g 1/0/1
3550-I(config-if)# description --- vers Openvswitch ---
3550-I(config-if)# switchport trunk allowed vlan 1,10,11,100
3550-I(config-if)# switchport mode trunk
3550-I(config-if)# no shutdown
3550-I(config-if)# exit
3550-I(config)# interface vlan 1
3550-I(config-if)# ip address 192.168.1.254 255.255.255.0
3550-I(config-if)# no shutdown
3550-I(config)# interface vlan 10
3550-I(config-if)# ip address 192.168.10.254 255.255.255.0
3550-I(config-if)# no shutdown
3550-I(config-if)# interface vlan 11
3550-I(config-if)# ip address 192.168.11.254 255.255.255.00
3550-I(config-if)# no shutdown
3550-I(config-if)# int vlan 100
3550-I(config-if)# ip address 192.168.100.254 255.255.255.0
3550-I(config-if)# no shutdown
3550-I(config-if)# do write
Script de la section
Fichier contenant l'ensemble des commandes de la section sans le prompt afin de faire un bête copier/coller.
À télécharger depuis nos fichiers.
Test de fonctionnement
Pour tester le bon transport des VLAN sur notre lien trunk, nous allons effectuer des pings successifs depuis le commutateur vers les différentes interfaces VLAN d'OVS.
3550-I#ping 192.168.1.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms
3550-I#ping 192.168.10.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms
3550-I#ping 192.168.11.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms
3550-I#ping 192.168.100.254
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.100.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms
LXC dans des VLAN
Dans cette section nous allons voir comment faire fonctionner LXC avec Open vSwitch avec une architecture conteneurisé isolé dans des VLAN.
ATTENTION
Je part du principe que seul l'étape Configuration Cisco a été suivie afin de rendre les sections indépendantes. Il est cependant aisé d'intégrer ce qui va suivre dans ce qui a précédemment été fait.Création du commutateur virtuel
Création du pont
ovs-vsctl --may-exist add-br commut0
Ajout du port trunk vers l’extérieur
ovs-vsctl add-port commut0 eth0 trunks=10,11,100
Activer le port trunk
L'interface eth0 est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier /etc/network/interfaces
allow-hotplug eth0
iface eth0 inet manual
Et monter l'interface
ifup eth0
Connecter un conteneur LXC à un VLAN
Scripts de configuration réseau
Pour que nos conteneurs soient intégrés aux VLAN dé leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. La difficulté étant que LXC choisi un nom aléatoire pour l'interface virtuel du conteneur à son démarrage, ce qui empêche toute configuration fixe. Pour affecter l'interface du LXC de manière sûr, nous allons créer 2 script qui l'ajoute au commutateur au moment du démarrage et la retire au moment de l'extinction. On en profitera pour étiqueter le bon VLAN à cette interface.
Script de démarrage
vim /etc/lxc/ifup
#!/bin/bash
ovsCommut=commut0
TAG=11
ovs-vsctl --may-exist add-br ${ovsCommut}
ovs-vsctl --if-exists del-port ${ovsCommut} $5
ovs-vsctl --may-exist add-port ${ovsCommut} $5
ovs-vsctl --if-exists set port $5 tag=${TAG}
Script d'extinction
vim /etc/lxc/ifdown
ovsCommut=commut0
ovs-vsctl --if-exists del-port ${ovsCommut} $5
Droits d'accès
Il faut rendre ces scripts exécutables
chmod +x /etc/lxc/if*
Configuration du conteneur
Nous allons configurer le conteneur pour utiliser ces paramètres
vim /var/lib/lxc/<votre_conteneur>/config
lxc.network.type = veth
lxc.network.flags = up
lxc.network.script.up = /etc/lxc/ifup
lxc.network.script.down = /etc/lxc/ifdown
lxc.network.hwaddr = 00:16:3e:15:b3:62
lxc.network.ipv4 = 192.168.11.10/24
Passerelle par défaut
À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une interface de VLAN (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux.
Création d'une interface VLAN11
ovs-vsctl --may-exist add-port commut0 vlan11 tag=11 -- --if-exists set interface vlan11 type=internal
Attribution d'une IP sur la SVI
temporaire
ifconfig vlan11 192.168.11.254/24
Permanent
vim /etc/network/interfaces
allow-hotplug vlan11
iface vlan11 inet static
address 192.168.11.253
netmask 255.255.255.0
Activation de l'interface
ifup vlan11
Activation du routage
Permanent à partir du prochain démarrage
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
Activation imédiate
echo 1 > /proc/sys/net/ipv4/ip_forward