Auto-hébergement : configurer un cluster Proxmox 2 sans multicast

Ou comment interconnecter, via Internet et en Unicast, plusieurs noeuds Proxmox installés sur des réseaux distincts.

MAJ 30 mars 2012 : la version stable de Proxmox VE 2 est disponible et le billet est à jour. 🙂

Charlatan ! Le wiki de Proxmox 2 est formel : pas de multicast, pas de cluster

Oui mais non. (D’abord…)

Non seulement ça marche mais en plus, chose appréciable, la solution est plutôt élégante : suffit de faire tourner les noeuds Proxmox sur un réseau virtuel (supportant le Multicast) et d’interconnecter l’ensemble avec OpenVPN (en Unicast).

Bon, là, à priori et si vous êtes normalement constitués, z’avez les yeux qui brillent et la langue qui pendouille, sans parler du filet de bave qui coule le long de votre barbe encore tâchée par la pizza de la veille. (Ok, alors le cliché, ça c’est fait…)

Mais, halte camarades, rendons d’abord à César ce qui lui appartient car en fait (et sauf erreur), c’est « ned Productions Ltd » qui a dégainé le premier avec un tutorial (en Anglais) fort sympathique sur le sujet :

Configuring a Proxmox VE 2.x cluster running over an OpenVPN intranet

Ce que je vous propose ici n’est autre qu’une « traduction » libre, en français dans le texte, des différentes étapes à suivre avec en prime une petite touche de personnalisation car nous allons procéder d’une manière un peu différente.

En résumé, si après avoir lu ce billet vous n’y arriviez pas, franchement, je n’ai plus qu’à me pendre.

Retour en arrière : monter un cluster avec Proxmox 2, ça sert à quoi ?

A frimer dans la cour de récré…

D’abord, essayez d’oublier le discours marketing environnant et totalement merdique qui tente de vous vendre le « cloud » à toutes les sauces : l’intérêt majeur pour les hébergeurs est de rationaliser leurs coûts (donc plus de marge) tout en vendant un produit trois fois plus cher que sa valeur intrinsèque (donc encore plus de marge).

Proxmox, c’est d’abord un système de virtualisation (Open Source) qui permet de faire tourner plusieurs serveurs virtuels sur une même machine. Rien que ça, c’est déjà fort sympathique. (Si, si…)

Il y a deux modes de virtualisation possibles : Full Virtualization (KVM) et Container Virtualization (OpenVZ).

  • KVM : possibilité de faire tourner différents OS (Windows et Linux par ex mais nécessite un CPU avec instructions « VT »)
  • OpenVZ : uniquement des distributions utilisant un noyau Linux commun (celui de l’hôte, meilleures perfs)

Ensuite, vient le clustering qui permet de regrouper plusieurs serveurs Proxmox (les noeuds) au sein d’une même entité (le cluster).

Donc, supposons : vous avez chez vous un serveur Linux (normal pour un auto-hébergé) mais également un second serveur (lui aussi sous Linux) à votre disposition chez vos parents/amis/connaissances/autres auto-hébergés. (Rayez la mention inutile)

Avec un cluster, il est possible de déplacer une machine virtuelle d’un noeud à l’autre en un clic afin, par exemple, d’équilibrer la charge entre les serveurs. Il est également possible de faire des sauvegardes complètes (toujours en un clic) des machines virtuelles, synchroniser ces sauvegardes avec Rsync et, le jour ou un des deux noeud meurt (liaison ADSL coupée, panne EDF, météorite, attaque extraterrestre, etc), suffira juste de restaurer les machines virtuelles sur le noeud encore en vie, modifier les DNS et basta : les services repartiront comme si de rien n’était.

Bref, si avec tout ça vous n’êtes toujours pas convaincu que Proxmox « ça rox du poney » et bien retournez donc cliquer sous Windows. (Non mais c’te blague… Ces djeunz, ils ne respectent plus rien ! Et comme disait pépé : « de mon temps, on se contentait d’une orange à Noël… »)

Préliminaires : encouragement du sportif, boissons énergisantes et grandes inspirations

La suite du billet est un peu longue mais pas de panique car au final, c’est plutôt simple : suffit de suivre les instructions pas à pas.

Prévoyez tout de même un peu de café et quelques barres chocolatés.

Note : tout ce qui suit est basé sur la distribution Proxmox VE 2 stable.

Dernière précision : il sera question de serveur « primaire » et de serveurs « secondaires ». Dans Proxmox 2, ces notions n’existent plus mais dans le cadre de billet, c’est juste pour identifier le serveur principal sur lequel tous les serveurs « annexes » vont se connecter.

Bon, ayé ? Z’êtes prêt ? C’est parti.

Étape 1/10 : téléchargement de l’image ISO de Proxmox 2

Les images ISO de Proxmox se trouvent ici : Proxmox VE

Téléchargez l’image « Proxmox VE 2.0 ISO Installer ».

Ensuite, sous Windows (c’est la honte, toussa…), téléchargez Image Writer : c’est un petit utilitaire de Suse qui vous permettra de copier l’image ISO de Proxmox sur votre clé USB (Ben oui, je sais pas pour vous mais perso, j’achète plus de lecteur DVD depuis un petit moment).

Renommez l’image ISO de Proxmox avec l’extenstion « .raw » puis lancez Image Writer, sélectionnez l’image ISO (avec l’extension « .raw »), sélectionner votre clé USB et enfin, lancez la copie. (Gare cependant car votre clé USB sera complètement effacée)

365 Mo plus tard, vous aurez une belle image bootable prête à l’emploi sur votre clé USB.

Bien, passons à l’install de Proxmox.

Étape 2/10 : installation de Proxmox 2 « bare-metal »

Insérez votre clé USB sur le serveur choisi, démarrez le bousin, allez dans le bios et enfin, cherchez l’option qui-va-bien pour booter sur la clé USB.

Assurez-vous que vous n’avez rien à perdre car l’installation de Proxmox effacera toutes les données sur le disque dur sélectionné.

