Démon BSD

Documentation NetBSD :

Réseau IPv6 de NetBSD

Cette page est en construction. Tous commentaires et suggestions sont les bienvenus.

FAQ réseau IPv6

Autres liens


FAQ réseau IPv6


Pour commencer (haut)

Le code IPv6 est entré dans NetBSD en juin 1999. Il fait partie de la version officielle de NetBSD 1.5 et des suivantes. La mise en place d'IPv6 est globalement la même que celle d'IPv4. Vous pouvez donc aussi commencer par vous documenter sur celui-ci.

La configuration de noyau GENERIC gère IPv6 par défaut sur la plupart des architectures (portages ou ports). Les programmes utilisateur le comprennent aussi quand ils le doivent donc aucune recompilation n'est nécessaire même si vous passez d'un noyau IPv4 uniquement à un noyau IPv4/v6.

Si votre système est plus ancien que 1.5, votre situation est la suivante :

Petite histoire d'IPv6 et points clé (haut)

Vers 1992, l'IETF s'est rendue compte de la pénurie générale d'adresses IPv4 et des obstacles techniques, dûs aux limitations d'IPv4, s'opposant au déploiement de nouveaux protocoles. Un IPng (IP nouvelle génération) est né pour résoudre ce problème. La question est discutée dans de nombreux RFC à partir du RFC1550. Après de nombreux débats, autour de l'année 1995, IPv6 (IP version 6) a été retenu parmi les divers candidats d'IPng. Les spécifications de base d'IPv6 sont décrites dans le RFC2460 (en version française).

En deux mots, IPv6 est un ré-arangement de la technologie IP. Les caractéristiques principales sont : Il existe de nombreux ouvrages traitant d'IPv6. Lisez-en si le sujet vous intéresse.

Fichiers de configuration du réseau (haut)

La configuration du réseau est définie dans quelques fichiers texte. Notez que vous n'avez pas besoin de les modifier à la main si vous configurez un hôte (pas un routeur), l'autoconfiguration s'en chargera.

La machine est un hôte ou un routeur ? (haut)

Avec IPv6, les hôtes et les routeurs sont clairement séparés. Les noeuds qui re-transmettent des paquets vers d'autres noeuds sont appelés des routeurs. Ceux qui ne le font pas sont appelés des hôtes. Les routeurs doivent être configurés à la main. Ils diffusent les informations concernant le sous-réseau à l'aide du démon rtadvd(8). Les hôtes possèdent généralement une seule interface réseau externe (certaines parties de ce document partent de ce principe) et s'autoconfigurent à partir des informations diffusées.

Autoconfiguration des hôtes en IPv6 (haut)

Il existe deux mécanismes différents pour l'autoconfiguration des hôtes IPv6. L'un, appelé autoconfiguration d'apatrides (stateless address autoconfiguration), est décrit dans le RFC2462. L'autre, appelé DHCPv6, est mis au point par le groupe de travail sur le dhc de l'IETF. NetBSD reconnait actuelle le premier.

La configuration des apatrides fonctionne de la façon suivante. Deux parties sont en présence : un hôte (à configurer) et un routeur (qui diffuse les informations utiles). Nous appelons ce mécanisme l'autoconfiguration sans papier (stateless) car le routeur n'a pas besoin de gérer d'état civil. C'est très simple, robuste et efficace.

Notez que les routeurs ne peuvent bénéficier d'autoconfiguration. Ils doivent réellement être paramètrés manuellement.

Mise en place d'un routeur IPv6 (haut)

Tout d'abord, il vous faut acquérir un groupe d'adresses IPv6 chez un fournisseur en amont. Dès que vous en avez un, suivez les étapes suivantes : A cause des limitations établies par les spécifications d'IPv6, il n'est pas possible d'autoconfigurer un routeur. N'essayez pas d'affiner les réglages, vous n'obtiendriez que des comportements inattendus.

Mise en place d'un hôte IPv6 (haut)

