Astuces pour l'IPv6

Informations générales

Les adresses en IPv4 sont codées sur 32 bits, en IPv6 elles sont codées sur 128 bits. Les adresses IPv6 sont représentées sous forme hexadécimale, elles sont très difficiles à retenir.

En IPv6, les adresses sont composées de deux parties : la partie identifiant le réseau (le préfixe), la partie identifiant l'hôte.

La représentation d'un préfixe se fait de la même façon qu'un sous-réseau en IPv4, c'est-à-dire en utilisant la notation CIDR.

Les adresses

Types d'adresses

Il y a plusieurs types d'adresses en IPv6 (voir la RFC4291 :

  • unicast : une adresse unicast identifie un seul hôte. Un paquet envoyé à une adresse unicast n'arrivera qu'à un seul hôte.
  • anycast : une adresse anycast identifie un group d'hôte. Un paquet envoyé à une adresse anycast arrivera sur l'un des hôtes (cela dépend du protocole de routage).
  • multicast : une adresse multicast identifie un group d'hôte. Un paquet envoyé à une adresse multicast arrivera sur tous les hôtes.

Il n'y a pas d'adresse de broadcast comme en IPv4, il faut utiliser la fonctionnalité multicast.

Il y plusieurs adresses ou groupes d'adresses spécifiques :

  • Unspecified adress : ::/128, utilisée uniquement lors de la phase de découverte de l'adresse de l'interface.
  • Loopback : ::1/128, adresse loopback qui n'appartient à aucune interface physique, visible uniquement de l'hôte, comme en IPv4.
  • Multicast : FF00::/8 (voir au dessus).
  • Link-Local Unicast : FE80::/10, adresse qui permet d'échanger avec les hôtes du lien local (pour l'autoconfiguration et la découverte des voisins). Les routeurs ne doivent pas laisser passer de telle adresses.
  • Global Unicast: toutes les autres adresses.

Les adresses d'un hôte

Un hôte aura plusieurs IPv6 :

  • une adresse de loopback
  • une adresse Link-Local par interface
  • éventuellement une adresse unicast (pour communiquer avec le monde)
  • éventuellement d'autres adresse multicast et anycast

Allocation des adresses

En IPv4, l'assignation des adresses est soit manuelle, soit automatique (DHCP, zeroconf.

De même, en IPv6 on peut utiliser soit un mode manuel soit un mode automatique. Cependant, la longueur des adresses restreint les possibilités :

  • manuelle
  • auto générée (aléatoire)
  • DHCPv6

Assignation manuelle

On peut utiliser la ligne de commande ou bien la configuration par le fichier /etc/network/interfaces :

address 1234:1234:1234:1234:1234:1234:1234:1234
netmask 64
gateway 1234:1234:1234:1234:1234:1234:1234:1234

Cette technique n'est a priori pas nécessaire, car il y aura presque toujours une possibilité de configuration automatique.

Adresse auto-générée

Les adresses auto-générée sont constitué de deux parties : le préfixe et l'identifiant unique (voir la RFC4862. Le préfixe est obtenu du routeur se trouvant sur le lien. L'identifiant unique est généré par l'hôte (un algorithme spécial évite les doublons sur un lien). S'il n'y a pas de routeur, alors l'adresse généré sera du type Link-Local.

Les protocoles en jeu sont NDP et SNDP.

Sous Linux, l'autogénération prend comme source l'adresse MAC de la carte réseau pour générer la partie aléatoire. Il est possible de forcer l'utilisation d'un nombre aléatoire à la place de l'adresse MAC, c'est appellé Extension de vie privée :

net.ipv6.conf.all.use_tempaddr = 2

DHCPv6

Il existe la possibilité d'utiliser le service [http://en.wikipedia.org/wiki/DHCPv6|DHCP pour l'IPv6], avec les mêmes avantages et inconvénients que l'IPv4. Cependant, il faut considérer que les hôtes peuvent s'autoconfigurer et que des listes d'adresses IPv6 sont immaintenables en pratique.

L'intérêt est de pouvoir facilement fournir les serveurs DNS et la passerelle auw clients DHCP. Mais il y a d'autres moyens de découverte des services avec l'IPv6.

Les sous-réseaux

Théoriquement un préfixe peut faire un nombre arbitraire de bits. En général le préfixe fait 64 bits. Pour une adresse unicast "standard", l'adresse est donc composées de trois parties :

  • le prefixe
  • le sous-réseau
  • l'interface

Voir exemple de free.

Configuration DNS

Pour communiquer avec le reste du monde, il faut que la machine connaisse la passerelle et au moins un serveur DNS. La passerelle est normalement le routeur qui a annoncé le prefixe lors de la configuration automatique de l'adresse, donc la configuration est déjà en place.

Les serveurs DNS doivent être découvert. Pour cela, on peut utiliser rdnssd, un démon qui mettra à jour le fichier /etc/resolv.conf.

Le NAT

En théorie le NAT n'est plus nécessaire puisque chaque hôte aura au moins une adresse routable sur Internet. Mais peut-être que certains admins auront de mauvaises envies... Cependant le NAT en IPv6, appelé NAT66, n'est pas encore au point, il est seulement à l'état de recherche.

Le pare-feu

Etant donnée qu'il n'y a plus de NAT en tant que pare-feu du pauvre, il faut mieux installer un pare-feu sur chaque hôte. La commande est ip6tables et se configure comme en IPv4.

Les outils

On peut utiliser les outils classique dans leur version v6 :

ping6 example.org

Voir l'option -N qui permet d'indiquer ce que l'on veux en retour :

  • ipv6
  • ipv6-global
  • ipv6-sitelocal
  • ipv6-linklocal
  • ipv6-all
tracepath6 example.org
host -t AAAA example.org

Les adresses multicast intéressantes

Certaines adresses multicast sont réservées pour un usage déterminé, du coup il est possible de les utilisées pour obtenir des informations sur le réseau (vu que l'on a plus de DHCP...) :

  • ff02::1 : tous les hôtes du lien local (tous les ordinateurs à côté)
  • ff02::2 : tous les routeurs du lien local
  • ff02::1:2 : tous les serveur DHCP et les relay agents sur le lien local
  • ff05::1 : tous les hôtes du réseau local (à peu près le broadcast IPv4)
  • FF05::1:3 : tous les serveur DHCP et les relay agents sur le réseau local

Pour avoir la liste des machines sur le lien local :

ping6 -c 2 -I etho0 ff02::1