Mise en place d’un cluster Proxmox s’étalant sur différents réseaux (1/3)

By | June 23, 2020

Bonjour à tous,

Aujourd’hui, nous verrons comment créer un cluster Proxmox avec trois machines situées sur des réseaux différents.

L’une des nouveautés avec la version 6 de Proxmox (l’actuelle) c’est le support de l’unicast.
Ce qui nous épargne la gestion du multicast qui pouvait être un casse-tête dans les versions précédentes du gestionnaire d’environnement virtuel notamment pour le genre de configuration que nous essayerons de mettre en place. De plus cette version 6 simplifie beaucoup de choses et presque tout peut se faire via l’interface graphique.

Notre travail s’effectuera donc en trois phases, qui représenteront aussi trois articles.

La première concerne la création d’un réseau virtuel à travers lequel les noeuds de notre cluster communiqueront de façon sécurisée.
A la seconde, nous passerons à la création du cluster. Enfin, la dernière phase portera sur la configuration d’une haute disponibilité sur le cluster.

Dans cet article donc, nous allons mettre en place le VPN à travers lequel nous ferons fonctionner notre cluster. Comme VPN, nous choisirons Tinc. La spécificité avec Tinc, c’est qu’il permet une configuration full mesh en d’autres termes une configuration dans laquelle chaque site communiquera directement avec les autres sites du réseau VPN.

Ci-dessous l’architecture que nous tenterons de mettre en place:

De cette image, vous comprenez que notre cluster n’existera que dans le réseau virtuel que nous allons créer.

Pour notre travail, nous utiliserons des systèmes Debian Buster dotés chacun de deux disques. L’installation de Proxmox et Tinc se feront sur le premier, tandis que le second sera utilisé pour la configuration de la haute disponibilité avec ceph.

I-Installation et configuration de Tinc

1-Installation

Procédons à la mise à jour de chacun des systèmes, puis à l’installation de Tinc.

# apt update ; apt upgrade -y ; apt install tinc -y


2-Configuration des interfaces virtuelles

Sur chaque machine, il nous faudra créer les dossiers de Tinc.

# mkdir -vp /etc/tinc/vpn0/hosts/

A l’aide de nano, créeons le fichier de configuration Tinc (/etc/tinc/vpn0/tinc.conf) sur le premier serveur que nous nommerons stormy, puis insérons les informations suivantes:

Name = stormy
Device = /dev/net/tun
AddressFamily = ipv4
Mode = switch

Sur le second que nous nommerons snowy, les configurations ci-dessous:

Name = snowy
Device = /dev/net/tun
AddressFamily = ipv4
Mode = switch
ConnectTo = stormy

Et le troisième, rainy, les configurations suivantes:

Name = rainy
Device = /dev/net/tun
AddressFamily = ipv4
Mode = switch
ConnectTo = stormy
ConnectTo = snowy

A travers ConnectTo dans les fichiers de snowy et rainy, nous demandons ainsi à ces machines d’initier la connexion vers les machines spécifiées dans la directive.

NB: Le mode switch est l’une des clés pour la réussite de notre projet. Nous y reviendrons plutard. 🙂

Dans le dossier hosts, créeons les fichiers host de chaque serveur.

Dans chaque fichier il faudra insérer l’ adresse IP publique associée au serveur, le port utilisé par Tinc et l’option Compression qui représente le niveau de compression utilisé pour les packets UDP.

La prochaine étape consiste à créer une paire de clé privée/publique pour chaque serveur.

Cela peut se faire grâce à la commande suivante.

# tincd -n vpn0 -K 4096

vpn0 représente le nom que nous donnerons à l’interface virtuelle que nous allons créer.

Après avoir validé les emplacements par défaut pour ces clés, nous notons que les clés publiques sont bien ajoutées aux fichiers host que nous venons de créer et les clés privées sont bien situées dans les dossiers /etc/tinc/vpn0 de chaque serveur.

3-Echange des fichiers hosts

Nous devons à présent échanger les fichiers hosts entre les machines. Ce qui est réalisable au moyen des utilités de tranfert de fichier comme scp, sftp ou bien par la copie manuelle du contenu des fichiers.

Après l’échange des fichiers, assurons-nous que chaque serveur possède les fichiers hosts des 2 autres.

4-Création du bridge