Pour ceux d’entre-vous qui voudrait juste installer Proxmox sur une Debian standard et ce, sans effacer les données, c’est possible (mais ce n’est pas l’objet de ce billet) : Install Proxmox VE on Debian Squeeze.

Paramètres du boot

Avant de lancer l’install en elle-même, il est possible de passer quelques options au boot du noyau :

linux maxroot=100 swapsize=4

Ces deux arguments indiquent que la partition racime (/) doit être de 100 Go et que la swap doit être de 4 Go.

Pour plus d’infos, voyez ici : Debugging Installation

Paramètres d’installation

L’installation (en Anglais) est un jeu d’enfant mais prévoyez plusieurs choses :

  1. Vous êtes libres de choisir le hostname qui vous plait (seul Proxmox va s’en servir, pas besoin d’entrées DNS valides) mais, histoire de vous y retrouver dans la suite de l’article, je vous conseille ceci :
    • « proxmox-server-1.mon-cluster.vpn » pour le serveur principal
    • « proxmox-server-2.mon-cluster.vpn » pour le serveur secondaire
    • « proxmox-server-3.mon-cluster.vpn » pour le serveur tertiaire
    • etc.
  2. Précisez une adresse IP qui « marche » (on va devoir se connecter en SSH sur le serveur pour la suite)
  3. Faite en sorte que le serveur ait accès à Internet (donc une gateway qui fonctionne, forcément, c’est mieux)
  4. Indiquez un serveur DNS fonctionnel (dans le pire des cas 8.8.8.8 fera très bien l’affaire, ce sont les DNS de Google)

Cliquez sur suivant, suivant et suivant (tiens, ça me rappelle un autre OS…) et quand le serveur reboote (bip !), retirez la clé USB.

Félicitations, c’est terminé : vous pouvez débrancher l’écran, le clavier et la souris puis remiser ce serveur dans un placard (avec au moins un cable RJ45, sinon ça va pas le faire) car dorénavant, tout va se passer en SSH.

Résistez à l’idée de vous connecter tout de suite sur l’interface web de Proxmox (port 8006) : on a encore des choses à faire. 😉

Étape 3/10 : configuration de base

Connectez-vous en SSH sur votre serveur flambant neuf puis rendez-vous dans le répertoire « /root » afin de customiser un minimum bash.

/root/.bashrc

D’abord, par précaution, on fait une sauvegarde du ficher à modifier :

# cp -av /root/.bashrc /root/.bashrc.original

Ensuite on ajoute les lignes suivantes au fichier « /root/.bashrc » :

export PS1='\u@`hostname -f`:\w\$ '
export LESS='-S'

alias  l='ls -alF --color=yes --full-time --time-style=long-iso | more'
alias ll='ls -alF --color=yes --full-time --time-style=long-iso'

Et enfin, on recharge le shell avec un :

# exec bash

ce qui va afficher notre nouveau prompt :

root@proxmox-server-1.mon-cluster.vpn:~#

Au moins, à partir de maintenant, on sait sur quel serveur on travaille et en prime vous avez deux alias bien plus pratiques que la commande « ls » classique.

/etc/apt/sources.list

Ok, vérifiez ensuite le fichier « /etc/apt/sources.list » :

deb http://ftp.fr.debian.org/debian squeeze main contrib

# PVE packages provided by proxmox.com
deb http://download.proxmox.com/debian squeeze pve

# security updates
deb http://security.debian.org/ squeeze/updates main contrib

Normalement il n’y a rien à toucher mais certains hébergeurs (OVH par exemple) modifient ce fichier pour y mettre leurs serveurs caches : à vous de voir si vous voulez les utiliser ou jouer la sécurité en interrogeant directement les serveurs de Debian et Proxmox.

Si vous voulez le modifier, rebelote, une petite sauvegarde :

# cp -av /etc/apt/sources.list /etc/apt/sources.list.original

Et vous configurez le fichier en fonction de vos besoins.

apt-get update

Et quand tout est Ok, on peut alors lancer un update :

# apt-get update

Get:1 http://download.proxmox.com squeeze Release.gpg [198 B]
Ign http://download.proxmox.com/debian/ squeeze/pve Translation-en
Ign http://download.proxmox.com/debian/ squeeze/pve Translation-en_US
Get:2 http://download.proxmox.com squeeze Release [1,897 B]
Ign http://download.proxmox.com squeeze/pve amd64 Packages
[...]

Fetched 7,018 kB in 14s (471 kB/s)
Reading package lists... Done

apt-get upgrade

Maintenant que la liste des paquets est à jour, passons aux mises à jour proprement dites :

# apt-get upgrade

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common file libcurl3-gnutls libfreetype6 libgnutls26 libmagic1 libpng12-0
libtasn1-3 libxml2 libxml2-utils
14 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,619 kB of archives.
After this operation, 61.4 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y

[...]

Starting web server: apache2.
Setting up apache2 (2.2.16-6+squeeze6) ...
Setting up libcurl3-gnutls (7.21.0-2.1+squeeze1) ...
Setting up libfreetype6 (2.4.2-2.1+squeeze4) ...
Setting up libpng12-0 (1.2.44-1+squeeze3) ...
Setting up libxml2 (2.7.8.dfsg-2+squeeze3) ...
Setting up libxml2-utils (2.7.8.dfsg-2+squeeze3) ...

Good ! Le système est maintenant à jour.

Étape 4/10 : configuration de l’interface réseau virtuelle

/etc/modprobe.d/dummy.conf

Pour cela, c’est le module « dummy » qui s’y colle, tapez la ligne suivante :

# echo "options dummy numdummies=2" > /etc/modprobe.d/dummy.conf

En résumé, cela indique que si le noyau charge le module « dummy » (qui est une interface réseau virtuelle), et bien qu’il pense à en préparer au moins 2 : dummy0 et dummy1.

(l’interface dummy0 est parfois déjà utilisée d’où la nécessité d’en créer une deuxième)

