
Environnement
L’objectif est d’héberger un serveur dédié chez OVH qui soit accessible en IPV4 ET en IPV6.
Sur ce serveur, une distribution proxmox d’hypervision est installée. A la fois l’hôte proxmox et les machines virtuelles (VM et containers ) devront communiquer sur les 2 protocoles.
Dans cet article, les machines virtuelles seront accessibles sur internet en frontal, sans pare-feu intermédiaire. Ceci fera l’objet d’un autre article avec l’inclusion d’une VM pfsense, quand la solution sera opérationnelle.
Particularité IPV6 chez OVH
De la théorie à la pratique, il n’y a qu’un pas, mais là, entre ce que j’ai appris lors d’une formation sur IPV6 et son implémentation dans l’infrastructure d’OVH, il y a un gouffre. Ce n’est pas que mon constat, mais celui de beaucoup de professionnels du secteur outré par ce que la licorne française a mis en place en IPV6. M’enfin, en voici les contraines.
Avec le serveur, nous avons un prefixe IPV6 en /64 et une passerelle :
- prefixe : 2001:41d0:XXXX:157c: :/64
- gateway : 2001:41d0:XXXX:157FF:FF:FF:FF:FF/64
Premier constat, vu que nous sommes sur un /64, les fonctions comme le dhcpdv6 ne sont pas possible dans le réseau qui nous est délégué. Autre fonction bloquée chez OVH, le "router advertisment’ (RA). Autrement dit, une machine sous ce préfixe ne peut pas se voir décerner une IPV6 et toutes les règles de routage automatiquement. En conséquence de quoi le plus simple à mettre en oeuvre est de définir les IPV6 de toutes les machines virtuelles manuellement. D’après ce que j’ai pu lire, il y aurait moyen de mettre en place un proxy NDP qui ferait le job d’attribution d’IPV6, sauf que je n’ai pas su le rendre opérationnel pour ma part.
Dernière contrainte, et non des moindres, elles est indiquée sur cet article de la documentation d’OVH :
Si vous souhaitez configurer plusieurs adresses IPv6 sur votre serveur (ou si vous souhaitez l’utiliser sur une VM) vous devez disposer d’une Additional IP configurée avec une vMAC. Dans le cas contraire, l’IPv6 ne pourra pas être routée par nos routeurs/switchs.
Ouch !! Traduisez "si vous voulez faire de l’IPV6 pour vous soustraire aux limitations d’adresses IPV4, faites de l’IPV4 !!????". Et ouais, c’est y pas beau ?
[rouge]Nous allons donc devoir utiliser la notion "d’IP failover" (appelées désormais "additionnal IP") associées à des adresses MAC virtuelles pour chaque machine virtuelle qui voudra communiquer en IPV6 vers le WEB.[/rouge]
Configuration de l’hôte
Premier étape, faire en sorte que l’hôte proxmox soit visible et puisse naviguer en IPV6. Pour cela l’article suivant décrit bien la configuration à mettre en place, tout comme celui de la documentation OVH.
Voici la configuration du fichier /etc/network/interfaces :
D’abord, la configuration IPV4 :
auto lo
iface lo inet loopback
iface enp1s0f0 inet manual
auto vmbr0
iface vmbr0 inet static
address 164.132.XXX.124/24
gateway 164.132.XXX.254
bridge-ports enp1s0f0
bridge-stp off
bridge-fd 0
hwaddress D0:50:99:D6:AD:29Plusieurs choses à noter ici :
- la passerelle IPV4 : c’est votre adresse IP avec le dernier chiffre (ici 124) remplacé par 254,
- le "hwaddress" : qui est l’adresse MAC de votre carte physique (probablement), cette ligne a été écrite lors de l’installation de proxmox depuis le template fourni par OVH.
La partie IPV6 :
iface vmbr0 inet6 static
address 2001:41d0:XXXX:157c::ffff
netmask 64
# IPV6 gateway
post-up sleep 5; /sbin/ip -6 route add 2001:41d0:XXXX:15FF:FF:FF:FF:FF dev vmbr0
post-up sleep 5; /sbin/ip -6 route add default via 2001:41d0:XXXX:15FF:FF:FF:FF:FF
pre-down /sbin/ip -6 route del default via 2001:41d0:XXXX:15FF:FF:FF:FF:FF
pre-down /sbin/ip -6 route del 2001:41d0:XXXX:15FF:FF:FF:FF:FF dev vmbr0A ce stade, après redémarrage du poste, l’hote est capable de sortir en IPV6 . Pour tester :
ping6 -c 8 2001:4860:4860::8888
ou
root@rise:~# traceroute -6 ipv6.google.com
traceroute to ipv6.google.com (2a00:1450:4007:80a::200e), 30 hops max, 80 byte packets
1 2001:41d0:XXXX:15ff:ff:ff:ff:fd (2001:41d0:XXXX:15ff:ff:ff:ff:fd) 0.692 ms 0.855 ms 0.962 ms
2 2001:41d0:0:50::1:8732 (2001:41d0:0:50::1:8732) 1.269 ms 2001:41d0:0:50::1:873a (2001:41d0:0:50::1:873a) 1.628 ms 1.733 ms
3 2001:41d0:0:50::5:d0 (2001:41d0:0:50::5:d0) 0.141 ms 2001:41d0:0:50::5:92 (2001:41d0:0:50::5:92) 0.187 ms 2001:41d0:0:50::5:d0 (2001:41d0:0:50::5:d0) 0.152 ms
4 be100-100.gra-g2-nc5.fr.eu (2001:41d0::436) 1.409 ms * be101.gra-g1-nc5.fr.eu (2001:41d0::1102) 1.790 ms
5 be102.par-th2-sbb1-nc5.fr.eu (2001:41d0::439) 5.032 ms * *
6 * * *
7 ams-1-a9.nl.eu (2001:41d0::257d) 4.211 ms google.as15169.fr.eu (2001:41d0::269d) 4.774 ms google.as15169.fr.eu (2001:41d0::832) 4.561 ms
8 * 2a00:1450:8120::1 (2a00:1450:8120::1) 4.893 ms 2a00:1450:8121::1 (2a00:1450:8121::1) 4.601 ms
9 2001:4860:0:1::1b18 (2001:4860:0:1::1b18) 4.513 ms * 2001:4860:0:1::586c (2001:4860:0:1::586c) 4.466 ms
10 2001:4860:0:1::1e37 (2001:4860:0:1::1e37) 4.768 ms * *
11 2001:4860::c:4000:d9af (2001:4860::c:4000:d9af) 5.135 ms par10s28-in-x0e.1e100.net (2a00:1450:4007:80a::200e) 4.554 ms 4.319 msConfiguration VM ou containter
Nous allons donner ici l’exemple d’un container contenant une debian 11 issu du template proxmox.
Préparation amont
OVH nous contraint pour que ce container puisse naviguer en IPV6 à utiliser une IPV4 Additionnal. Commençons donc par la créer en suivant les indications de la documentation OVH.
En exemple, voici la liste des IP additionnelles créés sur notre espace client :
Veuillez noter l’indication sur fond bleu "[fond bleu clair]FO[/fond bleu clair]" pour FailOver (ancienne appellation).
Nous allons utiliser pour notre container les informations suivantes :
- IPV4 failover : 51.77.XX.184
- Mac virtuelle : 02:00:00:2e:XX:f1
- IPV6 : 2001:41d0:XXXX:157c::999/64 (choix totalement arbitraire d’une IPV6 dans notre plage)
Déclaration de la configuration du container
A la création du container, déclarons comme interface de branchement ’vmbr0’. Il est possible de déclarer la configuration réseau directement depuis la GUI de proxmox vu que c’est un container, ce qui donne :
Ou sa version texte dans le fichier /etc/network/config de votre container debian11 :
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 51.77.XX.184/32
# --- BEGIN PVE ---
post-up ip route add 164.132.XXX.254 dev eth0
post-up ip route add default via 164.132.XXX.254 dev eth0
pre-down ip route del default via 164.132.XXX.254 dev eth0
pre-down ip route del 164.132.XXX.254 dev eth0
# --- END PVE ---
iface eth0 inet6 static
address 2001:41d0:XXXX:157c::999/64
gateway 2001:41d0:XXXX:157c::ffffVeuillez noter :
- la passerelle IPV4 : la meme que pour l’hote,
- la passerelle IPV6 : utilisez l’adresse IPV6 de l’hote proxmox,
- l’adresse MAC : bien indiquer la ’vMac’ qui est associé à votre IP failover.
Si l’on s’arrête ici, et que vous testez si votre container peut voir l’exterieur, et bien vous seriez vite déçu, car à ce stade, çà ne marchera pas. En effet, il va falloir ajouter quelques éléments de configuration sur votre hôte proxmox, d’où le chapitre suivant.
Communication des VM/container vers l’extérieur
Modification du fichier /etc/network/interfaces
Pour la partie IPV4, les 3 dernières lignes à partir de # Failover IP ci-dessous :
auto vmbr0
iface vmbr0 inet static
address 164.132.XXX.124/24
gateway 164.132.XXX.254
bridge-ports enp1s0f0
bridge-stp off
bridge-fd 0
hwaddress D0:50:99:D6:AD:29
# Failover IP #1
up ip addr add 51.77.XX.184/32 dev vmbr0
down ip addr del 51.77.XX.184/32 dev vmbr0Ces deux lignes indiquent que l’interface vmbr0 doit aussi répondre à cette adresse d’IP failover.
Pour la partie IPV6 :
iface vmbr0 inet6 static
address 2001:41d0:XXXX:157c::ffff
netmask 64
# IPV6 gateway
post-up sleep 5; /sbin/ip -6 route add 2001:41d0:XXXX:15FF:FF:FF:FF:FF dev vmbr0
post-up sleep 5; /sbin/ip -6 route add default via 2001:41d0:XXXX:15FF:FF:FF:FF:FF
pre-down /sbin/ip -6 route del default via 2001:41d0:XXXX:15FF:FF:FF:FF:FF
pre-down /sbin/ip -6 route del 2001:41d0:XXXX:15FF:FF:FF:FF:FF dev vmbr0
# Adding IPv6 Gateway to the neighbors
post-up /sbin/ip -f inet6 neigh add proxy 2001:41d0:XXXX:15FF:FF:FF:FF:FF dev vmbr0Les deux dernières lignes sont ajoutées. Elles indiquent que tous les "voisins" (machines dans le même préfixe IPV6 qui communique entre elle au travers de ce protocole) vont utiliser un routeur virtuel (proxy) qui renvoie vers la passerelle IPV6 fourni par OVH pour notre prefixe, depuis l’interface vmbr0.
Modification du fichier /etc/sysctl.conf
Les modifications suivantes sont nécessaires en IPV6 :
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.default.proxy_ndp=1
net.ipv6.conf.all.proxy_ndp=1
