Outils pour utilisateurs

Outils du site


tutoriaux:ipv6-ula

Network - Mettre en place un réseau IPv6 avec des IPv6 "statiques" privées

A la maison, j'ai un réseau “classique” (ISP, Firewall, Vlans, etc…) s'il est facile de créer des sous-réseaux en IPv4 avec des IPs “privées” (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8); ce n'est pas aussi simple en IPv6, car la notion même de NAT, n'est pas vraiment recommandée (et n'est pas toujours très bien supporté/implémenté par les vendeurs).

Cet article relate un peu mes recherches et mes trouvailles.

Un peu de contexte

Je dispose d'un Firewall pfSense qui gère à la fois la négociation “internet” avec mon ISP (recevoir les IPs et gérer les routes/règles). Il gère également Quelques VLANs : LAN, Servers, Guest, etc.

Mon ISP me fournis des IPs (une IPv4 et un préfixe IPv6) relativement stables, mais sans aucune garantie que celles-ci soient toujours les mêmes, je ne peux donc pas utiliser d'IPs “publiques”.

En terme réseau, j'ai donc une IP dynamique et un préfixe IPv6 dynamique (souvent référencé comme un GUA [Global Unicast Address]).

J'ai donc créé des VLANs séparés pour chaque usage, chacun sera gérer avec un subnet IPv4 et un subnet IPv6, il y aura une attention particulière pour le VLAN Servers.

Chaque VLAN aura une configuration très classique, un subnet IPv4 “privé” statique et un subnet IPv6 configuré en “Track Interface” pour diffuser ce GUA aux clients.

Seul le VLAN Servers aura une petite particularité en plus, un subnet ULA ((Unique Local Address) qui l'équivalent d'une IP fixe, mais accessible via PfSense, sans pour autant être routé vers internet.

IPv6 sur pfSense

Configuration de l'Interface "WAN"

L'interface WAN c'est la porte d'entrer/sortie de notre réseau, quelque soit sa complexité ou configuration, il faut IMPERATIVEMENT que cet interface fonctionne parfaitement

Tout commence par configurer son Interface WAN, cela dépends principalement de la configuration de son ISP, chez moi l'IPv4 est reçue via une negotiation PPPoE, et l'IPv6 par une configuration DHCP6.

MTU (Maximum Transmission Unit)

C'est la taille maximale (en octets) d’une trame IP qu’on peut transmettre sur une interface réseau, sans fragmentation, par défaut sur Ethernet, cette valeur est de 1500 octets (en réalité c'est 1518 octets, mais il faut retirer 14 octets pour l’en-tête Ethernet et 4 octets pour le CRC).

Le PPPoE ajoute un en-tête de 8 octets, donc le MTU maximum chute à 1492 (1500 - 8).

Il existe d'autres modes (Jumbo frame, MPLS, etc…) qui modifient cette valeur (parfois beaucoup), mais ces modes sont plutôt réservés aux professionnels et donc peu répandu dans le grand public.

On va donc faire un setup classique IPv4 privé statique, et une IPv6 “Track Interface” avec l'interface WAN en référence et un préfixe ID unique (au PfSense) pour chaque interface où l'on veut ajouter de l'IPv6 “internet”.

MSS (Maximum Segment Size)

C'est la taille maximale du segment de données TCP utile (payload) qu’un hôte accepte dans une connexion TCP.

Calcul :

MSS=MTU−(IPvx header + TCP header)

IP Header TCP Header
Minimum Maximum Minimum Maximum
IPv4 20 60 20 60
IPv6 40 40

en prenant en compte les valeurs ci-dessus et notre MTU de 1492, nous avons:

IPv4, avec headers au minimum:

MTU [1492] - (IP+TCP) [20+20] = 1452

IPv4, avec headers au maximum:

MTU [1492] - (IP+TCP) [60+60] = 1372

IPv6, avec headers au minimum:

MTU [1492] - (IP+TCP) [40+20] = 1432

IPv6, avec headers au maximum:

MTU [1492] - (IP+TCP) [40+60] = 1392

Théoriquement nous pourrions donc régler notre MSS à 1372, mais la valeur de 1280 vient du RFC 8200 (IPv6) qui impose que tout lien IPv6 doit supporter au moins un MTU de 1280.

C’est la valeur minimale considéré comme une “conservatrice”, un “safe default” qui garanti un fonctionnement optimal.

Certains FAI et routeurs (surtout avec PPPoE + IPv6) recommandent de garder le MSS à une valeur de 1280, pour éviter des problèmes de fragmentation ou de latence.

Use IPv4 connectivity as parent interface

Nous informons PfSense d'utiliser le réseau IPv4 (initié par le PPPoe) pour obtenir un block IPv6

DHCPv6 Prefix Delegation size

Avec IPv6, un client (dans notre cas, PfSense) ne se voit pas attribuer une seule adresse IPv6, mais un préfixe entier (un bloc d’adresses).

L'ISP, via DHCPv6, “délègue” au PfSense un bloc d’adresses IPv6 qui peut ensuite être utilisés par les clients du PfSense, cette valeur est fournie par l'ISP et doit être précisée pour un bon fonctionnement.

64 un seul sous-réseau (2^64 adresses utilisables)
60 16 sous-réseaux “/64”
56 256 sous-réseaux “/64”
48 65 536 sous-réseaux “/64”

La taille d'une taille de délégation est recommandée par le RFC 6177; souvent un /56 pour les clients résidentiels, et /48 pour les entreprises.

Configuration de l'IPv6 sur un (V)LAN

Une fois le WAN configuré, avec ses IPs publiques (IPv4 et IPv6), normalement l'accès a internet doit être possible (du moins en IPv4).

Nous allons maintenant ajouter la configuration pour que notre interface “LAN” distribue (en plus des IPv4 “privées”) des IPv6 routable sur internet.

Configuration de l'interface

Il est temps de configurer les interfaces “internes” : “Interfaces –> LAN” (ou n'importe quel interface que vous désirer utiliser en IPv4 et IPv6.

C'est simple, on précise que la configuration sera en “Track Interface” et plus bas, on précise simplement quel est l'interface “source” et quel préfixe ID on désire appliquer :

Je conseil d'attribuer un Prefix ID différent par interface.

Informer les clients IPv6

Notre interface est maintenant configurer avec une IPv6 (et accessoirement une IPv4 “classique”), il faut maintenant informer les clients du réseau qu'il existe un routeur capable de fournir des informations de configuration IPv6.

  • Lorsqu’un périphérique (PC, smartphone, serveur) se connecte sur un réseau IPv6, il envoie un Router Solicitation (RS) pour demander s’il y a un routeur disponible.
  • Le(s) routeur(s) répond(ent) par un Router Advertisement (RA).

Ce RA contient des infos essentielles: Préfixe IPv6 du réseau (ex. 2001:db8:abcd:1::/64), la durée de validité du préfixe, Adresse du routeur par défaut (gateway IPv6) et des données de paramétrage.

On va donc configurer notre RA (Services –> Router Advertisement) par interface

Nous allons utiliser le service DHCPDv6 pour la suite.

Ajout d'une IP virtuelle

PfSense ne permet pas de configurer un interface avec 2 “types” d'IPv6, il n'est pas possible de mettre *Track Interface* et *Static IPv6* en même temps.

Il n'est d'ailleurs pas possible non plus en IPv4, d'ajouter une seconde IP sur l'interface.

Pour résoudre ce problème, on va ajouter un Virtual IP (VIP) avec une ULA sur l’interface.

On commence par aller sur la page de configuration Virtual IP (FirewallVirtual IPs) et on selectionne le bouton “+ Add”.

  • On précise bien le type d'IP (IP Alias);
  • L'interface sur laquelle cette IP sera “bind”;
  • L'IP en question, celle-ci DOIT commencer par fd, ensuite c'est a vous de choisir, il existe aussi des générateurs d'IP ULA sur internet
  • On spécifie un subnet /64, cela sera LARGEMENT assez
  • Je conseille de mettre une description qui soit explicite.

pour vérifier que tout est correcte, une fois les modifications appliquées, il faut vérifier via l'interface CLI, car le GUI ne montre pas les IPs virtuelles.

nocodes@gateway:/root# ifconfig | awk '/^[a-z]/ {iface=$1; sub(":", "", iface)} /inet / || /inet6 / {$1=iface":"; print}'
em1 172.16.0.254 netmask 0xffffff00 broadcast 172.16.0.255
em1: fe80::21c:7fff:fe3e:7dab%em1 prefixlen 64 scopeid 0x2
em1: fe80::1:1%em1 prefixlen 64 scopeid 0x2
em1: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx prefixlen 64
em1 fdca:fdca:fdca:1::1 prefixlen 64
lo0: 127.0.0.1 netmask 0x0
lo0: ::1 prefixlen 128
lo0: fe80::1%lo0 prefixlen 64 scopeid 0xa

on voit ici que mon interface em1 dispose de plusieurs IPs:

  • une IPv4 172.16.0.254 –> IPv4 “privée” configurée manuellement (statique) depuis la page de configuration de l'interface, avec son masque 255.255.255.0 (0xffffff00).
  • des IPv6 fe80:: –> ce sont des “Liens locaux” (équivalente à un 127.0.0.1), avec leurs préfixe de /64
  • une IPv6 “publique” (masquée ici par des xxxx:) configurée en “DHCPDv6” depuis la page de l'interface avec leurs préfixe de /64.
  • une IPv6 “Privée” “fdca:”, celle que nous venons d'ajouter avec son préfixe de /64.

Configuration des "serveurs"

Clients et distribution des ULAs

Même avec le vIP, sans configuration spécifique du(des) serveur(s)/host(s), ceux-ci ne recevront pas de préfixe ULA automatiquement.

  • Pour distribuer :
  • Router Advertisement (RA) : annonce le préfixe ULA pour SLAAC.
  • DHCPv6 : attribue des adresses dans le bloc ULA.
  • Sinon, tu peux donner uniquement des adresses statiques ULA aux serveurs (pas besoin d’ULA partout).

3. Multi-adressage

  • Les machines peuvent avoir :
  • une GUA (Internet / WAN)
  • une ULA (interne)
  • une link-local
  • L’algorithme IPv6 (RFC 6724) choisit automatiquement la bonne adresse (ULA ↔ ULA, GUA ↔ Internet).

4. Proxmox / LXC

  • Pour attribuer une ULA : indiquer `fdca:fdca:fdca:1::2/64`.
  • Ajouter aussi la gateway ULA (`fdca:fdca:fdca:1::1`) si tu veux router en interne uniquement via ULA.
  • Résultat : le conteneur a plusieurs IPv6 (ULA, GUA, link-local).

5. Firewall pfSense

  • Par défaut, le trafic entre VLANs est bloqué.
  • Pour accéder à un serveur (ex. depuis LAN ou Guest) via ULA, il faut une règle :
  • Source = LAN net (ou Guest net)
  • Destination = `fdca:fdca:fdca:1::/64` (ou juste l’IP du serveur)
  • Family = IPv6
  • Action = Pass

6. DNS interne

  • Utile d’ajouter des Host Overrides dans le DNS Resolver :
  • `srv1.nox.lan → fdca:fdca:fdca:1::1`
  • Ainsi, les clients utilisent l’ULA automatiquement pour joindre les serveurs.
tutoriaux/ipv6-ula.txt · Dernière modification : de frater