modprobe dummy

Ensuite, pour charger le module, faites un :

# modprobe dummy

puis on affiche toutes les interface réseau (même celles qui sont inactives) avec :

# ifconfig -a | grep Link | grep -v inet6

dummy0    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
dummy1    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
lo        Link encap:Local     Loopback
venet0    Link encap:UNSPEC    HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
vmbr0     Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx

Normalement et sur une machine disposant d’une seule carte réseau physique, vous devriez voir 6 interfaces.

/etc/network/interfaces

Ok, maintenant que le module « dummy » est chargé, passons à la configuration réseau :
(le fichier sera sans doute différent si votre machine possède plusieurs cartes réseau physiques ou si vmbr1 est déjà présent)

# cat /etc/network/interfaces

auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
        address xxx.xxx.xxx.xxx
        netmask xxx.xxx.xxx.xxx
        gateway xxx.xxx.xxx.xxx
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

Au lieu des « xxx », vous verrez apparaitre la configuration réseau que vous avez choisi lors de l’installation de Proxmox : à priori, pas besoin de changer quoi que ce soit puisque vous arrivez à vous connecter en SSH. (Parce que vous êtes bien connecté en SSH, hein ?)

Une petite sauvegarde pour la route :

# cp -av /etc/network/interfaces /etc/network/interfaces.original

et on ajoute à la suite du fichier « /etc/network/interfaces », notre nouvelle interface virtuelle :

auto openvpnbr0
iface openvpnbr0 inet static
        address xxx.xxx.xxx.xxx
        netmask 255.255.255.0
        network xxx.xxx.xxx.0
        broadcast xxx.xxx.xxx.255
        bridge_ports dummy1
        bridge_stp off
        bridge_fd 0
        post-up route add -net 224.0.0.0 netmask 240.0.0.0 dev openvpnbr0

Vous êtes totalement libre quand au choix du réseau et de l’adresse IP pour cette interface virtuelle mais, le point important est de choisir en bonne et due forme un réseau non routable  (sinon je vous garantis que ça va mal se mettre).

A titre d’exemple, j’ai opté pour le réseau 192.168.192.0/24 (qui n’existe nulle part sur mon réseau local), ce qui nous donne :

auto openvpnbr0
iface openvpnbr0 inet static
        address 192.168.192.1
        netmask 255.255.255.0
        network 192.168.192.0
        broadcast 192.168.192.255
        bridge_ports dummy1
        bridge_stp off
        bridge_fd 0
        post-up route add -net 224.0.0.0 netmask 240.0.0.0 dev openvpnbr0

L’adresse IP virtuelle de ce premier serveur (ou noeud) est donc 192.168.192.1 et repose sur un réseau privé de classe C (/24).

Note : si vous relisez cette section lors de l’installation d’un second serveur Proxmox, l’adresse IP sera alors 192.168.192.2 (et pour un troisième serveur ce sera 192.168.192.3, etc).

/etc/init.d/network restart

Bon, il est temps d’appliquer les modifications :

# /etc/init.d/networking restart

Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces ... (warning).
Reconfiguring network interfaces...
Waiting for vmbr0 to get ready (MAXWAIT is 2 seconds).

Waiting for openvpnbr0 to get ready (MAXWAIT is 2 seconds).
done.

Note : si avez comme message d’erreur « interface dummy1 does not exist! », deux possibilités :

  1. Le module « dummy » était déjà chargé donc les paramètres ne seront pris en compte qu’au prochain reboot (voir plus bas)
  2. Vous faite un « rmmod dummy » à vos risques et périls… (puis de nouveau un « modprobe dummy »)

Si tout s’est bien passé, vous devriez voir apparaitre la nouvelle interface virtuelle :

 # ifconfig openvpnbr0

openvpnbr0 Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.192.1  Bcast:192.168.192.255  Mask:255.255.255.0
inet6 addr: fe80::dc42:4eff:fe3e:8092/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

ping 192.168.192.x

Vérifiez que l’interface virtuelle pingue correctement :

# ping 192.168.192.1

PING 192.168.192.1 (192.168.192.1) 56(84) bytes of data.
64 bytes from 192.168.192.1: icmp_req=1 ttl=64 time=0.242 ms
64 bytes from 192.168.192.1: icmp_req=2 ttl=64 time=0.137 ms
64 bytes from 192.168.192.1: icmp_req=3 ttl=64 time=0.130 ms

Si ce n’était pas le cas, vérifiez pas à pas les différents paramètres et, dans le pire des cas, appliquez la méthode Microsoft : rebootez et priez. (Je vous rappelle cependant que personne n’y croit mais bon, l’espoir fait vivre…)

Étape 5/10 : configuration de Proxmox sur l’interface virtuelle

Par défaut, les services de Proxmox sont configurés pour écouter sur toutes les interfaces réseau. Sauf que, nous on veut juste faire fonctionner les services sur l’interface virtuelle ‘openvpnbr0’ (qui a pour ip 192.168.192.1 pour le premier serveur, 192.168.192.2 pour le second, etc).

Voyons d’abord les services en écoute (vue simplifiée) :

# netstat -elnoput

tcp        127.0.0.1:85            0.0.0.0:*    2564/pvedaemon
tcp        0.0.0.0:22              0.0.0.0:*    2981/sshd
tcp        127.0.0.1:25            0.0.0.0:*    1181/master
tcp        0.0.0.0:44893           0.0.0.0:*    860/rpc.statd
tcp        0.0.0.0:111             0.0.0.0:*    848/portmap
tcp6       :::80                   :::*         2682/apache2
tcp6       :::22                   :::*         2981/sshd
tcp6       :::443                  :::*         2682/apache2
tcp6       :::8006                 :::*         2682/apache2
udp        0.0.0.0:612             0.0.0.0:*    860/rpc.statd
udp        0.0.0.0:111             0.0.0.0:*    848/portmap
udp        xxx.xxx.xxx.xxx:123     0.0.0.0:*    1078/ntpd
udp        127.0.0.1:123           0.0.0.0:*    1078/ntpd
udp        0.0.0.0:123             0.0.0.0:*    1078/ntpd
udp        0.0.0.0:55605           0.0.0.0:*    860/rpc.statd
udp6       xxxx::1:123             :::*         1078/ntpd
udp6       xxxx::xxxx:xxxx:xxxx:123:::*         1078/ntpd
udp6       xxxx::xxxx:xxxx:xxxx:123:::*         1078/ntpd
udp6       ::1:123                 :::*         1078/ntpd
udp6       :::123                  :::*         1078/ntpd

