Pourquoi

IPv6 est un protocole réseau destiné à remplacer le protocole IPv4. Les deux protocoles peuvent cohabiter sur le même lien.

Selon Wikipedia: « Grâce à des adresses de 128 bits au lieu de 32 bits, IPv6 dispose d'un espace d'adressage bien plus important qu'IPv4. Cette quantité d'adresses considérable permet une plus grande flexibilité dans l'attribution des adresses et une meilleure agrégation des routes dans la table de routage d'Internet. La traduction d'adresse (NAT), qui a été rendue populaire par le manque d'adresses IPv4, n'est plus nécessaire. » https://fr.wikipedia.org/wiki/IPv6

Réseau libre encourage l'utilisation de technologies qui contribuent à résoudre une problématique sur le réseau (le « mesh »), mais aussi qui soit applicable sur Internet. C'est pour cette raison que nous encourageons l'adoption d'IPv6.

Politiquement, IPv6 augmente considérablement le nombre de machines pouvant être connectées directement à Internet, tel que le réseau a été conçu initialement: point à point (sans NAT). Avec l'épuisement des adresses IPv4, les coûts d'hébergement de serveurs augmenteront, et de plus en plus d'utilisateurs seront placés derrière des services en NAT par leur fournisseur (c'est déjà le cas avec la majorité des connexions par téléphone cellulaire).

L'adoption d'IPv6 progresse sur Internet. IPv6 a été officiellement "lancé" en juin 2013 ("World IPv6 Day"), où plusieurs sites web ont officiellement rendu leurs serveurs accessibles en IPv6 (Google/Youtube, Facebook, etc.). Certains fournisseurs résidentiels, tels que Teksavvy et Vidéotron offraient déjà un service IPv6 résidentiel. Aux États-Unis, Comcast a annoncé en novembre 2013 un taux d'environ 5% de déploiement d'IPv6, avec un plan assez agressif pour accélérer le processus. IPv6 est donc un protocole stable, bien développé (depuis plus de 15 ans), clairement en voie d'adoption, mais où souvent les opérateurs ne perçoivent pas l'urgence d'adopter IPv6.

Pour Réseau libre, un autre avantage d'utiliser IPv6 est qu'il est plus facile pour les participants d'obtenir un préfixe réseau, soit par leur fournisseur d'accès à Internet, par Tunnel Broker ou par un préfixe « unique local » dans un bloc géré par Réseau libre (voir "Obtenir un bloc d'adresses IP" ci-dessous). En IPv4, les connexions résidentielles ont parfois une adresse IPv4 statique, mais rarement un bloc réseau statique (généralement un frais supplémentaire de 10$/mois). En IPv4, on peut assigner un bloc réseau dans les adresses privées telles que 192.168.x.x, 172.16.x.x, 10.x.x.x, mais ces adresses ne sont pas garanties d'êtres uniques dans tout le réseau (de Réseau libre), et force les participants à ré-assigner de nouvelles adresses à leur réseau.

En IPv6, notre script d'auto-configuration (setup_reseaulibre) obtient un préfixe réseau IPv6 de notre bloc « unique local » à partir du wiki (numbering, et ce bloc est annoncé sur le réseau local (avec radvd), ainsi que sur le mesh (avec babel). Ce bloc est assuré d'être unique non seulement sur le mesh, mais même sur d'autres réseau (ex: si jamais Réseau libre connecte un VPN avec un autre mesh dans une autre ville). De plus, puisque le bloc est "annoncé" par le routeur qui participe au mesh, toutes les machines sur le même segment de réseau se configureront automatiquement une adresse (stateless autoconfiguration) dans ce bloc, et pourront accéder au mesh. En IPv6, on peut annoncer plusieurs blocs/routes de cette façon, contrairement à IPv4 où généralement il y a un seul serveur DHCP par réseau.

Réactions fréquentes à IPv6

  • « Les adresses IPv6 sont longues et difficiles à mémoriser »: oui, effectivement. On mémorise rarement les adresses en IPv6 comme on le faisait, par exemple, avec 192.168.1.1. Ceci dit, il y avait quand même des limites au nombre d'adresses IPv4 que l'on pouvait mémoriser. On utilise généralement un serveur DNS. De plus, on peut utiliser les adresses « link local » en IPv6 pour découvrir les adresses avoisinantes, si jamais le DNS ne fonctionne pas ("ping6 -c 2 ff02::1%eth0; ip -6 neigh show"). Sur le mesh, on peut aussi utiliser "babelstatus" pour voir les autres routeurs accessibles.

  • « L'absence de NAT augmente les risques de sécurité »: c'est faux. En fait, NAT n'est pas un mécanisme de sécurité, mais uniquement de traduction des adresses IPv4. L'absence de pare-feu (firewall) pourrait quand même exposer vos machines derrière un NAT. La meilleure solution est un pare-feu. En IPv6, on recommande de bloquer les connexions entrantes par défaut, et d'ouvrir manuellement les ports selon les besoins (ex: pour les serveurs). Le script setup_reseaulibre configure le pare-feu par défaut pour éviter d'exposer un réseau local sur le mesh.

Pré-requis

Cette page explique les concepts fondamentaux de la configuration IPv6. Le minimum de cette configuration est effectué automatiquement par le Firmware Réseau Libre

Installer les modules et utilitaires IPv6 (depuis OpenWRT Barrier Breaker, ceci est activé par défaut):

opkg update
opkg install kmod-ipv6 ip kmod-ip6tables ip6tables

Il n'est pas nécessaire de redémarrer. Les interfaces physiques (br-lan, wlan0, etc) devraient déjà afficher une adresse « link-local ».

Adresses link-local

