« Open vSwitch » : différence entre les versions

De Wiki doc

Aucun résumé des modifications
mAucun résumé des modifications
 
(24 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[http://openvswitch.org/ Open vSwitch], dont son abbreviation est OVS, permet de créer des switchs vituels au sein du systeme d'exploitation. Celui-ci gère les VLANs et les port Trucks. Ce programme est utils dans plusieurs cas:
[[Category:réseaux_linux]]
{{chantier}}
[http://openvswitch.org/ Open 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 suportant les VLANs a moindre coût (un raspberry Pi avec des ports ethernet USB)
*Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)
*Gérer le reseau de chaque VMs ou conteneurs comme des machines phisiques
*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 personel consiste a gérer mon reseau de machine vituel après un pare-feu qui lui-même est vitualisé.
Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.
 
{{attention|Lors de la redaction (17/02/2017), Open vSwitch n'est pas stable sur Debian Stretch.}}


=Installation=
=Installation=


Open vSwitch est disponible dans [https://packages.debian.org/jessie/openvswitch-switch les depots Debian]
Open vSwitch est disponible dans [https://packages.debian.org/jessie/openvswitch-switch les dépôts Debian]


  # apt install openvswitch-switch
  # apt install openvswitch-switch


=Configuration=
=Configuration OVS=
Open vSwitch stock sa configuration dans le fichier <source lang="bash" inline>/etc/openvswitch/conf.db</source>. 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).
{{info|Tout au long de la configuration, la commande pour connaître l’état du commutateur virtuel est <source lang="bash" inline>ovs-vsctl show</source>.}}
==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


Nous allons enregister la configuration actuel des interfaces reseaux
# cp /etc/network/interfaces /etc/network/interfaces.old


# cp /etc/network/interface /etc/network/interface.old
{{astuce|Effacer le contenu du fichier <source lang="bash" inline>/etc/network/interfaces</source> pour éviter toutes confusions.}}


{{astuce|Effacer le contenu du fichier /etc/network/interface pour eviter toutes confusions.}}
===Créer un switch virtuel===


==Créer un switch virtuel==
Dans le fichier <source lang="bash" inline>/etc/network/interfaces</source> ajouter :
 
Dans le fichier /etc/network/interface ajouter :


<source lang="bash">
<source lang="bash">
Ligne 33 : Ligne 37 :
</source>
</source>


Pour appliquer les changements, il faut redémarer le PC.
Pour appliquer les changements, il faut redémarrer le PC.


{{attention|Si vous redémarrez votre machine vous perdez la connexion!}}
{{attention|Si vous redémarrez votre machine vous perdez la connexion!}}


==Ajouter un port vituel au switch==
===Ajouter un port virtuel au switch===


Toujours dans le fichier /etc/network/interface ajouter :
Toujours dans le fichier <source lang="bash" inline>/etc/network/interfaces</source> ajouter :


<source lang="bash">
<source lang="bash">
Ligne 59 : Ligne 63 :
</source>
</source>


==Ajouter un port phisique au switch==
===Ajouter un port physique au switch===


Toujours dans le fichier /etc/network/interface ajouter :
Toujours dans le fichier <source lang="bash" inline>/etc/network/interfaces</source> ajouter :


<source lang="bash">
<source lang="bash">
Ligne 104 : Ligne 108 :
</source>
</source>


Dans ce cas vous pouvez redemarrer votre machine sans perdre la connexion.
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 <source lang="bash" inline>/etc/network/interfaces</source> 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 [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-conf-trunk.sh 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 <source lang="bash" inline>/etc/network/interfaces</source>.
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 [[:Category:Cisco|Cisco]] via son port console, nous recommandons le logiciel [[Minicom]] sous Linux ou [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Putty] sous Windows.
==Configuration==
<source lang="bash">
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
</source>
==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 [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-cisco-conf-trunk.sh 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.
<source lang="bash">
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
</source>
=LACP=
Pour configurer l'agrégation de lien avec un commutateur Cisco, vous pouvez vous référez à [[Lacp - cisco|ce document]].
==En ligne de commande==
ovs-vsctl add-bond br0 bond0 eth0 eth1
==Via le fichier interfaces==
<source>
iface bond0 inet manual
ovs_bonds eth0 eth1
ovs_type OVSBond
ovs_bridge vmbr0
ovs_options lacp=active bond_mode=balance-tcp vlan_mode=trunk
</source>
==Sources de la section==
*http://blog.scottlowe.org/2012/10/19/link-aggregation-and-lacp-with-open-vswitch/
 
=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|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 <source lang="bash" inline>/etc/network/interfaces</source>
<source lang="bash">
allow-hotplug eth0
iface eth0 inet manual
</source>
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és leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. Nous allons donc créer 2 scripts qui l'attache 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
<source lang="bash">
#!/bin/bash
ovsCommut=`grep -e "^# LXC br ID" /var/lib/lxc/$1/config | cut -f 6 -d ' '`
TAG=`grep -e "^# LXC tag ID" /var/lib/lxc/$1/config | cut -f 6 -d ' '`
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}
</source>
====Script d'extinction====
vim /etc/lxc/ifdown
<source lang="bash">
#!/bin/bash
ovsCommut=commut0
ovs-vsctl --if-exists del-port ${ovsCommut} $5
</source>
 
====Droits d'accès====
Il faut rendre ces scripts exécutables
chmod +x /etc/lxc/if*


=État du switch=
===Configuration du conteneur===
Nous allons configurer le conteneur pour utiliser ces paramètres
vim /var/lib/lxc/''<votre_conteneur>''/config
<source lang="bash">
# LXC br ID = commut0
# LXC tag ID = 170
lxc.network.type = veth
lxc.network.veth.pair = veth001
lxc.network.flags = up


Pour connaître l’état du switch :
lxc.network.script.up = /etc/lxc/ifup
lxc.network.script.down = /etc/lxc/ifdown
lxc.network.hwaddr = 00:16:3e:15:b3:62
</source>


  # ovs-vsctl show
{{info|<source lang="bash" inline># LXC br ID = br0</source> et <source lang="bash" inline># LXC tag ID = 170</source> ne sont pas anodins, il permettent, pour le premier, de configurer le pont OVS d’appartenance du conteneur et pour le deuxième, l'id de VLAN utilisé. Ces données sont traités par le script décrit plus haut.}}
 
{{astuce|'''<nowiki>lxc.network.veth.pair = veth001</nowiki>''' permet de nommer l'interface réseau du conteneur côté hôte. Personnellement, je met le nom du conteneur, de cette manière j'ai un truck propre quand je liste mes interfaces réseaux sur l'hôte.}}
 
==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.
===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
<source lang="bash">
allow-hotplug vlan11
iface vlan11 inet static
address 192.168.11.253
netmask 255.255.255.0
</source>
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
==Source de la section==
*http://stackoverflow.com/questions/34021070/lxc-with-open-vswitch#34038873
=KVM dans des VLAN=
Veuillez suivre les étapes dans [[Qemu|ce document]] pour utiliser une machine virtuelle KVM dans un VLAN Open vSwitch.
=Sources=
* http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/

Dernière version du 6 décembre 2017 à 19:19

EN CHANTIER

Article en cours d'écriture et/ou de test. Certains éléments peuvent être incomplets et mener à un résultat non fonctionnel.
Merci de ne pas rager.

Open 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 est ovs-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/interfaces pour éviter toutes confusions.

Créer un switch virtuel

Dans le fichier /etc/network/interfaces 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/interfaces 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/interfaces 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

LACP

Pour configurer l'agrégation de lien avec un commutateur Cisco, vous pouvez vous référez à ce document.

En ligne de commande

ovs-vsctl add-bond br0 bond0 eth0 eth1

Via le fichier interfaces

iface bond0 inet manual
	ovs_bonds eth0 eth1
	ovs_type OVSBond
	ovs_bridge vmbr0
	ovs_options lacp=active bond_mode=balance-tcp vlan_mode=trunk

Sources de la section

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és leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. Nous allons donc créer 2 scripts qui l'attache 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=`grep -e "^# LXC br ID" /var/lib/lxc/$1/config | cut -f 6 -d ' '`
TAG=`grep -e "^# LXC tag ID" /var/lib/lxc/$1/config | cut -f 6 -d ' '`
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
#!/bin/bash
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 br ID = commut0
# LXC tag ID = 170
lxc.network.type = veth
lxc.network.veth.pair = veth001
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

INFORMATION

# LXC br ID = br0 et # LXC tag ID = 170 ne sont pas anodins, il permettent, pour le premier, de configurer le pont OVS d’appartenance du conteneur et pour le deuxième, l'id de VLAN utilisé. Ces données sont traités par le script décrit plus haut.

ASTUCE

lxc.network.veth.pair = veth001 permet de nommer l'interface réseau du conteneur côté hôte. Personnellement, je met le nom du conteneur, de cette manière j'ai un truck propre quand je liste mes interfaces réseaux sur l'hôte.

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

Source de la section

KVM dans des VLAN

Veuillez suivre les étapes dans ce document pour utiliser une machine virtuelle KVM dans un VLAN Open vSwitch.

Sources