Abstract
Voici quelques éléments d'information sur l'intégration d'IPv6 dans OpenBSD, cette documentation n'a pas pour vocation d'être exhaustive. Pour toute information complémentaire ou pour plus de détail, vous pouvez consulter la FAQ (http://www.openbsd.org/faq/fr/) et les pages de man ip6(4), inet6(4), icmp6(4). Afin de déployer un réseau IPv6 via Internet, il est nécessaire de disposer soit d'une connexion IPv6 native, soit de faire appel à un broker (IPv6 over IPv4) afin de faire transiter les paquets v6 sur un réseau v4.
Outre le nombre d'adresses disponibles et la meilleur agrégation des adresses grâce à un modèle hiérarchique, IPv6 bénéficie d'un grand nombre d'améliorations. Les adresses sont dotées d'un mécanisme d'obsolesence par exemple : une adresse devient successivement préférée, dépréciée puis invalide, et ce afin de réaliser des transitions progressives lors des modifications de routage.
IPv6 dipose d'un mécanisme de découverte des voisins nommé NB (pour Neighbor Discovery), afin d'automatiser les opérations de découverte entre les hôtes d'un réseau. Ce protocole est une sorte de remplaçant de l'ARP en IPv4, à ceci près qu'il est "actif" et gère directement l'adressage local.
Un mécanisme d'autoconfiguration des interfaces a également été mis en place, sous deux formes. Si l'autoconfiguration statefull existe toujours avec DHCPv6 , un nouveau mécanisme stateless fait son apparition. Lorsqu'un hôte configure une interface, il sollicite le routeur; le routeur dispose d'un démon router advertisment qui gère un ou plusieurs préfixes et qui répondra en indiquant ce préfixe. L'hôte n'a plus qu'a constituer son adresse en concaténant le préfixe retourné avec l'EUI64 (comprendre 64-bit Global Identifier), calculé à partir de l'adresse MAC de la carte.
La gestion de la fragmentation est également améliorée, avec un mécanisme nommé PMTU (pour Path Maximum Transmission Unit). Si l'on prend l'exemple d'un paquet devant être acheminé par plusieurs routeurs, PMTU permettra au final d'émettre des paquets de la taille du plus petit MTU rencontré sur le chemin, son but ultime est d'éviter la fragmentation, très coûteuse. Le protocole consiste à envoyer des paquets avec le bit DF (pour Don't Fragment) positionné (c'est aussi le cas des paquets NFS etc.) Ainsi, si un hôte de transit ou de destination reçoit un paquet trop gros pour lui, mais qu'il ne peut fragmenter, il renvoit un paquet ICMP "Destination Unreachable (Datagram Too Big)", contenant le MTU qu'il utilise; l'hôte émetteur peut ainsi s'adapter et envoyer des paquets plus petits.
Enfin, plusieurs mécanismes permettant de faire coexister IPsec et NAT existent, comme NAT-Traversal; le principe de ces systèmes est de réaliser une encapsulation supplémentaire avec de préserver le paquet initial (sur lequel porte le checksum des modifications opérées par un routeur NAT).
Les adresses ipv6 sont représentées en hexadécimal via la notation CIDR (Classeless Inter Domain Routing). Une adresse répond à un certain nombre de critères hiérarchiques afin de faciliter le routage au sein des backbones.
Voici la composition d'une adresse :
Si les systèmes Linux utilisent radvd, les systèmes *BSD utilisent quant à eux rtadvd sur les routeurs (pour les avertissements de routage) et rtsol/rtsold sur les hôtes. Voici par exemple un fichier rtadvd.conf correspondant à la gestion du préfixe 2001:7a8:645c:1::/48 :
fxp0:\
:addr="2001:7a8:645c:1::":prefixlen#64:
Une sollicitation cliente du routeur sur l'interface fxp0 permet au client d'obtenir une adresse, résultant de la concaténation du bloc annoncé et de l' EUI64 :
dhcp rtsol
Résultat :
fxp0: flags=8843mtu 1500 address: 00:08:0d:83:df:14 media: Ethernet autoselect (none) status: no carrier inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255 inet6 fe80::208:dff:fe83:df14%fxp0 prefixlen 64 scopeid 0x1 inet6 2001:7a8:645c:2:208:dff:fe83:df14 prefixlen 64 pltime 604378 vltime 2591578
Les systèmes *BSD réalisent par défaut un certain nombre d'opérations sur les interfaces réseau. Ces dernières sont par exemple dotées d'une adresse IPv6 lien-local (prefixe fe80); voici un exemple pour l'adresse de bouclage :
% ifconfig lo0 lo0: flags=8049mtu 33224 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
Devant le nombre très suffisant d'adresses IPv6 disponibles pour chaque personne, l'utilisation de ce type d'adresses est relativement peu répendu (prefixe fec0). Sachez seulement que ces adresses ressemblent assez fortement aux adresses IPv4 privées; exemple :
inet6 fec0::208:dff:fe83:df14 prefixlen 64
Un paquet unicast est destiné à une interface alors qu'un paquet anycast est destiné à être reçu par une interface d'un groupe. Un paquet multicast est quant à lui destiné à plusieurs hôtes, ceci porte le nom de multi-diffusion. Le trafic multicast est supporté par un démon éponyme, mrouted qui implémente le protocole DVMRP. Certaines parties du protocole PIM (Protocol Independent Multicast) sont également présente dans le noyau d'OpenBSD (depuis 3.7).
Voici une liste non exhaustive des sysctls impliqués :
net.inet6.ip6.forwarding (forwarding, pour les routeurs) net.inet6.ip6.accept_rtadv (acceptation d'annonces, pour les clients) net.inet.esp.enable (encapsulation ESP) net.inet.ah.enable (encapsulation AH) net.inet.esp.udpencap (encapsulation UDP) net.inet.ipcomp.enable (compression IP)
Si vous voulez utiliser IPv6 avec PPPOE, vous devez impérativement utiliser une release >= 3.8. De nombreux correctifs ont été intégrés afin d'améliorer ce support. Si vous disposez déjà dun fichier ppp.conf pour IPv4, vous devez ajouter/modifier les lignes suvantes :
default: set log Phase Chat LCP IPCP IPV6CP CCP tun command pppoe: enable ipv6cp add default HISADDR6
Voici quelques règles en rapport avec IPv6 :
pass in on egress proto icmp6 keep state pass in on egress inet6 proto tcp to any port 80 flags S/SA keep state pass out quick inet6 keep state
La totalité des outils réseau sont fournis avec un support IPv6 : ping6, netstat, ifconfig, traceroute6 etc. Plusieurs autres logiciels sont aussi compilés par défaut avec le support IPv6, comme OpenSSH, Bind ou encore inetd. Attention cependant à Apache 1.3 dans le système de base, qui ne dispose pas de support IPv6; il est possible d'utiliser une alternative comme lighttpd présente dans ports.