Comme on peut le voir, ssh, statd, portmap, apache et ntp écoutent aux 4 vents. C’est mal.

L’idée serait donc de « binder » un par un les différents services sur le loopback ainsi que sur l’interface virtuelle, comme le suggère l’auteur du tutorial en Anglais.

Sauf que, j’ai testé pour vous, ça marche pas… (En fait si, un peu, mais j’ai peur que cela pose problème par la suite)

  • ntp s’en branle et continue d’écouter sur toutes les interfaces (0.0.0.0)
  • portmap n’est pas capable d’écouter sur deux interfaces en même temps (localhost et openvpnbr0)
  • rpc.statd n’en fait qu’à sa tête et imite ntp (0.0.0.0 avec des ports aléatoire)

Donc, plutôt que de faire des modifications foireuses, le plus simple reste de configurer iptables afin de bloquer tout ce bazar.

Cependant, on va quand même modifier certains services.

IPV6

Dans le cas où, pour une raison X/Y/Z, vous ne souhaiteriez pas utiliser IPV6, créez le fichier suivant :

echo "options ipv6 disable=1" > /etc/modprobe.d/disable-ipv6.conf

SSH

Sauvegardons le fichier de conf :

cp -av /etc/ssh/sshd_config /etc/ssh/sshd_config.original

Ensuite, ajoutez au fichier « /etc/ssh/sshd_config » deux petites lignes :

ListenAddress xxx.xxx.xxx.xxx:2222
ListenAddress 192.168.192.1:22

Configurez la première directive « ListenAddress » (en remplaçant les xxx) de manière à ce que ssh écoute sur l’ip « publique » du serveur et choisisez un port non standard (ici le port 2222).

La seconde directive indique à SSH d’écouter sur le port 22 de l’interface virtuelle (ne changez surtout pas le port car sinon Proxmox ne va plus fonctionner correctement).

Redémarrez SSH :

# /etc/init.d/ssh restart

Et vérifiez que vous pouvez vous connecter sur le nouveau port (2222).

Apache

Rebelotte, sauvegarde du fichier de conf :

# cp -av /etc/apache2/apache2.conf /etc/apache2/apache2.conf.original

Ensuite, dans le fichier apache2.conf, commentez la ligne « Include ports.conf » :

# Include ports.conf

Sauvegardez le fichier pve.conf :

# cp -av /etc/apache2/sites-available/pve.conf /etc/apache2/sites-available/pve.conf.original

Et, toujours dans le ficher « pve.conf », remplacez la ligne ‘Listen 8006’ par :

Listen 192.168.192.1:8006

Redémarrez Apache :

# /etc/init.d/apache2 restart

/etc/hosts

Comme d’hab, on sauvegarde :

# cp -av /etc/hosts /etc/hosts.original

Logiquement, votre fichier hosts doit ressembler à ça :

127.0.0.1 localhost.localdomain localhost
xxx.xxx.xxx.xxx proxmox-server-1.mon-cluster.vpn proxmox-server-1 pvelocalhost
[...]

Modifiez le fichier hosts et remplacez « xxx.xxx.xxx.xxx » (qui doit correspondre à votre IP publique) par l’adresse IP de l’interface virtuelle (192.168.192.1 pour le serveur primaire, 192.168.192.2 pour le serveur secondaire, etc)

Ce qui nous donne :

127.0.0.1 localhost.localdomain localhost
192.168.192.1 proxmox-server-1.mon-cluster.vpn proxmox-server-1 pvelocalhost
[...]

/etc/hostname

Vérifiez bien que le nom de votre serveur (proxmox-server-1, proxmox-server-2, etc) correspond avec le nom présent dans le fichier « /etc/hostname » :

# cat /etc/hostname

proxmox-server-1

Si ce n’est pas le cas, modifiez le fichier « hostname » et appliquez la modification :

/etc/init.d/hostname.sh start

/etc/resolv.conf

Si vous êtes passé par l’install de Proxmox, normalement pas de souci. Sinon, vérifiez qu’il contient ceci :

search mon-cluster.vpn
nameserver 8.8.8.8

Pour ce billet j’utilise les DNS de Google (8.8.8.8) mais chacun est libre.

/etc/default/bootlogd

Dernière sauvegarde pour la route :

# cp -av /etc/default/bootlogd /etc/default/bootlogd.original

Puis on édite le fichier comme ceci :

BOOTLOGD_ENABLE=Yes

Au prochain redémarrage, vous trouverez des infos dans le fichier « /var/log/boot ».

init 0

Voilà, c’est fini : ne reste plus qu’à installer OpenVPN mais, en attendant, rebootez le serveur afin que toutes les modifications soient prises en compte.

Après le reboot, n’oubliez pas que SSH écoute sur le nouveau port (2222) et jetez un oeil dans les logs (/var/log/boot par exemple) afin de vérifier que tout s’est bien passé.

shutdown -r now

Étape 6/10 : installation de OpenVPN (serveur primaire)

Si vous avez déjà utilisé OpenVPN, il y a fort à parier que c’était en mode « routed ». Sauf qu’ici, on va utiliser OpenVPN en mode « bridge ».

Note : cette étape est seulement nécessaire sur le serveur primaire (192.168.192.1). Pour les serveurs secondaires (192.168.192.2, 192.168.192.3, etc), passez directement à l’étape 9/10.

Installation du paquet OpenVPN