S'il y a un routeur IPv6 sur votre réseau, ce qu'il vous reste à faire est le paramètrage suivant. Après redémarrage, l'hôte s'autoconfigurera en utilisant les informations diffusées par le démon rtadvd(8) du routeur le plus proche.

S'il n'y a pas de routeur IPv6 sur votre réseau, vous devrez manuellement configurer votre système. Reportez-vous à la section suivante pour tous les détails.

Par ailleurs, de par les restrictions des spécifications d'IPv6, il n'est pas recommandé d'autoconfigurer un hôte possédant deux interfaces réseau (comme deux cartes ethernet). Pour cela, la configuration manuelle est préférable. Reportez-vous à la section suivante.

Configuration manuelle (haut)

L'une des grandes nouveautés d'IPv6 est l'omniprésence de l'autoconfiguration. Commes les adresses IPv6 font 128 bits, il y a de fortes chances de se tromper en les tapant manuellement. Aussi, nous vous recommendons chaudement de ne le faire que lorsqu'il n'est pas possible de faire autrement. Par exemple : Si vous pensez que la configuration manuelle est plus simple, sachez que ce n'est pas le cas. Elle vous imposera, par le futur, la charge de sa maintenance.

Si vous avez réellement besoin de la configuration manuelle, voici comment faire :

Pour configurer manuellement un noeud, ajoutez les paramètres manuels des interfaces réseau dans rc.conf(5).

Déclarez tout d'abord le type de noeud (hôte ou routeur) en renseignant ip6mode comme ci-dessous.
ip6mode="router"	# transmet les paquets
ip6mode="host"		# ne transmet pas les paquets


Configurez ensuite l'interface dans rc.conf(5) ou l'un des fichiers source de /etc/rc.d/network comme /etc/ifconfig.xxN. Vous pouvez écrire plusieurs lignes dans /etc/ifconfig.xxN. Par exemple :
inet 10.1.1.1 netmask 0xffffff00
inet6 3ffe:501:ffff::1 prefixlen 64 alias
Notez le alias en fin de ligne. Comme il existe plusieurs adresses d'interfaces avec IPv6, le mot-clé est obligatoire.

Si votre configuration ne concerne pas rc.conf(5), inscrivez-la dans /etc/netstart.local ou /etc/rc.local. Utilisez les programmes suivants :

Donner un nom à un nouveau noeud du réseau (haut)

Un nom est changé en adresse numérique IPv6 grâce à /etc/hosts(5) et au DNS. Tout comme avec IPv4. yp(8) peut sans doutes être utilisé mais l'auteur ne l'a jamais testé avec des adresses IPv6.
  1. /etc/hosts : hosts(5) Pour les petits réseaux ne possédant que quelques noeuds, la correspondance nom-adresse peut être dupliquée manuellement dans les fichiers /etc/hosts de chacun.

    /etc/hosts:
    3ffe:501:ffff::a:b:c:d  hote2.mondomaine.org.au hote2
          
  2. DNS : La correspondance nom-adresse peut être centralisée par zones et être accessible en questionnant le serveur de noms, named(8). (Vous trouverez une abondante documentation, sur www.dns.net, concernant la mise en place et la maintenance des fichiers du DNS).

    Une entrée du fichier direct
    hote2  IN AAAA     3ffe:501:ffff::a:b:c:d
          
    Une entrée du fichier inverse
    d.0.0.0.c.0.0.0.b.0.0.0.a.0.0.0.0.0.0.0.f.f.f.f.1.0.5.0.e.f.f.3.ip6.int.
    	IN PTR   hote2.mondomaine.org.au.
          
    Note : Si vous avez entendu parler d'enregistrements A6 du DNS (A6 est au stade expérimental à l'heure actuelle), ne vous en souciez pas. AAAA est suffisant et fonctionne correctement. Notez aussi qu'il y a besoin d'une table DNS inverse de ip6.in pour ip6.arpa.


