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.
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.
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.
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”.
C'est la taille maximale du segment de données TCP utile (payload) qu’un hôte accepte dans une connexion TCP.
Calcul :
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.
Nous informons PfSense d'utiliser le réseau IPv4 (initié par le PPPoe) pour obtenir un block IPv6
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 ( |
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.
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.
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.
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.
Router Solicitation
(RS) pour demander s’il y a un routeur disponible.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.
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 (Firewall
→ Virtual IPs
) et on selectionne le bouton “+ Add”.
fd
, ensuite c'est a vous de choisir, il existe aussi des générateurs d'IP ULA sur internet/64
, cela sera LARGEMENT assezpour 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:
127.0.0.1
), avec leurs préfixe de /64xxxx:
) configurée en “DHCPDv6” depuis la page de l'interface avec leurs préfixe de /64.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.
3. Multi-adressage
4. Proxmox / LXC
5. Firewall pfSense
6. DNS interne