EDIT 2018 : Retrouvez cette série de tuto dans une grosse mise à jour ici : Xen et OpenVswitch sont dans une Debian 9 – V.2018
Seconde partie du tutoriel sur la virtualisation « Xen et OpenVswitch sont dans une Debian« .
Dans la première partie, nous avons installé Xen sur notre machine.
Maintenant, occupons nous du réseau !
Dans mon premier tutoriel sur la virtualisation, j’utilisais le système de bridge de linux (bridge-utils). Le fonctionnement est OK, pas de soucis, mais cela fait un bout de temps que je voulais tester OpenVswitch . Et cela s’avère même plus simple à l’usage à mon avis.
De plus, OpenVswitch gère les vlans, la QoS, le bonding, le mirroring, bref, un vrai jouet !
I – Installation
Toujours dans notre machine hôte Dom0, nous installons le paquet :
# apt-get install openvswitch-switch
On vérifie que tout est ok :
# ovs-vsctl show 051fd463-96f5-4529-a55a-ff0b03004ffc ovs_version: "2.3.0"
Rien de plus, y’a pas à dire, les paquets, c’est fichtrement pratique 😉
II – Création du premier switch
Nous allons maintenant créer le premier switch: br0. Celui ci servira a faire le lien entre eth0 (la connexion physique) et les machines que nous brancherons dessus. En l’occurrence, une fois tout en place, nous aurons deux machines dessus, le Dom0 et la VM Routeur.
# ovs-vsctl add-br br0
Regardons ce que cela a fait :
# ovs-vsctl show 051fd463-96f5-4529-a55a-ff0b03004ffc Bridge "br0" Port "br0" Interface "br0" type: internal ovs_version: "2.3.0"
On voit le bridge br0 et un port bro de type interne (port sur lequel branché le dom0). En effet :
# ifconfig br0 br0 Link encap:Ethernet HWaddr 42:1e:59:f4:5c:49 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Le dom0 a bien un brin br0 de type ethernet.
Nous allons modifier le fichier interfaces /etc/network/interfaces :
auto lo iface lo inet loopback # The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp allow-ovs br0 iface br0 inet static address IP_PUBLIQUE netmask 255.255.255.0 gateway GATEWAY ovs_type OVSBridge ovs_ports eth0 allow-br0 eth0 iface eth0 inet manual ovs_bridge br0 ovs_type OVSPort
Ici, l’ip publique correspond à l’ip principale de ma Dédibox et la gateway que mon Dom0 utilise déjà. Oui, en gros, c’est la config d’eth0 qu’on retrouve la.
Pour résumer,le noyau linux du Dom0 ne sera plus connecté a eth0. Eth0 sera branché a un switch, et sur ce switch, on connectera le noyau linux sur le lien br0.
On reboot la machine, on croise les doigts, et quelques instants après on doit pouvoir se connecter dessus.
On regarde :
# ovs-vsctl show 051fd463-96f5-4529-a55a-ff0b03004ffc Bridge "br0" Port "br0" Interface "br0" type: internal Port "eth0" Interface "eth0" ovs_version: "2.3.0"
On voit bien le switch, le port eth0 et le port br0.
Puis :
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0c:29:58:fd:1e adr inet6: fe80::20c:29ff:fe58:fd1e/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1911 errors:0 dropped:0 overruns:0 frame:0 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:1040132 (1015.7 KiB) TX bytes:8649 (8.4 KiB)
# ifconfig br0 br0 Link encap:Ethernet HWaddr 00:0c:29:58:fd:1e inet adr:IP_PUBLIQUE Bcast:BCASTPUBLIQUE Masque:255.255.255.0 adr inet6: fe80::20c:29ff:fe58:fd1e/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:112 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:11919 (11.6 KiB) TX bytes:9559 (9.3 KiB)
On a bien l’IP affectée à br0.
III – Création du bridge interne.
On va maintenant créer le bridge sur lequel les VMs seront connectées :
# ovs-vsctl add-br brint
Puis :
# ovs-vsctl show 051fd463-96f5-4529-a55a-ff0b03004ffc Bridge "br0" Port "br0" Interface "br0" type: internal Port "eth0" Interface "eth0" Bridge brint Port brint Interface brint type: internal ovs_version: "2.3.0"
On voit notre nouveau bridge avec un port brint qui est branché sur l’hyperviseur.
IV – Création des vlans
Pour le vlan, on va utiliser des fakebridge (des bridges dans un bridge).
# ovs-vsctl add-br vlan2 brint 2 # ovs-vsctl add-br vlan10 brint 10 # ovs-vsctl add-br vlansys brint 99
Cela ajoute trois vlans, vlan 2, taggué 2, vlan10, taggé 10 et un vlansys taggé 99.
# ovs-vsctl show 051fd463-96f5-4529-a55a-ff0b03004ffc Bridge "br0" Port "br0" Interface "br0" type: internal Port "eth0" Interface "eth0" Bridge brint Port vlansys tag: 99 Interface vlansys type: internal Port brint Interface brint type: internal Port "vlan2" tag: 2 Interface "vlan2" type: internal Port "vlan10" tag: 10 Interface "vlan10" type: internal ovs_version: "2.3.0"
Sur le même principe qu’avant, on trouve trois ports branchés sur trois interfaces de l’hyperviseur. On peut par exemple affecter une ip sur une de ces interfaces :
# ifconfig vlan99 10.99.1.1 netmask 255.255.255.0 broadcast 10.99.1.255
Et paf, tout est préparé pour notre tutoriel.
On a un Xen et un début de réseau virtuel.
Ne reste qu’a faire beaucoup de café et à se donner rendez vous dans la partie III : Mise en œuvre.