Les adresses link-local sont automatiquement configurées par le système d'exploitation. Elles permettent aux machines sur le même lien physique (ethernet, wifi) de se parler, sans avoir besoin de mécanisme d'assignation des adresses.

ifconfig
wlan0     Link encap:Ethernet  HWaddr 00:15:12:34:56:78  
          inet6 addr: fe80::215:6dff:fe72:1234/64 Scope:Link

Les adresses link-local sont toujours préfixées de fe80. On dit fe80::/64, car les premiers 64 bits servent à désigner le réseau (fe80, suivi de zéros, sur 64 bits), auquel un suffixe est auto-assigné par le système d'exploitation, en se basant sur l'adresse MAC de la carte (« stateless configuration »). https://en.wikipedia.org/wiki/Link-local_address

Pour découvrir les autres machines sur le réseau local:

Envoyer un ping multicast:

ping6 -I wlan0 ff02::1

Puis afficher les voisins:

ip -6 neigh show
fe80::215:6dff:fe71:1234 dev wlan0 lladdr 00:15:6d:71:37:ea DELAY
fe80::f66d:4ff:fe54:2345 dev wlan0 lladdr f4:6d:04:54:3e:28 DELAY

On peut maintenant faire un ping directement à une de ces machines:

ping6 -I wlan0 fe80::f66d:4ff:fe54:2345

Se connecter par ssh:

ssh foo@fe80::f66d:4ff:fe54:2345%wlan0

Ou les transfers scp:

scp test.txt foo@\[fe80::f66d:4ff:fe54:2345%wlan0\]:

Dans les exemples ci-dessus on a spécifié l'interface réseau (wlan0). Les adresses sont locales (non-routables), donc le système d'exploitation ne saura pas nécessairement par quelle interface envoyer les données. Cependant, si on vient de faire un ping multicast et que l'adresse est encore dans la cache du système, on n'a pas besoin de spécifier l'interface.

Forcer la découverte de routeurs et autres appareils sur le réseau:

rdisc6 eth0

Configurer un routeur

Il est possible de configurer votre machine comme un "routeur", c'est à dire qu'il s'annonce sur le réseau et distribue des adresses, un peu comme un serveur DHCP en IPv4. Ceci se fait avec le service radvd:

opkg install radvd

After choosing a network (see below), configure a static IP address:

uci set network.lan.ip6addr=fd64:2c08:9fa7:1::2/64

Finally the following will make sure that clients can autoconfigure:

uci set radvd.@interface[0].ignore=0
uci set radvd.@prefix[0].ignore=0
uci set radvd.@prefix[0].AdvRouterAddr=1
uci set radvd.@prefix[0].prefix=fd64:2c08:9fa7:1::2/64
/etc/init.d/radvd enable

You could also replace the above by the following to make the LAN interface autoconfigure if there is another router present:

    uci set network.lan.accept_ra=1
    uci set network.lan.send_rs=1

Make sure the IPv6 firewall is enabled:

uci set firewall.defaults.disable_ipv6=0

Commit changes and reboot:

uci commit ; reboot & exit

To enable routing, make sure this is in your /etc/sysctl.conf:

net.ipv6.conf.all.forwarding=1

Other howtos

Obtenir un bloc d'adresses IP

Par votre fournisseur d'accès à Internet

Si votre fournisseur Internet en amont le supporte (ex: Teksavvy), c'est possible d'avoir une connexion IPv6 native (dual-stack avec ipv4). Par exemple, Teksavvy offre un block /56, ce qui permet d'avoir 256 sous-réseaux de beaucoup de machines (256 * /32). On peut donc prendre un de ces sous-réseaux et l'annoncer par babel sur le mesh.

Electronic Box sur DSL supporte aussi IPv6 depuis décembre 2013: http://www.dslreports.com/forum/r28841642-IPv6-slowly-making-it-s-way-to-eBox

Sinon, contactez quand même votre fournisseur pour leur dire que IPv6 est important pour vous. C'est un enjeu politique!

Par Tunnel Broker

C'est possible d'avoir un tunnel par "Tunnel Broker" (un service gratuit de Hurricane Electric, he.net). http://tunnelbroker.net/ Par défaut, Tunnel Broker assigne un /64 (pour un seul sous-réseau), mais on peut demander un /48 en un clic. Voir les références ci-dessous pour plus d'information.

Avec un block d'adresses privées "unique-local" (ULA)

En IPv6, les adresses privées du genre 192.168.x.x ne sont plus recommandées, car ça rend la fusion de réseaux difficiles. Par exemple, si on connecte en VPN deux réseaux privés, il y a un risque que les deux réseaux aient utilisé 192.168.1.1 pour leur routeur.

La méthode suggérée en IPv6 est donc de s'assigner un bloc d'adresses privé ("unique-local", "ULA") sous fd::/8. Voir numbering pour plus d'information.

Réseau libre utilise le bloc fd64:2c08:9fa7::/48. Vous pouvez donc vous assigner un bloc /64 dans cet espace.

Pour choisir un bloc libre:

  • voir: numbering et choisir un bloc libre.
  • inscrire votre bloc dans la page wiki de votre noeud (utiliser le template, ou voir comment les autres noeuds font)

Pourquoi avoir un bloc d'IP routable sur Internet?

  • Permet d'avoir un seul ensemble d'adresses IPs qui sont annoncées autant sur Internet que sur le Mesh.
  • Évite d'avoir à assigner une adresse de plus à toutes les machines qui sont sur le réseau, ou d'avoir à gérer des schémas d'assignations statiques d'adresses privées (ex: 172.16.x.x, 192.168.x.x ou fd64::/16).
  • Permet d'utiliser des DNS publics pour la résolution de noms de domaines. Ex: www.bidon.ca est accessible avec la même adresse IPv6 par Internet ainsi que par le mesh.

Références