Menu Fermer

Proxmox, VXLAN et Wireguard

Dans cet article je vais aborder la configuration réalisée sur deux de mes hyperviseurs cloud Proxmox.
Les objectifs de cette configuration sont les suivants :

  • Avoir la même adresse IP publique, que ce soit pour sortir, ou publier des ressources.
  • N’avoir qu’un seul firewall a gérer, l’IP publique ne pouvant être que sur un seul hyperviseur en simultané.
  • Avoir les mêmes VLANs sur les deux hyperviseurs et permettre aux VMs de communiquer ensembles

La solution que j’ai donc retenue est la mise en place d’un tunnel Wireguard entre mes deux hôtes, puis la création via SDN de Proxmox d’un réseau VXLAN qui sera déployé sur mes deux hôtes.

Ci dessous les adresses IPs qui seronts utilisées pour l’exemple

1.2.3.4L’adresse IP Publique de PVE01
1.2.3.5L’adresse IP Publique de PVE02
10.10.10.1L’adresse IP du wg0 de PVE01
10.10.10.2L’adresse IP du wg0 de PVE02
192.168.1.5L’adresse IP de la VM01
192.168.1.6L’adresse IP de la VM02
192.168.1.1L’adresse IP privée du firewall
1.2.3.6L’adresse IP publique du firewall

Préparation des hôtes Proxmox

Les hôtes proxmox étant exposé sur internet le firewall est actif. De ce fait il faudra rajouter les règles suivantes au niveau des hôtes ou du cluster. Dans mon cas j’ai créé les règles au niveau du cluster.

Avec cette règle j’autorise mes hôtes a se parler sur le port 51820.
La source +pve-hosts est un IPSet contenant les IPs de mes deux hôtes (1.2.3.4 et 1.2.3.5)

Avec cette règle j’autorise les interfaces Wireguard a recevoir le traffic pour le VXLAN
La source +wireguard est un IPSet contenant les IPs de mes deux wg0 (10.10.10.1 et 10.10.10.2)

Vérifiez que dans le fichier /etc/network/interface la ligne ‘source /etc/network/interfaces.d/sdn’ afin que la configuration SDN soit chargée par la suite.

La configuration du tunnel Wireguard

Afin de pouvoir faire transiter le VXLAN de manière sécurisée n’ayant pas de réseau privé a disposition je vais commencer par monter un tunnel Wireguard entre les deux hôtes.
Pour ce faire on commence par installer le nécéssaire.

apt install wireguard wireguard-tools

On va ensuite généré sur chaque hôte une paire clé privée/clé publique

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
chmod 600 /etc/wireguard/privatekey

Et nous allons maintenant configurer les interfaces du tunnel en créant un fichier wg0.conf dans /etc/wireguard

# PVE01
[Interface]
PrivateKey = pve01privatekey
Address = 10.10.10.1/24
MTU = 1420
ListenPort = 51820

[Peer]
PublicKey = pve02publickey
AllowedIPs = 10.10.10.2/32
Endpoint = 1.2.3.5:51820
PersistentKeepalive = 25
# PVE02
[Interface]
PrivateKey = pve02privatekey
Address = 10.10.10.2/24
MTU = 1420
ListenPort = 51820

[Peer]
PublicKey = pve01publickey
AllowedIPs = 10.10.10.1/32
Endpoint = 1.2.3.4:51820
PersistentKeepalive = 25

Et maintenant on active le tunnel et on le monte

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

On peux alors vérifier que le tunnel fonctionne bien en réalisant un ping de l’autre IP wg0 et avec la commande wg show

root@pve11:~# ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.205 ms
64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=0.194 ms
64 bytes from 10.10.10.2: icmp_seq=3 ttl=64 time=0.171 ms
^C
--- 10.10.10.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2046ms
rtt min/avg/max/mdev = 0.171/0.190/0.205/0.014 ms
root@pve11:~# wg show
interface: wg0
  public key: pve01publickey
  private key: (hidden)
  listening port: 51820

peer: pve02publickey
  endpoint: 1.2.3.4:51820
  allowed ips: 10.10.10.2/32
  latest handshake: 1 minute, 36 seconds ago
  transfer: 3.16 kiB received, 4.11 kiB sent
  persistent keepalive: every 25 seconds

La configuration du VXLAN par SDN

Pour le déploiement du VXLAN je vais passer le SDN au niveau du cluster.

Dans le cluster, se rendre dans SDN => Zones puis Add => VXLAN

On se rend ensuite dans SDN => Vnets puis Create

Dans mon cas j’ai activé le tag VLAN Aware car j’ai besoin d’adresser mes VMs sur différents VLANs.

Une fois configuré il faut désormais retourner dans la racine de SDN puis cliquer sur Apply.
La configurations sera déployée sur les deux hôtes.

La configuration sur les VMs

Il ne reste plus qu’a attacher les interfaces des VMs sur le VNet nouvellement créé.
Attention toutefois aux points suivants :

  • Ce n’est pas toujours le cas selon le type de flux mais j’ai été obligé de fixer le MTU à 1300 sur chaque interface de chaque VM connectée au vtnet10
  • La configuration du vtnet en mode VLAN Aware utilisant du Linux Bridge cela rend actuellement impossible les trunk VLAN sur le réseau VXLAN. Si une VM soit accéder a plusieurs VLANs alors il faut créer une interface par VLAN requis.
  • La modification du point d’attache réseau et du MTU requiert souvent un redémarrage de la VM. Donc a éviter sur un réseau en production.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.