Les adresses suivantes NE DOIVENT PAS apparaitre dans la gestion DNS :
  1. Les adresses lien-local (du genre fe80::/10, comme fe80::1)
    Elles ne sont pas accessibles par tout le monde.
  2. Les adresses site-local (du genre fec0::/10, comme fec0::1)
    Elles ne sont pas non plus accessible par tout le monde. Il s'agit d'une espèce d'adresses privées que vous pouvez donc utiliser pour le DNS de votre intranet.
  3. Les adresses à la v4 (du genre ::ffff:0.0.0.0/96, comme ::ffff:10.1.1.1)
    Elle ne sont utilisable que personnellement sur un noeud. Ne les incluez pas directement dans les données du DNS.
Il est recommandé de ne pas faire apparaitre ces adresses dans la gestion du DNS :
  1. Les adresses multi-destinataire (multicast) (du genre ff00::/8, comme ff05::1)
Dans le cas de l' IPv6 de NetBSD/KAME, les adresses suivantes n'ont aucun sens faute de support :
  1. Les adresses compatibles v4 (du genre ::0.0.0.0/96, comme ::10.1.1.1)
    NetBSD/KAME ne reconnait pas les tunnels auto décrits par le RFC2893.


Allocatin d'adresses IPv6 mono-destinataires (unicast) (haut)

Il y a quelques différence dans l'allocation d'adresses IPv6 et IPv4.

Connexion IPv6 avec l'amont (haut)

Selon votre fournisseur d'accès, vous pourrez vous connecter directement par IPv6 (comme avec IPv4) ou bien utiliser un tunnel (les paquets IPv6 sont encapsulés dans des paquets IPv4). Cette section concerne ce dernier cas.

Vous pouvez vous intégrer au réseau IPv6 expérimental «6bone». Il vous faudra communiquer avec le site 6bone le plus proche pour obtenir un préfix d'adresse IPv6. Notez que vous devez préalablement avoir une adresse IPv4 fixe.

Si vous n'avez pas d'adresse IPv4 mondiale fixe, (si votre connexion au FAI se fait par téléphone), pas de panique : accédez-y vous-même avec Freenet6. Ils proposent une interface web pour intégrer votre réseau personnel à chaque fois que vous vous connectez à internet.

Dans les deux cas, vous devrez mettre en place un tunnel «IPv6 par IPv4» dans votre routeur. Consultez gif(4) pour tout détails.



La mise en place ci-dessous configure un tunnel «IPv6 par IPv4» tel que décrit par le RFC2893. Notez que les paquets RFC2893 ne peuvent pas passer à travers un routeur NAT (si le bout du tunnel, un NetBSD, est un routeur NAT, le problème ne se pose pas).

Un réseau IPv6 typique avec préfixes /48 en amont (haut)

Supposons que votre fournisseur d'accès, en amont, vous ait donné le préfixe 3ffe:0501:ffff::/48 pour votre réseau. Vous avez deux segments ethernet, comme ci-dessous. Monrouteur A et monrouteur B tournent sous NetBSD reconnaissant IPv6. Les adresses IPv4 sont réparties comme ci-dessous. Vous vous connectez au fournisseur à l'aide d'un tunnel «IPv6 par IPv4» depuis monrouteur A (x.x.0.1/24) vers le routeur du fournisseur (y.y.y.10).
monrouteur A
  | IPv4 x.x.0.1/24
  |
==+=== ethernet 0
  |
  | IPv4 x.x.0.2/24
monrouteur B
  | IPv4 x.x.1.2/24
  |
