This HOWTO explains how to configure OpenWrt to:
The Freebox is a popular Internet modem/router delivered by French ISP Free to its customers.
The original post can be found on the forum.
The Freebox is available only in France, therefore this documentation is written in French.
Tous les modèles de Freebox, en zone dégroupée, sont compatibles avec l'adressage IPv6. Depuis 2019 et les dernières mises à jour des freebox (4.0), l'IPv6 est même activé par défaut.
Ne sont pas compatibles
qui sont livrées en zone non dégroupée.
Chaque Freebox peut fournir 8 délégations d'IPv6 en classe 64, soit 2^64 adresses IPv6 (1,844674407×10¹⁹). La délégation en mode automatique n'est pas officiellement documentée par Illiad et nous avons ouvert un ticket d'incident pour demander plus d'informations.
La freebox offre une connectivité native IPv6 aux machines clients, ainsi qu'un parefeu natif (primitif). Le but de ce tutoriel est de déporter le routage, la gestion d'IPv6 et le parefeu sur un routeur OpenWrt, après avoir configuré la freebox en mode bridge au préalable. Il est assumé que vous avez réglé votre freebox sur bridge puique vous voulez utiliser un autre routeur, sous OpenWRT !
Même si le mode bridge est activé, la freebox reste un routeur IPv6, sur lequel il faudra configurer un NextOP (“le routeur suivant”) depuis son interface.
Le schéma souhaité est le suivant : Internet ⇔ Freebox IPv6 (délégation /64) ⇔ OpenWrt (adresses /128) ⇔ Clients Windows, Linux, Mac OSX (adresses /128)
Tickets Free.fr :
Ce tutoriel a été fait sous OpenWrt 19.07.2, installé sur un PC x64 (pour avoir une grande réactivité lors des tests), puis reporté avec succès sur deux modèles différents de routeur Netgear. Les réglages à faire seront décrits dans l'interface Luci (en anglais toutefois).
Des informations très utiles ont été récupérées à cette adresse Activer IPv6 pour votre réseau bridge avec une Freebox où l'auteur configure l'IPv6 d'une freebox avec un routeur OPNsense. Il a suffit de transposer le paramétrage à OpenWrt.
Il faut dans un premier temps récuperer quelques informations sur la freebox et le routeur OpenWrt. Dans un navigateur, ouvrir deux onglets, l'un avec l'interface de la freebox (http://mafreebox.freebox.fr), l'autre avec OpenWrt (192.18.1.1 par défaut). Il va falloir copier des paramètres de l'un à l'autre.
Dans l'interface mafreebox.free.fr, aller dans paramètres de la freebox, configurations IPv6.
fe80::xxxx:xxxx:xxxx:xxxx.2a01:xxxx:xxxx:xxxx::/64 et repérer la case nexthop qu'il faudra compléter plus loin.Sur le routeur
network, interfaces, wan6, et noter l'interface réseau (écrite en tout petit sous WAN6), par exemple eth0.2.ifconfig. Rechercher le bloc correspondant à l'interface réseau du wan6 par exemple ici eth0.2.# ifconfig eth0.2 Link encap:Ethernet HWaddr 14:59:C0:xx:xx:xx inet addr:78.xx.xx.xxBcast:78.xx.xx.xx Mask:255.255.255.0 inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link inet6 addr: 2a01:xxxx:xxxx:xxxx::2/128 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1276639 errors:0 dropped:0 overruns:0 frame:0 TX packets:973419 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:974080650 (928.9 MiB) TX bytes:136214886 (129.9 MiB)
inet6 addr avec un Scope:Link. Elle est du type fe80::xxxx:xxxx:xxxx:xxxx.
Revenir sur l'interface Freebox, compléter la case nexthop avec la valeur précédente de inet6 addr, de type fe80::xxxx:xxxx:xxxx:xxxx.
la Freebox connaît maintenant l'adresse du prochain routeur, qui est OpenWrt.
WAN6
network, interfaces, wan6, cliquer sur edit.General Settings, Protocol, mettre Static adress puis cliquer sur switch protocol.IPv6 assignment length sur disabled.IPv6 adress à 2a01:xxxx:xxxx:xxxx::2 (la Freebox se mettra d'elle même en 2a01:xxxx:xxxx:xxxx::1)gateway avec l'adresse de lien IPv6 de la freebox de type fe80::xxxx:xxxx:xxxx:xxxx.LAN
network, interfaces, lan, cliquer sur edit.DHCP server, IPv6 settings.Routeur Advertisement Service sur server mode.DHCPv6-Service et NDP-Proxy sur disabled.Always announce default routeur.Vérification
Network, Diagnostic, et vérifier qu'il est possible de pinger la Freebox 2a01:xxxx:xxxx:xxxx::1 et OpenWrt 2a01:xxxx:xxxx:xxxx::2# ping6 2a01:xxxx:xxxx:xxxx::1 PING 2a01:xxxx:xxxx:xxxx::1(2a01:xxxx:xxxx:xxxx::1) 56 data bytes 64 bytes from 2a01:xxxx:xxxx:xxxx::1: icmp_seq=1 ttl=64 time=0.355 ms 64 bytes from 2a01:xxxx:xxxx:xxxx::1: icmp_seq=2 ttl=64 time=0.368 ms 64 bytes from 2a01:xxxx:xxxx:xxxx::1: icmp_seq=3 ttl=64 time=0.332 ms
# ping6 2a01:xxxx:xxxx:xxxx::2 PING 2a01:xxxx:xxxx:xxxx::2(2a01:xxxx:xxxx:xxxx::2) 56 data bytes 64 bytes from 2a01:xxxx:xxxx:xxxx::2: icmp_seq=1 ttl=64 time=0.351 ms 64 bytes from 2a01:xxxx:xxxx:xxxx::2: icmp_seq=2 ttl=64 time=0.318 ms 64 bytes from 2a01:xxxx:xxxx:xxxx::2: icmp_seq=3 ttl=64 time=0.338 ms
Cela signifie que les machines sont bien visibles en local.
A ce stade, nous avons obtenu une délégation d'IPV6 et configuré le routeur OpenWrt. Il nous reste maintenant à connecter une première machine à notre routeur OpenWrt et configurer son IPv6 publique pour la rendre visible sur le réseau.
Il existe trois grandes méthodes :
Tous les systèmes d'exploitation ne savent pas exploiter la configuration stateful. Par exemple, Andoid requiert un adressage IPv6 stateless. Par ailleurs, ces méthodes peuvent cohabiter, de sorte qu'un routeur OpenWrt pourra fournir deux adresses ou plus à un même client. Dans le mesure du possible, on verra comment fournir UNE SEULE ADRESSE ipv6 exploitatble au client.
Nous vous recommandons de commencer par configurer au moins un poste en manuel, pour vérifier la connectivité.
La configuration manuelle permet d'assigner une seule adresse IPv6 publique. Elle est adaptée à un besoin d'auto-hébergement, lorsque vous disposez d'une connection SDSL rapide ou d'une connexion fibre optique, pour hébergement vos propres machines (ou micro-machines). C'est pour cela qu'IPv6 a été conçu ...
Dans la configuration dhcp du routeur OpenWrt, désactiver l'annonce des routes par défaut (protocole SLAAC) :
config dhcp 'lan'
#option ra 'server' # commenter pour désactiver
....
Si vous souhaitez conserver SLAAC sur votre réseau interne géré par OpenWrt, il vous faudra désactiver SLAAC sur le poste client, sinon vous recevez plusieurs adresses IPv6 supplémentaires, dont au moins une adresse stateless.
Sous Debian GNU/Linux, dans le fichier /etc/syscrt.conf :
net.ipv6.conf.eth0.accept_ra=0
Activer avec :
$sysctrl -p
Il faut ensuite configurer :
Exemples :
Ajouter au fichier : /etc/networking/config:
auto eth0 iface eth0 inet6 static address 2a01:e35:87d8:xxxx::3 # <= Adresse IPV6 publique netmask 64 gateway fe80::5642:49ff:fe87:xxxx # <= Adresse IPV6 locale du routeur OpenWrt
Alternativement, si vous utilisez Gnome Network Manager, le gestionnaire de réseau de l'environnement Gnome :
Créer un profil nommé “IPv6” et indiquer les information suivantes :
Adresse manuelle: Adresse : 2a01:e35:87d8:xxxx::3 Préfixe : 64 Passerelle : fe80::5642:49ff:fe87:xxxx
La configuration stateless est une méthode d'attribution d'adresse IPv6 adaptée à un petit réseau local, selon une méthode automatique.
Les adresses IPv6 sont générées automatiquement en ajoutant le sous réseau /32 et l'adresse matérielle MAC. La configuration stateless met en oeuvre le protocole SLAAC (RAs). Toute machine connectée au routeur en DHCPv6 est alors automatiquement configurée.
Cette méthode est critiquée, car un attaquant peut mettre en relation l'adresse MAC de votre machine et son adresse IPV6, qui devient prévisible. A partir d'une base de données des vulnérabilité, il est possible par un simple ping de repérer des machines vulnérables sur un réseau.
Il est possible de contourner ce problème en activant les extensions privées d'IPv6 (ipv6 privacy extensions) sur chacun des postes clients. Il ne nous a pas été possible d'activer ces extensions sous OpenWrt.
Sur le routeur OpenWrt, activer le serveur DHCP et le protocole SLAAC. Fichier /etc/config/dhcp :
config dhcp 'lan'
option ra 'server'
option dhcpv6 'server'
option ra_management '0' # Default value is 1
#0 means stateless only,
#1 means stateless + stateful (default)
#2 means stateful only
L'option dhcpv6 'server' fait tourner DNSmasq en tant que serveur DHCP sur le réseau local 'lan'.
L'option ra 'server' indique que la diffusion des routes est assurée par la protocole SLAAC (RAs). Il s'agit en fait du démon odhcpd.
L'option ra_management indique s'il s'agit de configurer en stateless ('0'), en statefull ('2'), ou les deux ('1'). La valeur par défaut est '1' (les deux). Pour se limiter à une adresse stateless et éviter la diffusion d'une deuxième adresse stateful, on limite la configuration au stateless :
option ra_management '0'
Sur le poste client, par exemple Debian GNU/Linux :
On active les IPv6 temporaires dans le fichier le fichier /etc/sysctl.conf :
net.ipv6.conf.eth0.use_tempaddr=2 net.ipv6.conf.eth0.temp_prefered_lft=7200
Ensuite, on configure la carte réseau sous DHCPv6 :
allow-hotplug eth0 iface eth0 inet dhcp privext 2 # On demande le niveau 2 d'anonymisation des connexions iface eth0 inet6 auto
Examinons une adresse assignée automatiquement :
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 54:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.x/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 43166sec preferred_lft 43166sec
inet6 2a01:e35:87d8:xxxx:b9fb:9712:4f55:bd55/64 scope global temporary dynamic
valid_lft 65503sec preferred_lft 6563sec
inet6 2a01:e35:87d8:xxxx:5642:49ff:xxxx:xxxx/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 65503sec preferred_lft 65503sec
inet6 fe80::5642:49ff:fe87:4f74/64 scope link
valid_lft forever preferred_lft forever
On notera que le client a reçu deux adresses IPv6 :
L'adresse temporair est utilisée pour toute connexion sortante, comme le montre un test de connexion IPv6.
L'objectif de configuration stateless est atteint.
Cette fonctionnalité est très proche de la précédents, sauf que l'on souhaite assigner l'adresse fixe 2a01:e35:xxxx:xxxx::yyyyzzzz/128.
Les baux dhcpv6 sont gérés par le démon odhcp. Le fichier /tmp/hosts/odhcpd liste les baux en cours :
# br-lan 0004901071a15f278795aa0dd83bde8bxxxx uuuuuuuu sony-vaio .....
Le bail comprend un identifiant unique, nommé duid, dans notre cas:
0004901071a15f278795aa0dd83bde8bxxxx .....
Modifier le fichier /etc/config/dhcp
config host
option name 'sony-vaio'
option ip '192.168.1.x'
option mac '54:42:49:xx:xx:xx'
option duid '0004901071a15f278795aa0dd83bde8bxxxx'
option hostid '00000003'
hostid a impérativement une longueur de 8 caractères, codés en hexadécimal. Le choix d'une valeur hexadécimale de huits caractères offre plus de protection contre un scan de sous-réseau, par exemple : 'ae441b1c'. Nous avons choisi une valeur simpe : '00000003', qui correspond à la notation abrégée IPv6 ::3.
Pour limiter l'attribution de plusieurs adresses stateless, on active uniquement l'option stateful :
option ra_management '2'
La configuration des clients est la même que pour l'option stateless.
Observons les adresses IP assignées :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 54:42:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.xx/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 43200sec preferred_lft 43200sec
inet6 2a01:e35:87d8:xxxx::3/128 scope global tentative
valid_lft forever preferred_lft forever
inet6 fe80::5642:49ff:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
L'adresse IPv6 publique est bien 2a01:e35:87d8:xxxx::3.
Par contre, il nous faut indiquer la route par défaut au routeur : fe80::5642:49ff:fe87:xxxx. J'ai posé la question au développeurs d'OpenWrt, qui vont me répondre. Et ouvert un ticket d'incident : https://dev.openwrt.org/ticket/20354
Quand vous possédez un domaine (mondomaine.org), vous pouvez déclarer chaque machine disposant d'une adresse IPv6 en ajoutant un champ “AAAA” mamachine pointant vers l'adresse ipv6 votre machine. Vous pourrez alors identifier votre machine en utilisant mamachine.mondomaine.org. Tout ceci est très similaire à IPv4.
Dans ce cas, vous pouvez utiliser la notation simplfiée : 2a01:e35:87d8:xxxx::yyy car votre machine est destinée à être accessible et par ailleurs, vous ne trahissez pas son adresse MAC.
Se connecter à votre machine:
ping6 ipv6.google.com PING ipv6.google.com(par03s12-in-x05.1e100.net) 56 data bytes 64 bytes from par03s12-in-x05.1e100.net: icmp_seq=1 ttl=57 time=28.3 ms 64 bytes from par03s12-in-x05.1e100.net: icmp_seq=2 ttl=57 time=27.0 ms 64 bytes from par03s12-in-x05.1e100.net: icmp_seq=3 ttl=57 time=27.6 ms
Votre machine peut accéder à Internet via Ipv6.
Se connecter à une machine distante (pas sur le réseau local) disposant d'une adresse IPv6, par exemple un serveur hébergé chez Online.net:
ping6 2a01:e35:87d8:xxxx::3 PING 2a01:e35:87d8:xxxx::3(2a01:e35:87d8:xxxx::3) 56 data bytes 64 bytes from 2a01:e35:87d8:xxxx::3: icmp_seq=1 ttl=58 time=32.6 ms 64 bytes from 2a01:e35:87d8:xxxx::3: icmp_seq=2 ttl=58 time=30.3 ms 64 bytes from 2a01:e35:87d8:xxxx::3: icmp_seq=3 ttl=58 time=30.5 ms
Votre machine est bien visible depuis Internet.
Se connecter à une machine distante (pas sur le réseau local) disposant d'une adresse IPv6, par exemple un serveur hébergé chez Online.net et utiliser nmap :
nmap -PN -6 2a01:e35:87d8:xxxx::3
Starting Nmap 6.47 ( http://nmap.org ) at 2015-08-13 01:58 CEST Nmap scan report for 2a01:e35:87d8:xxxx::3 Host is up (0.067s latency). All 1000 scanned ports on 2a01:e35:87d8:xxxx::3 are closed all ports are closed
Tous les ports sont bien fermés ... Clap ... clap ... clap
Le filtrage opéré par OpenWrt ne doit pas vous emêcher d'installer un firewall sur chaque machine pour restreindre les connexions. Deux protections valent mieux qu'une.
Il suffit de se connecter à une page Web de test ipv6 avec votre navigateur. Vous pourrez vérifier que votre adresse IPv6 n'est pas dérivée de vore adresse MAC.
A écrire
Par défaut, la console série d'un routeur OpenWrt est accessible sans mot de passe. Il s'agit d'une large faille de sécurité car tout attaquant avec un accès physique au routeur peut devenir root très facilement.
Attention : cela ne fonctionne pas ...
Dans le fichier /etc/inittab, remplacer:
::askconsole:/bin/ash --login
par :
::askconsole:/bin/login
J'ai ouvert un ticket: https://dev.openwrt.org/ticket/20359#ticket
Freebox :
OpenWrt :
Free offrant la délégation de plusieurs réseaux IPv6, il est possible de segmenter les réseaux en utilisant des VLAN :
Nos recommandations sont les suivantes :