Installation de Proxmox 8 avec IPv6 sur OVH

Mise en contexte

Chez ITMG-Consulting, nous hébergeons nos propres services et les applicatifs de nos clients sur des instances que nous gérons en interne.
Nous avions l’habitude d’utiliser l’offre public cloud d’OVH, mais avec le nombre de services que nous continuons à déployer, cela commence à générer un coût conséquent.
De plus, certaines instances, étant peu utilisées (CRM, gitlab interne, VPN, …), nous gaspillions des ressources inutilement.
Nous avons donc décidé de passer sur des environnements virtualisés, afin d’optimiser nos coûts et nos ressources.

Choix du serveur

Côté matériel, nous avons besoin d’au minimum 32 Go de mémoire RAM.
En effet, la mémoire est un élément crucial en virtualisation.
Nous partons sur plusieurs serveurs à 32 Go afin de répartir un peu la charge et le risque (incendie, coupure, …) sur plusieurs serveurs.

Pour le CPU, nous partons sur des usages assez classiques (3.5 et 3.8 Ghz), un CPU avec 4 cœurs / 8 threads sera suffisant.

Pour le disque dur, ayant en tête que nous allons utiliser ZFS en système de fichier, il nous faut un disque dur SSD (obligatoire pour éviter les délais en lecture / écriture).
Nous privilégierons un SSD en NVME, car plus rapide qu’un SATA.
Bien évidement, nous choisirons 2 disques durs, afin de pouvoir faire du mirroring, et éviter la perte de données en cas de problème avec l’un des disques.

Pour la gamme de serveur, nous avons sélectionné les SoYouStart, qui bénéficient d’un bloc IPv6 en /64.

À noter
Nous ne choisissons pas la gamme Kimsufi, car elle ne dispose que d’une IPv6 en /128 (1 ip utilisable), et qu’il n’y a pas la possibilité d’avoir un bloc supplémentaire.
Nous envisageons cependant cette dernière pour le backup, car dans ce cas, il n’y a pas besoin de plusieurs IPv6.

Système de fichiers

Nous pouvons utiliser différents types de système de fichiers : ext4, zfs, xfs, btrfs (en test uniquement).
Nous choisissons ZFS, car il intègre nativement le mirroring (RAID1), le self-healing (se répare automatiquement) permets les snapshots des VMs, et il est plus performant sur du bon matériel.
En revanche, il consomme beaucoup de RAM : par défaut 50% de votre RAM sera dédiée au cache ARC de ZFS (nous verrons plus loin comment réduire ce cache).

À noter
ZFS n’est pas compatible avec un RAID matériel (Hardware), les performances seront dégradées.

Gabarit OVH vs installation manuelle

Compte tenu du choix du système de fichiers, nous allons choisir une installation manuelle.
En effet, le gabarit ovh est basé sur ext4, et nous devons activer un raid software sur la seule partition data que nous devons créer.
Ce raid software ne sera pas géré par zfs mais par md, ce qui réduira les performances.

Installation de Proxmox

Nous allons récupérer l’iso de proxmox sur le site officiel.
Ensuite nous allons nous connecter en KVM à distance (IPMI) notre serveur.
Pour cela, rendez-vous dans la configuration de votre serveur et récupérer le fichier JNLP, cela peut prendre quelques instant.

Récupération du fichier de connexion KVM sur la console OVH

Lançons maintenant le fichier JNLP (java est nécessaire pour lancer l’applet), vous devriez obtenir la console actuelle du serveur :
Cliquez ensuite sur Device puis Redirect Iso et sélectionnez l’iso que vous avez téléchargé précédemment.
Redémarrez ensuite le serveur en envoyant la macro Ctrl Alt Del en haut à gauche de la console.
Au redémarrage veillez bien à lancer le CDROM (UEFI Virtual CDROM dans notre cas), pour cela appuyez sur la touche de selection de boot correspondante (“Press F6 to enter boot menu” pour notre part).
Si tout s’est bien passé, vous devriez voir à l’écran, l’installateur de proxmox :

Lançons maintenant l’installation en mode graphique.

À noter
En fonction de la vitesse de votre connexion, la suite des opérations d’installation peut prendre plus ou moins de temps, le CDROM étant sur votre ordinateur et l’installation s’effectuant sur le serveur à distance.

Après avoir accepté les conditions de licence, nous configurons le système de fichiers :

Cliquez sur Options et sélectionnez ZFS (RAID 1), les deux disques devraient se sélectionner automatiquement.
De cette façon, le système d’exploitation (Debian), proxmox et les données des VMs (Images, Disques, …) seront en mirroring (ZFS et non MD) et si un fichier corrompu est détecté sur l’un des disques, ZFS le réparera automatiquement.
Renseignons ensuite le pays, la timezone et la disposition du clavier.
Attention, sur ma version de JViewer, il semble que l’émulation de clavier soit en Qwerty et que je ne puisse pas le changer : il faut bien laisser votre Keyboard layout dans l’installation proxmox à : French.
Si besoin, activez le Soft Keyboard, dans le menu Keyboard pour les prochaines étapes. Vous pourrez, au redémarrage utiliser votre clavier normalement via SSH.

Sur l’écran suivant, nous indiquons le mot de passe de l’utilisateur root ainsi que notre adresse email.
Enfin, sur la dernière étape, nous saisissons les informations réseaux, hormis le Hostname (FQDN) que vous devez personnaliser, les autres informations ont dû être complétées automatiquement par le DHCP.

Un résumé de l’installation vous est affiché, pour confirmation:

L’installation commence.
Une fois terminée, pensez à enlever le l’iso virtuel du serveur via Device puis Redirect Iso.
Après un redémarrage, l’accès ssh devrait être fonctionnel et l’interface proxmox disponible sur https://VOTRE-IP:8006/

Cache ARC

Par défaut, le cache ARC (Adaptive Replacement Cache) permettant à ZFS d’optimiser ses performances sera au maximum de 50% de votre capacité de mémoire.
Pour limiter cette utilisation, et sans impacter les performances, il est d’usage de définir une valeur maximal en prenant pour calcul :

2 Go pour le système + 1 Go par To de disque disponible.

Dans notre cas, nous avons 2 To de disque (2 To utilisables, mais 4 To de capacité réelle étant en RAID1) soit un cache ARC maximum de 4 Go.
Nous convertissons cette valeur en octets :

\[ 4 * 1024 * 1024 *1024 = 4294967296 \]
Pour définir cette limite, connectez-vous en SSH, puis lancez ces commandes :

1
2
3
touch /etc/modprobe.d/zfs.conf
echo "options zfs zfs_arc_max=4294967296" >> /etc/modprobe.d/zfs.conf
update-initramfs -u -k all

Pour prendre en compte la modification, redémarrez votre serveur.

1
reboot

Sécurisation de SSH

Nous allons désactiver l’identification SSH par couple login/mot de passe et n’autoriser qu’une connexion via Clé SSH.
Pour cela, nous allons ajouter notre clé ssh dans le fichier des clés autorisées :

1
echo "Votre clé public SSH" > /root/.ssh/authorized_keys

Ajustons la configuration SSH en conséquence :

1
2
3
4
5
nano /etc/ssh/sshd_config
Port 22XX #Changer par un port disponible de votre choix
PasswordAuthentication no
PubkeyAuthentication yes
UsePAM no

Désactivation de la licence entreprise (si vous ne l’avez pas)

/etc/apt/sources.list.d/pve-enterprise.list

commenter la ligne

/etc/apt/sources.list.d/ceph.list

commenter la ligne

/etc/apt/sources.list.d/proxmox-pve.list (nouveau fichier)

Ajouter la ligne :
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

Configuration IPv6

Comme vous le savez, je suis un grand fan et certifié IPv6, nous souhaitons donc utiliser pleinement le bloc d’IPv6 alloué par OVH à notre serveur.

Configuration de l’hôte

Commençons par le plus simple, l’hôte proxmox.
Pour cela, rendons-nous dans l’interface web de proxmox, cliquons sur notre nœud, puis dans System > Network et modifions l’interface vmbr0

Il suffit de reporter l’adresse de notre bloc, et sa gateway, que nous trouvons sur OVH.
De notre côté nous attribuons l’IPv6 finissant par : ffff à notre hôte : 2001:xxxx:xxxx:xxxx::ffff/64.
Nous cliquons ensuite sur Apply Configuration
Félicitations ! Votre hôte proxmox est accessible en IPv6.

Utilisation du bloc IPv6

Dans un précédent article sur Medium j’indiquai que l’on pouvait utiliser un proxy NPD6, pour pouvoir fournir l’IPv6 à nos VMs.
Je ne sais pas pourquoi OVH a mis en place cette limitation (si un tech d’OVH passe par ici, il peut me contacter), en effet, au vu de la pénurie des IPv4, je trouve dommage que l’on soit obliger d’attribuer une IPv4 pour pouvoir router l’IPv6.
Mon intuition : OVH filtre, comme pour les IPv4, le trafic à destination du serveur qui n’a pas la même adresse MAC que celle du serveur (ou une MAC virtuelle).
Cependant, si vous attribuez une IPv4 failover, votre VM pourra profiter d’une IPv6 de votre bloc.

Sur proxmox nous créons 2 VMs : 1 VMs qui aura une IPv4 fixe et une VM qui sera en IPv6-only.
Pour l’exemple, nous allons déjà configurer nos IPv6 sur les deux machines, nous utilisons l’ID de la VM en fin d’IPv6 :

Configuration IPv6 de la première VM

Configuration IPv6 de la seconde VM

Comme pour notre hôte proxmox, nous prenons la même gateway indiqué sur l’espace client OVH.
Vous pouvez lancer vos machines et essayer de les ping.
Nous arrivons à ping la VM depuis l’hôte proxmox, comme attendu (le bloc IPv6 étant déclaré dans l’hôte proxmox), mais depuis notre machine, le ping échoue:

Ping de la VM 107 depuis le SSH de l'hôte Proxmox

Ping de la VM 107 depuis une machine locale

Nous allons donc nous rendre dans notre espace client OVH, et commander une IPv4 additionnelle et nous l’associons à notre serveur.
De notre côté, nous avons commandé un bloc IPv4 en /30 (4 IPv4 utilisables).
Après quelques minutes, notre IP (ou notre bloc IPv4) est routée vers notre serveur.
Nous créons une adresse MAC virtuelle à l’adresse IP, choisir le type ovh et lui donner un nom.

On récupère ensuite l’adresse MAC virtuelle :

On défini ensuite la MAC sur la machine virtuelle :
Puis on indique la nouvelle adresse IPv4 et la gateway (même gateway que celle indiqué pour l’hôte proxmox):
Dans notre cas, nous régénérons l’image (Regenerate Image), et nous redémarrons la VM pour prise en compte des modifications.

La VM 107 (IPv4 et IPv6) est désormais accessible sur internet, mais pas la VM 108 (IPv6) car elle n’a pas d’IPv4 associée.

IPv6-Only 🚀

Nous avons vu précédemment, comment affecter et autoriser le routage d’une IPv6 vers une VM si celle ci se voit également attribuer une IPv4.

Cette solution ne nous plaît pas : nous souhaitons avoir des VM en IPv6 only, car uniquement accessible:

  • soit par moi-même,
  • soit via un VPN personnel supportant l’IPv6.

Nous allons donc configurer un proxy NPD6 (Neighbor Proxy Daemon) permettant de router l’ensemble des ips du bloc IPv6 attribué.

Pour expliquer rapidement: l’ensemble du bloc va être annoncé par notre serveur sur l’interface principale vmbr0 (et donc être accepté par le filtre d’OVH). Nous créerons ensuite une interface vmbr1 qui fera office de passerelle entre nos VMs et notre hôte proxmox.

Avant toute chose, modifions la configuration IP de notre hôte proxmox et changeons son masque de réseau par 128.
De cette façon l’interface principale vmbr0 n’écoutera que l’ip 2001:xxxx:xxxx:xxxx::ffff et non pas l’ensemble de notre bloc.

Nous créons ensuite une interface qui va accueillir notre nouveau réseau de type Linux Bridge, vmbr1 :

Configuration du réseau vmbr1

Passerelle
Pour rappel, ce réseau ne dispose que d’une adresse IP qui sera la passerelle IPv6 de nos VMs.
Le proxy npd6 sera chargé de faire la passerelle entre l’hôte et nos VMs.

Nous validons les modifications par un Apply Configuration.

il faut configurer votre hôte proxmox pour autoriser le forwarding IPv6.
Pour cela, modifions le fichier /etc/sysctl.conf et ajoutons les lignes:

1
2
3
4
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
vm.swappiness = 10
Forwarding IPv4
Dans l’exemple nous autorisons aussi le forwarding IPv4, car nous ajoutons une interface proxmox pour un réseau privé interne (10.0.0.0/16) en mode NAT

une fois la modification effectuée vous pouvez lancer la commande suivante qui rechargera la configuration :

1
sysctl -p

Installons ensuite le paquet npd6:

1
apt-get install npd6

modifions la configuration dans /etc/npd6.conf:

1
2
3
4
prefix = 2001:2bcd:123:efg:
interface = vmbr0
ralogging = off
listlogging = off

Bien évidement, remplacez 2001:2bcd:123:efg: par votre propre préfixe.

Enfin, redémarrons le service:

1
service npd6 restart

La configuration du système est terminée, modifions notre VM 108 et attribuons lui une IPv6 sur ce nouveau réseau vmbr1.
Sur Proxmox, dans la section Hardware de la VM, définissons l’interface hôte attachée vmbr1 à notre interface virtuelle net0 :

Rattachement de l'interface net0 sur l'interface hôte vmbr1

Enfin, définissons la configuration IPv6 de cette VM :

Configuration IPv6 de notre VM 108

Notez bien que nous utilisons notre hôte proxmox (IP de vmbr1) en tant que passerelle et non pas la passerelle fournie par OVH.

Une fois démarrée, la VM répond bien au ping, et la connexion SSH à cette VM est possible :

Ping de notre VM IPv6 Only depuis une machine locale

SSH vers la VM 108 en IPv6 Only depuis une machine locale

Conclusion

Nous avons vu comment installer Proxmox 8 et configurer un proxy npd6 afin d’utiliser pleinement notre bloc IPv6.
N’hésitez pas à me rejoindre sur Discord et me faire un retour sur cet article sur le post linkedin associé.

0%