Configurer Proxmox VE 7.3 en IPv6 chez OVH

Mathieu GILLOOTS
5 min readNov 28, 2022

Update 2023 : Pour la nouvelle version de Proxmox 8, rendez vous directement sur mon nouvel article

Chez ITMG-Consulting nous avons récemment basculer une partie de nos services sur Proxmox pour virtualiser notre infrastructure.

Nous souhaitons utiliser au maximum le bloc IPv6 qui est attribué à notre serveur dédié par OVH, pour nos applications internes, à minima, afin de limité la location d’adresse en IPv4.

La problématique du SwitchPort security

Pour éviter que n’importe qui n’utilise n’importe quelle adresse IP, OVH à mis en place le Switchport Security.
Concrètement, une seule adresse MAC (identifiant de la carte réseau) n’a le droit de déclarer telle ou telle adresse IP.

Pour les IPv4, pas de problème, vous pouvez générer des adresse MAC virtuelles depuis l’interface OVH et les associer à une adresse IPv4 supplémentaire.

Pour les IPv6 en revanche, la fonctionnalité n’existe pas sur l’interface OVH. Seul le serveur dédié peux déclarer l’ensemble du range IPv6.

Nous alors devoir mettre en place un proxy afin que notre serveur puisse écouter toutes les adresses du range IPv6, et les envoyer sur les machines virtuelles correspondantes.

Notre serveur dédié sera donc la passerelle de nos VMs.

Configuration de l’IPv6

Nous avons installer notre serveur avec l’IPv4 fournie par OVH.
Nous allons ajouter l’IPv6, ainsi notre serveur sera accessible sur les 2 protocole. (si par exemple, pour une raison ou une autre, nous avons besoin d’administrer notre proxmox, depuis une connexion ne disposant pas d’IPv6).

J’ai choisi l’IPv6 de mon bloc 2001:41d0:xxxx:xxxx::ffff/128
Le netmask 128 à son importance pour la suite.
Pour la passerelle IPv6, je récupère celle indiqué dans le Manager OVH.

Nous validons et appliquons les modifications :

Dès lors, notre interface proxmox est disponible :

  • En Ipv4,
  • En Ipv6,
  • via un nom de domaine, nous configurons l’enregistrement AAAA (IPv6) et A (pour l’IPv4)

Configuration de la passerelle IPv6

Nous allons maintenant déclarer une nouvelle interface de type “Linux Bridge” sur Proxmox.
Elle aura pour nom : vmbr1.
Pour la passerelle j’ai choisi la première IPv6 de ma range : 2001:41d0:xxxx:xxxx::1/64

Nous ne mettons pas de passerelle, un outil va s’en occuper pour nous :

Nous appliquons les changements.

et nous testons via SSH, un ping sur des sites en IPv6, par exemple : ipv6.google.com

Configuration du Forwarding et de NPD6

Nous allons maintenant éditer le fichier /etc/sysctl.conf afin d’autoriser l’ip forwarding et le NDP.

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
vm.swappiness = 10

Activons les changements avec sysctl -p et rebootons la machine.

Nous allons maintenant télécharger un packet qui va s’occuper de gérer le protocole NDP pour nous.
Ce packet va écouter l’ensemble de notre range, et transférer ces requêtes vers nos VMs.

# Je choisis volontairement la version 1.1.0-3, la dernière version n'est pas compatible avec la version debian livrée avec Proxmox 7.3.1
$ wget http://ftp.fr.debian.org/debian/pool/main/n/npd6/npd6_1.1.0-3%2Bb1_amd64.deb
$ dpkg -i npd6_1.1.0-3+b1_amd64.deb

Configurons maintenant le packet dans /etc/npd6.conf :

prefix = 2001:41d0:xxxx:xxxx:
interface = vmbr0
ralogging = off
listlogging = off

On redémarre le service :

$ service npd6 restart

Désormais notre IPv6 de notre seconde interface répond au ping !

$ ping 2001:41d0:xxxx:xxxx::1       
PING 2001:41d0:xxxx:xxxx::1(2001:41d0:xxxx:xxxx::1) 56 data bytes
64 bytes from 2001:41d0:xxxx:xxxx::1: icmp_seq=1 ttl=52 time=6.18 ms
64 bytes from 2001:41d0:xxxx:xxxx::1: icmp_seq=2 ttl=52 time=9.19 ms
64 bytes from 2001:41d0:xxxx:xxxx::1: icmp_seq=3 ttl=52 time=6.07 ms

Nottons également que l’interface de Proxmox et l’accès SSH répond sur cette IP car elle correpond à notre seconde interface.

Création d’une Cloud Image pour Ubuntu Jammy (VM)

Afin de configurer plus simplement nos instances, nous créons un template Cloud Image de Ubuntu Jammy (22.04 LTS).

# Récupération de l'image
$ wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
# Création d'une VM temporaire que nous convertirons en template par la suite
# Dans cette image, on associe l'interface réseau sur vmbr1 pour pouvoir profiter de l'IPv6
$ qm create 9000 --name ubuntu2204 --cores 2 --memory 4096 --net0 virtio,bridge=vmbr1
# On importe l'image téléchargée en tant que disque de la VM
$ qm importdisk 9000 jammy-server-cloudimg-amd64.img local-zfs
$ qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-9000-disk-0
# Effectuons quelques réglages, je vous laisse vous documenter à ce sujet
# QEMU Guest Agent
$ qm set 9000 --agent 1
# Type de Machine vers q35
$ qm set 9000 --machine q35
# On ajoute 10Go d'espace sur le disque (en plus)
$ qm resize 9000 scsi0 +10000M
# Definissons le boot sur l'image disque
$ qm set 9000 --boot c --bootdisk scsi0
# Ajout d'un lecteur pour l'option CloudInit
$ qm set 9000 --ide0 local-zfs:cloudinit
# Définition de la VM en tant que Linux
$ qm set 9000 --ostype l26
# Convertion en template
$ qm template 9000

Désormais, dans l’interface vous pouvez créer une VM à partir du template, en selectionnant “Clone Intégral”.

Ou via la ligne de commande :

qm clone 9000 100 --name ma-machine-virtuelle

Configurez bien l’onglet Cloud Init avant le lancement, en indiquant votre clé SSH et les différents DNS.

Pour la configuration IP, j’ai fais le choix de prendre l’IPv6 correspondant à l’id de ma VM.
Exemple pour l’Id 100 : 2001:41d0:xxxx:xxxx::100 :

Enfin, pensez bien à régénérer l’image cloud init avant de lancer votre VM.

Bonus : Installation et Activation de l’agent QEMU dans la VM

Afin que Proxmox puisse bien communiquer avec la VM (récupération de l’IP de la VM dans l’interface par exemple), vous pouvez installer l’agent QEMU dans la VM :

$ sudo apt-get install qemu-guest-agent
$ sudo systemctl start qemu-guest-agent

Conclusion

L’utilisation du bloc IPv6 dans un contexte de virtualisation sur un environnement OVH, n’est pas une mince affaire.
OVH ne gère pas correctement ses IPv6, nous obligeant à passer par cette manipulation.
On espère, à l’avenir qu’une interface puisse être développé, à l’instar de l’IPv4, pour pouvoir déclarer des adresses MAC virtuelles pour nos IPv6.

N’hésitez pas à commenter :)

--

--