# apt-get install openvpn

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libpkcs11-helper1 openssl-blacklist openvpn-blacklist
Suggested packages:
resolvconf
The following NEW packages will be installed:
libpkcs11-helper1 openssl-blacklist openvpn openvpn-blacklist
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 7,910 kB of archives.
After this operation, 16.0 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

[...]

Setting up openvpn (2.1.3-2) ...
Restarting virtual private network daemon.:.

Préparation des certificats

On récupère les scripts pour générer les clés, on se déplace dans le répertoire adéquat, on sauvegarde le fichier « vars » et enfin on affiche les paramètres qui nous intéressent :

# cp -av /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa/

# cd /etc/openvpn/easy-rsa/

# cp -av vars vars.original

# tail -n 8 vars

Éditez la fin du fichier « vars » à votre convenance, par exemple :

export KEY_COUNTRY="FR"
export KEY_PROVINCE=""
export KEY_CITY="Ma ville"
export KEY_ORG="Mon organisation"
export KEY_EMAIL="mon-email@mon-domaine.tld"

(Peu importe les valeurs, mettez ce que vous voulez)

Une fois que c’est fait, on peut passer à la préparation des certificats :

# source ./vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

# ./clean-all
# ./build-dh

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
........................................................+......
..+............+...............................................
...............................................................
...+............................................++*++*++*

# ./pkitool --initca

Using CA Common Name: Mon organisation CA
Generating a 1024 bit RSA private key
...++++++
................++++++
writing new private key to 'ca.key'
-----

Génération de la clé serveur

# ./pkitool --server proxmox-server-1

Generating a 1024 bit RSA private key
........................................................++++++
...........++++++
writing new private key to 'proxmox-server-1.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           PRINTABLE:'FR'
localityName          PRINTABLE:'Ma ville'
organizationName      PRINTABLE:'Mon organisation'
commonName            PRINTABLE:'proxmox-server-1'
emailAddress          IA5STRING:'mon-email@mon-domaine.tld'
Certificate is to be certified until Mar 13 15:48:23 2022 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

puis :

# openvpn --genkey --secret ./keys/ta.key

Génération de la clé cliente

# ./pkitool proxmox-client-1

Generating a 1024 bit RSA private key
.........................++++++
........++++++
writing new private key to 'proxmox-client-1.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           PRINTABLE:'FR'
localityName          PRINTABLE:'Ma ville'
organizationName      PRINTABLE:'Mon organisation'
commonName            PRINTABLE:'proxmox-client-1'
emailAddress          IA5STRING:'mon-email@mon-domaine.tld'
Certificate is to be certified until Mar 14 06:49:42 2022 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Sauvegardes des clefs

# cd /etc/openvpn/easy-rsa/keys/

# tar cvzf /root/proxmox-server-1-keys.tar.gz proxmox-server-1.crt proxmox-server-1.key ca.crt dh1024.pem ta.key

# tar cvzf /root/proxmox-client-1-keys.tar.gz proxmox-client-1.crt proxmox-client-1.key ca.crt ta.key

Conservez précieusement vos clés car sans elles, vous ne pourrez pas faire grand chose.

Étape 7/10 : configuration du serveur OpenVPN (serveur primaire)

On retourne dans le répertoire d’OpenVPN pour copier le fichier de conf par défaut et faire une sauvegarde :

# cd /etc/openvpn/

# zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > server.conf

# cp -av server.conf server.conf.original

serveur.conf

Éditer le fichier « server.conf » qui, une fois tous les commentaires enlevés, doit ressembler à ça :

# cat server.conf | grep -v -e '^;' | grep -v -e '^#' | grep -v -e '^$'

local xxx.xxx.xxx.xxx
port yyyy
proto udp
dev tap0
ca ca.crt
cert proxmox-server-1.crt
key proxmox-server-1.key # This file should be kept secret
dh dh1024.pem
server-bridge 192.168.192.1 255.255.255.0 192.168.192.101 192.168.192.110
client-to-client
duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mode server
tls-server
script-security 2
up "/etc/openvpn/up.sh"
down "/etc/openvpn/down.sh"
mssfix 1300
fragment 1300

Les paramètres à ajuster sont :

  • local : détermine sur quelle adresse IP « publique » le serveur OpenVPN doit écouter
    Note : si le serveur est dans votre réseau local alors il faudra configurer du NAT sur votre machinbox afin de pouvoir le joindre depuis l’extérieur
  • port : par défaut OpenVPN écoute sur le port 1194 mais le changer n’est pas un luxe afin d’éviter les scans
  • cert & key : précisez les fichiers qui correspondent au serveur que vous configurez (ici proxmox-server-1.crt et proxmox-server-1.key)
  • server-bridge : le premier paramètre détermine l’adresse IP du serveur sur l’interface virtuelle que nous avons déclarée précédemment. (192.168.192.1), ensuite vient le masque de réseau (255.255.255.0) puis, à la manière d’un serveur DHCP, la plage d’adresses IP attribuée aux clients qui se connecteront sur ce serveur (de 192.168.192.101 à 192.168.192.110)

Scripts up.sh & down.sh

Ne reste plus qu’à créer deux scripts qui seront lancés par OpenVPN lors du démarrage ou de l’extinction du VPN :

  • # vi /etc/openvpn/up.sh
#!/bin/bash
/sbin/ifconfig openvpnbr0 promisc
/sbin/ifconfig tap0 up promisc
/usr/sbin/brctl addif openvpnbr0 tap0
  • # vi /etc/openvpn/down.sh
#!/bin/bash
/usr/sbin/brctl delif openvpnbr0 tap0
/sbin/ifconfig tap0 down -promisc
/sbin/ifconfig openvpnbr0 -promisc

Ne pas oublier de rendre ces scripts exécutables :

# chmod 0755 up.sh down.sh

Ajout des clés

Et, finalement, on décompresse les clés pour le serveur :

# tar xvzf /root/proxmox-server-1-keys.tar.gz

Lancement du serveur OpenVPN