Sur chaque machine, nous créerons 2 bridges via le fichier /etc/network/interfaces. Le premier, vmbr0, représente celui par lesquelles les VMs de nos noeuds Proxmox communiqueront vers l’extérieur, et le second vmbr1, sera l’interface par laquelle les noeuds communiqueront dans le réseau virtuel que nous créeons.

auto vmbr0
iface vmbr0 inet static
address 192.168.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o ens2 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o ens2 -j MASQUERADE
post-up iptables -t nat -A PREROUTING -i ens2 -p tcp --dport 2222 -j DNAT --to 192.168.1.2:22
post-down iptables -t nat -D PREROUTING -i ens2 -p tcp --dport 2222 -j DNAT --to 192.168.1.2:22

auto vmbr1
iface vmbr1 inet static
    address $Adresse-du-serveur
    bridge_ports dummy0
    bridge_stp off
    bridge_fd 0

NB: Dans la variable $Addresse-du-serveur, il faudra fournir l’adresse que nous choisissons de donner au serveur dans le VPN.

Configurons sur vmbr0, une redirection sur l’adresse 192.168.1.2, qui représentera l’adresse de notre machine de test.

NB: Si vous n’arrivez pas à créer de bridge de cette façon, servez de l’utilité brctl (package bridge-utils) pour créer dans un premier temps les bridges avant de les configurer dans l’interface /etc/network/interfaces.

5-Création des fichiers de contrôle de nos interfaces VPN

Sur chaque machine, il nous faudra donc créer un fichier tinc-up pour l’activation de notre interface virtuelle et un autre fichier tinc-down pour sa désactivation dans le dossier /etc/tinc/vpn.

NB: Comme spécifié plus haut, brctl est une utilité qui permet la gestion de bridges Linux. Nous l’utiliserons ici pour joindre notre interface virtuelle vpn0 au bridge vmbr1. brctl ne fonctionne pas avec les tunnels tun, mais qu’avec les interfaces tap et telle est la raison pour laquelle nous avons configuré Tinc plus haut avec le mode switch pour forcer l’utilisation de l’interface tap.

 

Le fichier tinc-up:

#!/bin/sh
ip link set $INTERFACE up
/sbin/brctl addif vmbr1 vpn0

Le fichier tinc-down:

#!/bin/sh
/sbin/brctl delif vmbr1 vpn0
ip link set $INTERFACE down

Rendons ces scripts exécutables :

# chmod -v +x /etc/tinc/vpn0/tinc-{up,down}

6-Configuration du service Tinc

Nous allons configurer sur chaque serveur dans le dossier /etc/systemd/system une nouvelle unité de service Tinc dont les dossiers principaux pointeront vers nos dossiers de notre VPN. Il faudra créer donc un fichier /etc/systemd/system/tinc.service et insérer les informations ci-dessous:

[Unit]
Description=Tinc net vpn0
After=network.target

[Service]
Type=simple
WorkingDirectory=/etc/tinc/vpn0
ExecStart=/usr/sbin/tincd -n vpn0 -D -d3
ExecReload=/usr/sbin/tincd -n vpn0 -kHUP
TimeoutStopSec=5
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

 

NB: Assurez-vous que l’exécutable de Tinc se trouve bien dans les chemins en gras.
Redémarrons les machines, puis procédons aux tests.

II-Tests

A l’aide de la commande suivante exécutée sur chaque serveur, nous avons la certitude que tout fonctionne comme prévu:

# tincd -n vpn0 -D -d3

NB: Avant d’entamer les tests, assurez-vous au préalable que les services Tinc ne sont pas en cours d’exécution sur chaque plateforme (service tinc stop).

Le réseau semble effectif…

…Et les pings répondent.

Nous venons ainsi de finir la première étape de notre travail. Nos machines communiquent bien à travers notre tunnel VPN, passons à présent à la création de notre cluster Proxmox.

Stay tuned !

🙂

mdestroy

2 thoughts on “Mise en place d’un cluster Proxmox s’étalant sur différents réseaux (1/3)

  1. mat

    bonjour,
    tout d’abord,bravo pour tutoriel qui est très intéressant mais j’ai un petit probleme lorsque j’active tinc il me dit : bridge vmbr1 does not exist! pourriez vous m’éclairer de votre idée sur la question.

    Reply
  2. Sulfuross

    Bonjour, je débute dans le domaine et je me demandais si au début ce guide vos serveurs était sur le même réseaux ou déjà sur des réseau distinct ?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *