Le danger d'IPv6 dans le cloud n'est pas de mal le configurer, c'est de l'avoir activé sans le savoir. Plusieurs fournisseurs attribuent un préfixe IPv6 d'office à vos sous-réseaux, et vos règles de pare-feu, écrites pour IPv4, ne filtrent alors que la moitié de la surface exposée. Cette page explique ce qui change vraiment avec IPv6, comment vérifier ce qui est actif chez vous, et pourquoi le NAT n'a plus de raison d'être.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Lire une adresse IPv6 sans se perdre dans les deux-points.
- Vérifier si IPv6 est déjà actif sur vos réseaux, souvent à votre insu.
- Comprendre pourquoi le NAT disparaît, et ce que cela change pour la sécurité.
- Écrire des règles de filtrage qui couvrent les deux protocoles.
- Décider s'il faut activer IPv6 sur votre projet, et à quel moment.
Prérequis
Section intitulée « Prérequis »La leçon sur l'adressage et celle sur la sécurité réseau.
Lire une adresse, en trois règles
Section intitulée « Lire une adresse, en trois règles »Une adresse IPv6 tient sur 128 bits, notés en hexadécimal par groupes de quatre séparés par des deux-points. Trois règles de lecture suffisent pour ne plus être impressionné.
- Les zéros de tête d'un groupe se suppriment :
2001:0db8:0000:0001s'écrit2001:db8:0:1. - La plus longue suite de groupes nuls se remplace par
::, une seule fois dans l'adresse :2001:db8:0:0:0:0:0:10devient2001:db8::10. - Le préfixe se note comme en IPv4, avec une barre oblique :
2001:db8:1::/64.
Le /64 est la taille standard d'un sous-réseau, et ce n'est pas une convention
arbitraire : l'autoconfiguration des machines suppose que les 64 derniers bits
leur sont réservés. Découper plus finement casse ce mécanisme, ce qui est la
première erreur que commettent les habitués d'IPv4, tentés d'économiser des
adresses.
Il n'y a rien à économiser : un seul /64 contient plus d'adresses que
l'intégralité d'IPv4.
Ce qui change vraiment
Section intitulée « Ce qui change vraiment »IPv6 n'est pas IPv4 avec des adresses plus longues, c'est un protocole distinct qui cohabite avec lui. Les deux tournent en parallèle sur les mêmes machines, ce qu'on appelle la double pile, et une machine peut être joignable par l'un et pas par l'autre.
| IPv4 | IPv6 | |
|---|---|---|
| Taille de l'adresse | 32 bits | 128 bits |
| Adresses privées | 10.x, 172.16-31.x, 192.168.x | adresses locales uniques en fc00::/7, dont fd00::/8 en pratique |
| NAT | omniprésent, par nécessité | inutile, chaque machine peut être publique |
| Attribution aux machines | DHCP | autoconfiguration, ou DHCPv6 |
| Diffusion générale | broadcast | remplacé par du multicast |
La disparition du NAT est le changement qui a le plus de conséquences, et il faut le comprendre correctement : le NAT n'était pas une mesure de sécurité, c'était un contournement de la pénurie d'adresses. Il avait un effet de bord protecteur, en rendant les machines injoignables par défaut.
Avec IPv6, cet effet de bord disparaît. Une machine peut porter une adresse publique routable, et plus rien ne la protège en dehors de votre pare-feu. Ce n'est pas moins sûr, à condition que le filtrage soit réellement écrit. C'est beaucoup moins sûr si vous comptiez sans le savoir sur le NAT.
Vérifier ce qui est actif chez vous
Section intitulée « Vérifier ce qui est actif chez vous »Beaucoup d'équipes découvrent IPv6 en lisant la sortie d'une commande, pas en l'ayant décidé. Le lab de la leçon sur les sous-réseaux en donne un exemple : la création d'un réseau privé chez Scaleway retourne un préfixe IPv6 que personne n'a demandé.
lab-public 10.20.1.0/24, fdba:fde8:9c04:f111::/64lab-prive 10.20.2.0/24, fdba:fde8:9c04:20a4::/64Ces préfixes commencent par fd, ce sont donc des adresses locales uniques,
l'équivalent IPv6 du 10.0.0.0/8 : elles ne sont pas routables sur Internet. Le
risque décrit plus haut ne s'applique donc pas à ce cas précis, et il
s'appliquerait immédiatement à un préfixe global.
C'est exactement le genre de distinction qu'il faut savoir faire, et elle tient au premier caractère de l'adresse.
| Début de l'adresse | Nature | Routable sur Internet |
|---|---|---|
2000::/3, donc 2 ou 3 | adresse globale | oui |
fd | adresse locale unique | non |
fe80 | lien-local, propre à l'interface | non |
Écrire des règles pour les deux protocoles
Section intitulée « Écrire des règles pour les deux protocoles »Chaque règle de filtrage doit exister en double tant que vous êtes en double pile. Il n'y a pas de raccourci, et l'oubli ne produit aucune erreur.
Les notations à connaître, en regard :
| Intention | IPv4 | IPv6 |
|---|---|---|
| Depuis n'importe où | 0.0.0.0/0 | ::/0 |
| Une machine précise | 203.0.113.10/32 | 2001:db8::10/128 |
| Un sous-réseau | 10.20.1.0/24 | 2001:db8:1::/64 |
Notez que le /128 joue en IPv6 le rôle du /32 en IPv4 : il désigne une
seule adresse.
Faut-il activer IPv6 sur votre projet
Section intitulée « Faut-il activer IPv6 sur votre projet »La réponse honnête dépend de qui vous servez, et elle n'est pas « oui » par principe.
Activez-le si vous exposez un service au grand public, en particulier mobile : plusieurs opérateurs mobiles fonctionnent en IPv6 avec traduction, et un accès IPv6 direct améliore la latence pour ces visiteurs.
Reportez-le si vous construisez une infrastructure interne et que votre équipe débute : la double pile double la surface de configuration, donc le nombre d'erreurs possibles, et le bénéfice est nul si personne ne vous joint en IPv6.
Dans tous les cas, ne le laissez pas actif sans le savoir. Le pire état est celui où IPv6 fonctionne, où personne ne l'a décidé, et où le filtrage ne le couvre pas. Décidez, puis appliquez votre décision explicitement, dans un sens comme dans l'autre.
À retenir
Section intitulée « À retenir »- Un
/64par sous-réseau : découper plus finement casse l'autoconfiguration, et il n'y a rien à économiser. - Le NAT disparaît, et avec lui l'isolement gratuit dont beaucoup d'architectures dépendaient sans le dire.
- Le premier caractère dit tout :
2ou3pour une adresse routable,fdpour une adresse locale,fe80pour un lien-local. - Une règle IPv4 ne filtre aucun trafic IPv6. Chaque règle doit exister en double en double pile.
::/0est l'équivalent de0.0.0.0/0, et/128celui de/32.- Testez avec
curl -4puiscurl -6. Un filtrage asymétrique ne se voit pas autrement. - Ne subissez pas IPv6. Activez-le ou désactivez-le explicitement, mais décidez.