Voilà, c’est fini, on relance le serveur OpenVPN :

# /etc/init.d/openvpn restart

et dans le fichier de log « /etc/openvpn/openvpn.log », vous devriez voir ceci :

OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Oct 22 2010
NOTE: when bridging your LAN adapter with the TAP adapter, note that the new bridge adapter will often take on its own IP
NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Diffie-Hellman initialized with 1024 bit key
/usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Control Channel Authentication: using 'ta.key' as a OpenVPN static key file
Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
TLS-Auth MTU parms [ L:1574 D:166 EF:66 EB:0 ET:0 EL:0 ]
Socket Buffers: R=[133120->131072] S=[133120->131072]
TUN/TAP device tap0 opened
TUN/TAP TX queue length set to 100
/etc/openvpn/up.sh tap0 1500 1574   init
Data Channel MTU parms [ L:1574 D:1300 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
GID set to nogroup
UID set to nobody
UDPv4 link local (bound): [AF_INET]xxx.xxx.xxx.xxx:yyyy
UDPv4 link remote: [undef]
MULTI: multi_init called, r=256 v=256
IFCONFIG POOL: base=192.168.192.101 size=10
Initialization Sequence Completed

Étape 8/10 : installation du client OpenVPN sur un poste Windows

Note : si votre poste client est sous Linux, passez directement à l’étape suivante.

Installation d’OpenVPN GUI

Commencez par télécharger le « Windows Installer » : OpenVPN 2.2.2 — released on 2011.12.22

Installez OpenVPN et, si vous voulez éviter les ennuis, modifiez le raccourci pour exécuter l’application en tant qu’administrateur.

Fichier de configuration

Rendez-vous ensuite dans le sous-répertoire « config » d’OpenVPN et créez un dossier nommé « proxmox-client-1 ». Copiez dans ce nouveau répertoire le fichier « client.ovpn » qui se trouve dans le répertoire « sample-config » et renommez-le en « proxmox-client-1.ovpn ».

Retournez sur votre serveur Proxmox primaire afin de récupérer l’archive « proxmox-client-1-keys.tar.gz » présente dans le répertoire « /root » et décompressez les clefs dans le répertoire « proxmox-client-1 » (sous Windows).

Enfin, modifiez le fichier « proxmox-client-1.ovpn » de manière à obtenir, en enlevant tous les commentaires, la config suivante :

client
dev tap
proto udp
remote xxx.xxx.xxx.xxx yyyy
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert proxmox-client-1.crt
key proxmox-client-1.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3
mssfix 1300
fragment 1300

N’oubliez pas de configurer le paramètre « remote » avec l’adresse IP publique du serveur Proxmox et le port choisi précédemment (1194 par défaut).

Connexion au serveur Proxmox

Lancez « OpenVPN GUI » en tant qu’administrateur et connectez-vous sur le serveur Proxmox.

Si tout se passe bien, votre IP sera 192.168.192.101 et dans les logs (clic droit sur l’icône d’OpenVPN GUI -> Show Status), vous devriez avoir ceci :

OpenVPN 2.2.2 Win32-MSVC++ [SSL] [LZO2] [PKCS11] built on Dec 15 2011
NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Control Channel Authentication: using 'ta.key' as a OpenVPN static key file
Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
LZO compression initialized
Control Channel MTU parms [ L:1578 D:166 EF:66 EB:0 ET:0 EL:0 ]
Socket Buffers: R=[8192->8192] S=[8192->8192]
Data Channel MTU parms [ L:1578 D:1300 EF:46 EB:135 ET:32 EL:0 AF:3/1 ]
Fragmentation MTU parms [ L:1578 D:1300 EF:45 EB:135 ET:33 EL:0 AF:3/1 ]
Local Options hash (VER=V4): 'a257ef04'
Expected Remote Options hash (VER=V4): '8f3da10b'
UDPv4 link local: [undef]
UDPv4 link remote: xxx.xxx.xxx.xxx:yyyy
TLS: Initial packet from xxx.xxx.xxx.xxx:yyyy, sid=007d1677 b0b41363
VERIFY OK: depth=1, /C=FR/O=Mon organisation/CN=Mon organisation_CA/emailAddress=mon-email@mon-domaine.tld
VERIFY OK: nsCertType=SERVER
VERIFY OK: depth=0, /C=FR/O=Mon organisation/CN=proxmox-server-1/emailAddress=mon-email@mon-domaine.tld
Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
[proxmox-server-1] Peer Connection Initiated with xxx.xxx.xxx.xxx:yyyy
SENT CONTROL [proxmox-server-1]: 'PUSH_REQUEST' (status=1)
PUSH: Received control message: 'PUSH_REPLY,route-gateway 192.168.192.1,ping 10,ping-restart 120,ifconfig 192.168.192.101 255.255.255.0'
OPTIONS IMPORT: timers and/or timeouts modified
OPTIONS IMPORT: --ifconfig/up options modified
OPTIONS IMPORT: route-related options modified
TAP-WIN32 device [Connexion au réseau local] opened: \\.\Global\{49D8673E-7A0E-47C1-998A-A39895F2B682}.tap
TAP-Win32 Driver Version 9.9
TAP-Win32 MTU=1500
Notified TAP-Win32 driver to set a DHCP IP/netmask of 192.168.192.101/255.255.255.0 on interface {49D8673E-7A0E-47C1-998A-A39895F2B682} [DHCP-serv: 192.168.192.0, lease-time: 31536000]
Successful ARP Flush on interface [28] {49D8673E-7A0E-47C1-998A-A39895F2B682}
TEST ROUTES: 0/0 succeeded len=-1 ret=1 a=0 u/d=up
Initialization Sequence Completed

Par contre, si vous avez ça :

NOTE: FlushIpNetTable failed on interface [32] {49D8673E-7A0E-47C1-998A-A39895F2B682} (status=5) : Accès refusé.

cela signifie qu’OpenVPN GUI n’a pas été lancé en tant qu’administrateur.

Petits pings entre amis

A partir de Windows, vous devriez être capable de pinguer le serveur Proxmox :

C:\>ping 192.168.192.1

Envoi d'une requête 'Ping' 192.168.192.1 avec 32 octets de données :
Réponse de 192.168.192.1 : octets=32 temps=1 ms TTL=64
Réponse de 192.168.192.1 : octets=32 temps=1 ms TTL=64
Réponse de 192.168.192.1 : octets=32 temps=1 ms TTL=64
Réponse de 192.168.192.1 : octets=32 temps=1 ms TTL=64

Statistiques Ping pour 192.168.192.1:
 Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
 Minimum = 1ms, Maximum = 1ms, Moyenne = 1ms

L’inverse est aussi vrai : à partir du serveur Proxmox vous devez être capable de pinguer le poste Windows.

Note : si cela ne fonctionne pas, désactivez (temporairement) le firewall de Windows.

Étape 9/10 : configuration du client OpenVPN (serveurs secondaires)

Note : cette étape s’applique aussi bien aux serveurs secondaires qu’aux postes clients sous Linux.

Comme pour le serveur primaire, on commence par installer OpenVPN :

# apt-get install openvpn

On se rend dans le répertoire d’OpenVPN puis on récupère la config client par défaut et on en fait une sauvegarde :

# cd /etc/openvpn/

# cp -av /usr/share/doc/openvpn/examples/sample-config-files/client.conf .

# cp -av client.conf client.conf.original

client.conf

On édite le fichier « client.conf » qui, une fois tous les commentaires enlevés, doit ressembler à ça :

# cat client.conf | grep -v -e '^;' | grep -v -e '^#' | grep -v -e '^$'

client
dev tap0
proto udp
remote xxx.xxx.xxx.xxx yyyy
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert proxmox-client-1.crt
key proxmox-client-1.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 3
log-append openvpn.log
script-security 2
up "/etc/openvpn/up.sh"
down "/etc/openvpn/down.sh"
mssfix 1300
fragment 1300

Le seul paramètre à ajuster est :

  • remote : préciser l’adresse IP du serveur primaire (proxmox-server-1) ainsi que le port sur lequel se connecter
    Note : si votre serveur primaire est planqué derrière votre machinbox, n’oublier pas d’activer le port forwarding (ou le NAT) en conséquence.

Certificats et scripts

Étant donné que tous les serveurs secondaires vont se connecter directement sur le serveur primaire, on utilise toujours les mêmes clés : « proxmox-client-1-keys.tar.gz ».

Pour cela, vous devez retourner sur le serveur primaire et copier le fichier « proxmox-client-1-keys.tar.gz » vers chaque serveur secondaire (ainsi que les fichiers up.sh et down.sh) :

# scp -P 2222 /root/proxmox-client-1-keys.tar.gz xxx.xxx.xxx.xxx:/root/

# scp -P 2222 /etc/openvpn/up.sh /etc/openvpn/down.sh xxx.xxx.xxx.xxx:/etc/openvpn/

De retour sur le serveur secondaire (ou tertiaire), il ne reste plus qu’à décompresser les clés du serveur primaire :

# tar xvzf /root/proxmox-client-1-keys.tar.gz

Lancement du client OpenVPN

Hop, c’est parti :

# /etc/init.d/openvpn restart

Vérifiez le fichier de log « /etc/openvpn/openvpn.log », il devrait ressemble à ceci :

OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Oct 22 2010
NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
/usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Control Channel Authentication: using 'ta.key' as a OpenVPN static key file
Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
LZO compression initialized
Control Channel MTU parms [ L:1578 D:166 EF:66 EB:0 ET:0 EL:0 ]
Socket Buffers: R=[133120->131072] S=[133120->131072]
Data Channel MTU parms [ L:1578 D:1300 EF:46 EB:135 ET:32 EL:0 AF:3/1 ]
Fragmentation MTU parms [ L:1578 D:1300 EF:45 EB:135 ET:33 EL:0 AF:3/1 ]
Local Options hash (VER=V4): 'a257ef04'
Expected Remote Options hash (VER=V4): '8f3da10b'
NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
UDPv4 link local: [undef]
UDPv4 link remote: [AF_INET]xxx.xxx.xxx.xxx:yyyy
TLS: Initial packet from [AF_INET]xxx.xxx.xxx.xxx:yyyy, sid=1c88df43 a5baa0cd
VERIFY OK: depth=1, /C=FR/O=Mon organisation/CN=Mon organisation_CA/emailAddress=mon-email@mon-domaine.tld
VERIFY OK: nsCertType=SERVER
VERIFY OK: depth=0, /C=FR/O=Mon organisation/CN=proxmox-server-1/emailAddress=mon-email@mon-domaine.tld
Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
[proxmox-server-1] Peer Connection Initiated with [AF_INET]xxx.xxx.xxx.xxx:yyyy
SENT CONTROL [proxmox-server-1]: 'PUSH_REQUEST' (status=1)
PUSH: Received control message: 'PUSH_REPLY,route-gateway 192.168.192.1,ping 10,ping-restart 120,ifconfig 192.168.192.101
OPTIONS IMPORT: timers and/or timeouts modified
OPTIONS IMPORT: --ifconfig/up options modified
OPTIONS IMPORT: route-related options modified
TUN/TAP device tap0 opened
TUN/TAP TX queue length set to 100
/sbin/ifconfig tap0 192.168.192.101 netmask 255.255.255.0 mtu 1500 broadcast 192.168.192.255
/etc/openvpn/up.sh tap0 1500 1578 192.168.192.101 255.255.255.0 init
GID set to nogroup
UID set to nobody
Initialization Sequence Completed

Petit multicast entre amis (enfin !)

Et ben, c’est pas trop tôt..

Si vous lisez la page « Multicast Notes » (Wiki Proxmox 2), il est précisé ceci :

Multicast allows a single transmission to be delivered to multiple servers at the same time. This is the basis for cluster communications in Proxmox 2.0

Donc, maintenant que l’on s’est fait suer à configurer les serveurs Proxmox et OpenVPN, vérifions que le Multicast fonctionne :

# apt-get install ssmping

(Installez ce paquet sur tous les serveurs)

Puis, sur votre serveur maitre (proxmox-server-1), mettez vous en écoute :

# ssmpingd

et lancez la diffusion à partir de votre serveur secondaire (proxmox-server-2) :

# asmping 224.0.2.1 192.168.192.1

Si tout se passe comme prévu, vous devriez voir ceci  :

asmping joined (S,G) = (*,224.0.2.234)
pinging 192.168.192.1 from 192.168.192.2
 unicast from 192.168.192.1, seq=1 dist=0 time=38.699 ms
multicast from 192.168.192.1, seq=1 dist=0 time=76.405 ms
 unicast from 192.168.192.1, seq=2 dist=0 time=38.802 ms
multicast from 192.168.192.1, seq=2 dist=0 time=76.238 ms
 unicast from 192.168.192.1, seq=3 dist=0 time=38.859 ms
multicast from 192.168.192.1, seq=3 dist=0 time=75.852 ms
 unicast from 192.168.192.1, seq=4 dist=0 time=39.376 ms
multicast from 192.168.192.1, seq=4 dist=0 time=76.621 ms
 unicast from 192.168.192.1, seq=5 dist=0 time=38.670 ms
multicast from 192.168.192.1, seq=5 dist=0 time=77.186 ms

Si ne voyez que des paquets Unicast vous êtes maudit…

Sinon, félicitations : vous êtes prêts à monter votre cluster sous Proxmox !

Étape 10/10 : happy cluster to you, happy cluster to yoooouuuu…

Warning : avant de lancer la procédure, assurez-vous que tout fonctionne correctement (SSH, tunnel, multicast)

La doc Anglaise pour configurer un cluster sous Proxmox 2 est  ici : Proxmox VE 2.0 Cluster

Mais bon, autant terminer l’aventure en français.

Sur le serveur primaire (192.168.192.1)

La commande pour créer un cluster est la suivante :

# pvecm create nom-du-cluster

Achtung ! Choisissez avec attention le nom de votre cluster car vous ne pourrez plus le modifier par la suite.

# pvecm create mon-cluster

Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@proxmox-server-1
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|      . So o     |
|     . ...O o    |
|    ... o* =     |
|    +oo.=..      |
|   . +E*oo.      |
+-----------------+
Restarting pve cluster filesystem: pve-cluster[dcdb] crit: unable to read cluster config file '/etc/cluster/cluster.conf' - Failed to open file '/etc/cluster/cluster.conf': No such file or directory
[dcdb] notice: wrote new cluster config '/etc/cluster/cluster.conf'
[dcdb] crit: cman_tool version failed with exit code 1#010
.
Starting cluster:
   Checking if cluster has been disabled at boot... [  OK  ]
   Checking Network Manager... [  OK  ]
   Global setup... [  OK  ]
   Loading kernel modules... [  OK  ]
   Mounting configfs... [  OK  ]
   Starting cman... [  OK  ]
   Waiting for quorum... [  OK  ]
   Starting fenced... [  OK  ]
   Starting dlm_controld... [  OK  ]
   Unfencing self... [  OK  ]

Sur chaque serveur secondaire (192.168.192.2, 192.168.192.3, etc)

Maintenant que le cluster est défini, il faut ajouter un par un les noeuds au cluster.

Pour cela, on utilise la commande suivante à partir du noeud à ajouter :

# pvecm add ip.du.serveur.primaire

Inspirez un grand coup, croisez les doigts et lancez-vous :

# pvecm add 192.168.192.1

Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@proxmox-server-2
The key's randomart image is:
+--[ RSA 2048]----+
|..o.o            |
|.o+= E           |
|.oo.*            |
| ..*   o         |
|  = o + S        |
|   * o +         |
|  . .            |
|   .             |
|                 |
+-----------------+
The authenticity of host '192.168.192.1 (192.168.192.1)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.192.1's password:
copy corosync auth key
stopping pve-cluster service
Stopping pve cluster filesystem: pve-cluster.
backup old database
Starting pve cluster filesystem : pve-cluster.
Starting cluster:
   Checking if cluster has been disabled at boot... [  OK  ]
   Checking Network Manager... [  OK  ]
   Global setup... [  OK  ]
   Loading kernel modules... [  OK  ]
   Mounting configfs... [  OK  ]
   Starting cman... [  OK  ]
   Waiting for quorum... [  OK  ]
   Starting fenced... [  OK  ]
   Starting dlm_controld... [  OK  ]
   Unfencing self... [  OK  ]
generating node certificates
unable to create directory '/etc/pve/priv' - File exists

Afficher l’état du cluster

Vous pouvez utiliser cette commande sur n’importe quel noeud du cluster :

# pvecm status

Version: 6.2.0
Config Version: 2
Cluster Name: mon-cluster
Cluster Id: 19124
Cluster Member: Yes
Cluster Generation: 8
Membership state: Cluster-Member
Nodes: 2
Expected votes: 2
Total votes: 2
Node votes: 1
Quorum: 2
Active subsystems: 5
Flags:
Ports Bound: 0
Node name: proxmox-server-1
Node ID: 1
Multicast addresses: 239.192.74.254
Node addresses: 192.168.192.1

Se connecter sur l’interface web de Proxmox

Lancez le client VPN, ouvrez votre navigateur favori et « hardi petit ! » :

https://192.168.192.1:8006/

Ayé, maintenant vous pouvez jouer avec le clicodrome ! 🙂

A+

PS : N’oubliez pas de configurer, si nécessaire, iptables en fonction de vos besoins.

Il y a 77 commentaires de malades mentaux, le blog ne va pas tenir la charge

Oui Jean-Pierre, je souhaite publier un commentaire assassin sur ce blog minable

(Votre adresse email ne sera jamais publiée, divulguée, revendue, broyée, atomisée, etc.)