==+=== ethernet 1
  1. Tout d'abord, configurez le tunnel depuis monrouteur A. Utilisez ifconfig(8) pour les paramètrages et ping6(8) pour vérifier la connexion. «ff02::1» indique une adresse multi-destinataire (multicast) qui désigne tous les noeuds du tunnel (dans notre cas monrouteur A et le routeur du fournisseur). Si vous obtenez une réponse des deux noeuds, votre tunnel fonctionne. Si vous n'obtenez de réponse que d'un seul noeud (monrouteur A lui-même), c'est qu'une erreur s'est glissée quelque part. Il peut s'agir d'un filtrage IPv4, d'une mauvaise configuration ou autre. Résolvez le problème avant d'aller plus loin.
    # ifconfig gif0 create		(nécessaire après 1.5)
    # ifconfig gif0 tunnel x.x.0.1 y.y.y.10
    # ping6 -I gif0 -n ff02::1
    PING6(56=40+8+8 bytes) fe80::a00:5aff:fe38:6f86 --> ff02::1
    16 bytes from fe80::a00:5aff:fe38:6f86%lo0, icmp_seq=0 hlim=64 time=0.334 ms
    16 bytes from fe80::240:5ff:fea7:f092%gif0, icmp_seq=0 hlim=64 time=3.416 ms(DUP!)
    
  2. Ensuite, choisissez les adresses de vos deux sous-réseaux ethernet à partir du bloc, 3ffe:0501:ffff::/48, qui vous est attribué. Comme la longueur d'un préfixe IPv6 est toujours /64, vous pouvez mettre en place 65536 sous-réseaux différents ! Donnons 3ffe:0501:ffff:0000::/64 à l'ethernet 0 et 3ffe:0501:ffff:0001::/64 à l'ethernet 1.
    monrouteur A ---- tunnel ------->	amont
      | IPv4 x.x.0.1/24		IPv4 y.y.y.10
      |
    ==+=== ethernet 0: x.x.0.0/24, 3ffe:501:ffff:0::/64
      |
      | IPv4 x.x.0.2/24
    monrouteur B
      | IPv4 x.x.1.2/24
      |
    ==+=== ethernet 1: x.x.1.0/24, 3ffe:501:ffff:1::/64
    
  3. Choisissez les adresses IPv6 universelles des routeurs. Comme ils DOIVENT être manuellement configurés, vous devez effectuer un «ifconfig» comme décrit dans la section «configuration manuelle». Pour monrouteur A, cherchez l'adresse IPv6 lien-local (qui commence par «fe80»), prenez les 64 derniers bits, attachez-les aux 64 premier bits du préfixe sous-réseau et vous obtenez l'adresse IPv6 du routeur. Pour conserver les réglages après un redémarrage, inscrivez-les dans /etc/ifconfig.ne2.
    # ifconfig ne2
    ne2: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    	address: 08:00:5a:38:6f:86
    	media: Ethernet manual
    	inet x.x.0.1 netmask 0xffffff00 broadcast x.x.0.255
    	inet6 fe80::a00:5aff:fe38:6f86%ne2 prefixlen 64 scopeid 0x1
    # ifconfig ne2 inet6 3ffe:501:ffff:0:a00:5aff:fe38:6f86 prefixlen 64 alias
    # echo 'inet6 3ffe:501:ffff:0:a00:5aff:fe38:6f86 prefixlen 64 alias' >> /etc/ifconfig.ne2
    
    Faites la même chose pour monrouteur B.
    # ifconfig tlp0 inet6 3ffe:501:ffff:0:a00:5aff:fe38:8765 prefixlen 64 alias
    	(ethernet 0 side)
    # ifconfig tlp1 inet6 3ffe:501:ffff:1:a00:5aff:fe38:9710 prefixlen 64 alias
    	(ethernet 1 side)
    
  4. Pour diffuser les informations de routage, lancez route6d sur les deux routeurs. Si votre fournisseur d'accès vous demande de groupper ces annonces, consultez les pages de manuel pour connaitres les options. Une fois la connexion mise en place, essayez de pinger un noeud IPv6 extérieur. N'oubliez pas de spécifier l'option «-n» à ping6 car les recherches d'adresses inverses peuvent prendre du temps, ce qui est déconseillé en période de tests.
    # route6d	(sur les deux routeurs)
    # ping6 -n www.6bone.net
    
  5. Si votre réseau a des hôtes (des non-routeurs), vous pouvez demander à votre routeur de diffuser des informations. Ils pourront ainsi se configurer tout seuls. Pour cela, il vous faut renseigner le fichier /etc/rtadvd.conf et lancer le démon rtadvd(8). Notez que les annonces doivent provenir de l'amont. Dans notre cas, monrouteur A peut renseigner l'ethernet 0 et monrouteur B l'ethernet 0 et 1. Vous pouvez désactiver les annonces que monrouteur B envoie sur l'ethernet 0, car il est en aval et n'est donc pas optimum comme routeur par défaut. (mais, si vous les désactivez et que monrouteur A tombe en panne, les machines de l'ethernet 0 ne pourront plus communiquer avec celles de l'ethernet 1).
    # rtadvd ne2	(de monrouteur A à ethernet 0)
    # rtadvd tlp0 tlp1	(de monrouteur B à ethernet 0 et 1)
    
    Lancez ensuite rtsol(8) ou rtsold(8) sur les hôtes afin qu'ils puissent s'autoconfigurer.


