Introduction à IPv6

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.

1 - Introduction à IPv6

Atouts

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). Adressage

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 :

  # Topologie Publique exprimée sur 48 bits (/48)
        o FP (Format Prefix) : préfixe sur 3 bits
        o TLA ID (Top Level Agregation Identifier) : unité d'agrégation haute exprimée sur 13 bits
        o SUB TLA ID (Sub Top Level Agregation Identifier)
        o NLA ID (Next-Level Agregation Identifier) 
  # Topologie de site exprimée sur 16 bits (/64)
        o SLA ID (Site-Level Agregation Identifier) 
  # Topologie d'hôte exprimée sur 64 bits (/128)
        o Interface ID : l'identifiant d'interface, exprimé sur 64 bits (EUI64) et basé sur l'adresse MAC de l'interface

2 - Configuration réseau

Annonce du préfixe

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=8843 mtu 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

Portée locale, Lien-local

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=8049 mtu 33224
      inet 127.0.0.1 netmask 0xff000000 
      inet6 ::1 prefixlen 128
      inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5

Portée locale, Site-local

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

Multicast

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).

Sysctls

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)

3 - Les applicatifs

PPP

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

Packet Filter

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

Outils ipv6-ready

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.

Crédits :

Alexandre Anriot - http://www.atlantilde.com

documentations/reseau/introduction_ipv6.txt · Dernière modification: 2009/08/16 13:33 par pdaubard
OpenBSD Apache Driven by DokuWiki
CC Attribution-Noncommercial-Share Alike 3.0 Unported