Dans certains cas, l'amont peut vous demander une configuration différente de celle ci-dessus.

Réseau IPv6 typique - avec préfixes /48 (haut)

Si vous avez plusieurs adresse globales IPv4 statiques, vous pouvez utiliser le mécanisme 6vers4 (6to4 RFC3056) pour vos propres préfixes /48 en IPv6.

Des routeurs appelés «Relais publics de routage 6vers4» se comportent comme l'une des extrémités d'un tunnel. Il vous suffit alors de configurer l'une de vos machines comme une passerelle 6vers4, c'est à dire qu'elle encapsule les paquets IPv6 dans des paquets IPv4 avant de les envoyer vers le relais de routage (et vice versa). Si votre adresse IPv4 est x.y.z.u, votre préfixe IPv6 sera 2002:xxyy:zzuu::/48 (avec xx, yy, zz et uu, les notations exadécimales de x, y, z et u).

Si votre fournisseur d'accès ne vous a donné qu'une adresse privée (comme 10.x.x.x), vous ne pourrez malheureusement pas bénéficier de ce mécanisme. Cela ne fonctionne pas avec la traduction d'adresses (NAT).

Considérons la topologie suivante. La machine monrouteur A a l'adresse IPv4 x.y.z.u. L'adresse IPv4 de monrouteur B n'importe pas.

monrouteur A
  | IPv4 x.y.z.u
  |
==+=== ethernet 0
  |
monrouteur B
  |
==+=== ethernet 1
  1. Il faut commencer par configurer le tunnel 6vers4 sur monrouteur A. Nous choisissons le préfixe réseau IPv6 2002:xxyy:zzuu:0000::/64. Choisissez dans la liste le relais de routage 6vers4 le plus proche et spécifiez-le comme routeur par défaut (ou bien utilisez l'adresse, définie par le RFC3068, du premier relais de routage vu 2002:c058:6301:: et qui ne sera pas forcément le plus proche). Notez qu'il est impossible d'utiliser l'adresse de test ff02::1 car l'interface stf0 n'est pas multidestinataire en IPv6 (multicast). Pour des raisons de sécurité (voir la page de manuel stf(4)), l'interface stf0 n'est pas activée dans le noyau GENERIC, vous devrez en recompiler un.
    # ifconfig stf0 create		(uniquement pour après-1.5)
    # ifconfig stf0 inet6 2002:xxyy:zzuu:0000::1 prefixlen 16 alias
    # route add -inet6 default <6to4 relay router>
    
  2. Il vous faut ensuite choisir une adresse de sous réseau, issue de votre groupe d'adresses 2002:xxyy:zzuu::/48, pour vos deux segments ethernet. Comme nous avons déjà choisi 2002:xxyy:zzuu:0000::/64 pour le tunnel, cette adresse ne peut être utilisée ailleurs. Prenons 2002:xxyy:zzuu:0001::/64 et 2002:xxyy:zzuu:0002::/64.
      : tunnel 6vers4, 2002:xxyy:zzuu:0000::/64
      :
    monrouteur A
      | IPv4 x.y.z.u
      |
    ==+=== ethernet 0: 2002:xxyy:zzuu:0001::/64
      |
    monrouteur B
      |
    ==+=== ethernet 1: 2002:xxyy:zzuu:0002::/64
    
  3. Il vous reste enfin à retourner à la précédente section pour configurer monrouteur B, le routage RIPng ainsi que les informations de routage.

Résoudre les noms du DNS avec IPv6 (haut)

Pour vous trouver en environnement totalement IPv6 (sans IPv4), vous devez contacter un serveur de nom IPv6. C'est facile : mettez simplement des adresses IPv6 dans resolv.conf(5). Si vous voulez lancer un serveur de noms prêt au transport IPv6, essayez bind9. Exemple de configuration :
nameserver 3ffe:501:4819::42

Cette adresse cache un serveur de noms IPv6 fonctionnel, n'hésitez pas à l'essayer.

Relais traducteur avec FAITH TCP (haut)

Il n'est pas possible de directement communiquer entre un client uniquement IPv6 et un serveur uniquement IPv4 ou vice versa. Il faut passer par un équipement appelé «traducteur».

La distribution NetBSD comprend le relais traducteur TCP faithd(8) qui permet aux clients uniquement IPv6 (ou IPv4/v6) de contacter des serveurs uniquement IPv4 en utilisant TCP IPv6. Combiné au serveur DNS mandataire totd, vous pouvez installer un environnement de traduction IPv6-IPv4 de cette façon :
+--IPv6 seul------------+
|                       |
|client                 |
|IPv6  == IPv6 ===> traducteur ----- IPv4 -->	serveurs 
|seul     tcp         avec faithd(8)   tcp          IPv4 seul
|                       |
+-----------------------+
Pour la mise en place, référez-vous à la documentation suivante.

IPv6 passant par des routeurs IPv4 uniquement ou NAT (haut)

Si votre entreprise ne possède que des routeurs IPv4-seul, des routeurs NAT ou tout autre chose qui fasse directement obstacle au réseau IPv6, vous pouvez vous en sortir de la façon suivante. Choisissez la solution la plus adaptée à vos besoins :

Difficultés (haut)

Comme IPv6 est encore en enfance, apparaissent des lacunes de spécifications et des façons de faire non-standards. L'implémentation IPv6 de KAME tente d'y remédier.

Sans rapport avec les spécifications, voici des points à prendre en compte :

Où poser des questions ? (haut)

Si vous avez des questions, n'hésitez pas à les poser à la liste de diffusion tech-net ou à users@ipv6.org. Si vous posez une question concernant votre configuration, soyez VRAIMENT sûr de joindre un diagramme de votre réseau. Sans cela, personne ne ne pourra deviner votre mise en place.

Maintenance (haut)

Autres applications (haut)

Les programmes suivants, présents dans le système de base, reconnaissent IPv6 : finger(1), fstat(1), ftp(1), netstat(1), rlogin(1), rsh(1), systat(1), telnet(1), tftp(1), whois(1), faithd(8), fingerd(8), ftpd(8), ifconfig(8), inetd(8), lpd(8) (et ses compagnons), mld6query(8), mtrace6(8), ndp(8), pim6dd(8), pim6sd(8), ping6(8), pppd(8), rdate(8), rip6query(8), rlogind(8), route6d(8), rshd(8), sendmail(8), syslogd(8), tcpdchk(8) (et ses compagnons), telnetd(8), tftpd(8), traceroute6(8), trpt(8) .

RPC et NFS reconnaissent désormais IPv6.

Un nombre croissant de paquetages sont aussi prêts pour IPv6.

Si vous voulez qu'un logiciel tierce soit en mesure de gérer IPv6, peut-être existe-t-il un correctif à lui appliquer. L'internet regorge de correctifs IPv6.


Retour vers la Documentation NetBSD : Le réseau
Accueil
Accueil Documentation

(Nous contacter) $NetBSD: index.html,v 1.13 2006/06/22 15:49:10 jschauma Exp $
Copyright © 1998-2003 par la Fondation NetBSD, Inc. TOUS DROITS RÉSERVÉS.