Freebox en bridge, edgerouter et IPv6
Il existe plusieurs guides en lignes pour arriver à un résultat similaire (voir en bas d’article), mais chaque cas étant un peu particulier j’ai choisi de faire un retour sur le mien.
Je vais probablement écrire des bêtises ou montrer que j’ai fait des choses un peu débiles, mais je suis sûr que vous me les pointerez avec bienveillance.
Depuis les débuts de l’ADSL en France, je suis chez Free. Tout n’est pas parfait, mais j’ai toujours eu plus de raisons de rester que de partir.
J’ai la Freebox v6 « Revolution » depuis sa sortie en 2010/2011. Pendant longtemps j’ai utilisé la multitude de services : Wifi, UPnP/DLNA, passerelle DECT, stockage/seedbox, player TV/DVD/…
À une certaine période, à chaque orage je perdais ma Freebox (probablement à cause d’installations communes mal isolées) et j’ai sérieusement songé à quitter Free. Ils ne sont pas responsables des orages ni des défauts d’isolation de l’ADSL, mais l’électronique de la Freebox est notoirement peu résistante aux surtensions venant du réseau téléphonique.
J’ai donc petit-à-petit réduit ma dépendance aux services proposés, jusqu’à avoir un “vrai” routeur ainsi qu’un réseau Wifi et un système multimédia indépendants. Je n’utilise plus le DECT (plus de fixe à la maison). Par contre j’utilise encore la passerelle VoIP interne avec mon alarme qui est branchée en RJ11 sur la Freebox Server.
Je ne sais pas pourquoi mais j’ai toujours cru que passer ma Freebox Server en mode “bridge” (au lieu de “routeur”) allait me désactiver Freebox Player et la passerelle VoIP. C’est pourquoi je restais en mode “routeur” avec un double-NAT.
Aussi, mon ADSL s’est fortement dégradé dans le temps. Alors que je suis à 500m du DSLAM, mon débit max en upload s’était réduit d’environ 1 Mo/s à 450 ko/s ces derniers mois.
Très récemment (en septembre), j’ai découvert par hasard que j’étais éligible à un raccordement à la fibre optique depuis un certain temps, mais Orange qui a posé les fibres avait référencé des adresses qui n’existent pas sur le cadastre, donc les outils de tests d’éligibilité me disaient toujours d’arrêter de rêver. Il a fallu que je fouille sur les outils de l’ARCEP pour voir que j’étais éligible.
Ça a été tout un périple – je le raconterai peut-être plus tard – mais je suis raccordé à la fibre depuis début décembre.
Je dois dire d’ailleurs que le service client de Free (et la procédure de transition ADSL/Fibre) a été incroyable. J’étais resté sur des équipes sous-dimensionnées, délocalisées, limites incompétentes… Mais je constate que ça s’est énormément amélioré.
Et qu’est-ce qu’on fait quand on passe à la fibre ? On court tester à quel point ça va vite. Un copain qui héberge un “speedtest” chez lui (chez Free aussi) m’a demandé de tester la liaison entre nos deux connexions. Sauf que les services qu’il héberge ne sont accessibles qu’en IPv6 et par flemme (notamment à cause de l’empilement de routeurs chez moi) je n’avais pas fait en sorte de pouvoir faire de l’IPv6.
Après tant d’années à procrastiner, j’ai voulu faire l’effort et activer l’IPv6. Et une des approches les plus simples était de passer le Freebox Server en mode bridge. J’étais prêt à renoncer complètement au Freebox Player, mais des pages mentionnaient qu’en bidouillant un truc avec un VLAN 100… on pouvait le faire remarcher. Idem pour la passerelle VoIP qui n’était pas listée dans les services désactivés en passant en mode bridge.
Fin du contexte, début de la technique.
Lorsque la Freebox Server passe en mode bridge, elle attribue l’IP publique (probablement par DHCP) à la première machine qui la demande sur son switch ethernet.
En passant dans ce mode, j’ai perdu accès à Internet et au FreeboxOS.
Sur le switch intégré du Freebox Server j’avais aussi une sonde Atlas (86.83% d’uptime depuis avril 2012) en plus du FreePlug et de mon routeur.
Donc soit l’adresse publique a été donnée d’abord à la sonde Atlas au lieu de mon routeur, soit mon routeur n’avait pas encore refait de requête DHCP et il était resté sur son adresse locale.
J’ai eu peur d’avoir fait une belle connerie ; j’ai tout débranché du Freebox Server et rebooté mon routeur. Ça l’a forcé à refaire une requête DHCP et il a donc pris l’adresse publique. Et comme il n’avait rien changé à sa configuration de serveur DHCP, NAT… j’ai retrouvé accès à Internet et au FreeboxOS.
Pour l’accès au FreeboxOS par https://mafreebox.freebox.fr, je n’ai pas en tête le détail exact, mais je suppose que le Freebox Server intercepte les requêtes à 212.27.38.253
. En tous cas on ne perd pas l’accès quand on est mode bridge. On peut toujours revenir en arrière… C’est aussi utile pour retrouver l’adresse IPv6 du lien local (pour plus tard).
Au final, j’ai rebranché ma sonde Atlas en aval du routeur et elle remarché directement. Pour le FreePlug, j’y reviens plus tard, mais y’a pas de souci.
Pour la partie IPv6, j’ai suivi des articles à droite et à gauche mais voici en gros ma configuration (valide pour EdgeOS v2.0.9-hotfix.7
).
NB : J’ai mis des ******
à la place d’informations spécifiques et sans intérêt.
J’ai mis <IPV6-PREFIX>
qui correspond aux 4 premiers “champs” de votre bloc d’IPv6 donné par Free.
Enfin, j’ai mis <FREEBOX-IPV6-LINK-LOCAL>
pour la route statique, qui correspond à l’adresse IPv6 locale de votre Freebox Server. On récupère cette information dans FreeboxOS > Paramètres de la Freebox > Mode Avancé > Configuration IPv6 > Général
.
firewall {
all-ping enable
broadcast-ping disable
group {
network-group RFC1918 {
description "RFC1918 ranges"
network 10.0.0.0/8
network 172.16.0.0/12
network 192.168.0.0/16
}
}
ipv6-name WANv6_IN {
default-action drop
description "WAN inbound traffic forwarded to LAN"
enable-default-log
rule 10 {
action accept
description "Allow established/related sessions"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
rule 30 {
action accept
description "Allow ICMPv6"
protocol icmpv6
}
}
ipv6-name WANv6_LOCAL {
default-action drop
description "WAN inbound traffic to the router"
enable-default-log
rule 10 {
action accept
description "Allow established/related sessions"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
rule 30 {
action accept
description "Allow ICMPv6"
protocol ipv6-icmp
}
rule 40 {
action accept
description "Allow DHCPv6"
destination {
port 546
}
protocol udp
source {
port 547
}
}
}
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
name IOT_IN {
default-action accept
description ""
rule 1 {
action accept
description "Allow established/related"
log disable
protocol all
state {
established enable
invalid disable
new disable
related enable
}
}
rule 2 {
action drop
description "Drop invalid state"
log disable
protocol all
state {
established disable
invalid enable
new disable
related disable
}
}
rule 3 {
action drop
description "Block local access"
destination {
group {
network-group RFC1918
}
}
log disable
protocol all
source {
group {
}
}
}
}
name IOT_LOCAL {
default-action drop
description ""
rule 1 {
action accept
description "Allow established/related"
log disable
protocol all
state {
established enable
invalid disable
new disable
related enable
}
}
rule 2 {
action drop
description "Drop invalid state"
log disable
protocol all
state {
established disable
invalid enable
new disable
related disable
}
}
rule 3 {
action accept
description "Allow DNS"
destination {
port 53
}
log disable
protocol tcp_udp
}
rule 4 {
action accept
description "Allow DHCP"
destination {
port 67
}
log disable
protocol udp
}
}
name WAN_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
name WAN_LOCAL {
default-action drop
description "WAN to router"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
name WAN_OUT {
default-action accept
description "router to WAN"
rule 1 {
action drop
description "TV out (ethernet)"
log enable
protocol all
source {
mac-address ******
}
}
rule 2 {
action drop
description "TV out (wifi)"
log enable
protocol all
source {
mac-address ******
}
}
rule 3 {
action accept
description NTP
destination {
port 123
}
log enable
protocol udp
}
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
ethernet eth0 {
address dhcp
address fe80::1/64
description Internet
duplex auto
firewall {
in {
ipv6-name WANv6_IN
name WAN_IN
}
local {
ipv6-name WANv6_LOCAL
name WAN_LOCAL
}
out {
name WAN_OUT
}
}
speed auto
}
ethernet eth1 {
description Local
duplex auto
speed auto
}
ethernet eth2 {
description Local
duplex auto
speed auto
}
ethernet eth3 {
description Local
duplex auto
speed auto
}
ethernet eth4 {
description Local
duplex auto
poe {
output off
}
speed auto
}
loopback lo {
}
switch switch0 {
address 10.10.0.1/24
address <IPV6-PREFIX>::1/64
description Local
ipv6 {
dup-addr-detect-transmits 1
router-advert {
cur-hop-limit 64
link-mtu 0
managed-flag false
max-interval 600
other-config-flag false
prefix <IPV6-PREFIX>::/64 {
autonomous-flag true
on-link-flag true
valid-lifetime 2592000
}
reachable-time 0
retrans-timer 0
send-advert true
}
}
mtu 1500
switch-port {
interface eth1 {
}
interface eth2 {
}
interface eth3 {
}
interface eth4 {
}
vlan-aware disable
}
vif 20 {
address 10.10.20.1/24
description IOT
firewall {
in {
name IOT_IN
}
local {
name IOT_LOCAL
}
}
mtu 1500
}
}
}
protocols {
static {
route6 ::/0 {
next-hop <FREEBOX-IPV6-LINK-LOCAL> {
description Freebox
interface eth0
}
}
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name IOT {
authoritative disable
subnet 10.10.20.0/24 {
default-router 10.10.20.1
dns-server 10.10.20.1
lease 86400
start 10.10.20.2 {
stop 10.10.20.254
}
static-mapping shellyplugsg3-****** {
ip-address 10.10.20.11
mac-address ******
}
}
}
shared-network-name LAN {
authoritative enable
subnet 10.10.0.0/24 {
default-router 10.10.0.1
dns-server 10.10.0.1
domain-name ******
lease 86400
start 10.10.0.21 {
stop 10.10.0.240
}
static-mapping TV-ethernet {
ip-address 10.10.0.33
mac-address ******
}
static-mapping TV-wifi {
ip-address 10.10.0.48
mac-address ******
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
forwarding {
cache-size 500
listen-on switch0
listen-on switch0.20
}
}
gui {
http-port 80
https-port 443
older-ciphers enable
}
mdns {
reflector
}
nat {
rule 5010 {
description "masquerade for WAN"
outbound-interface eth0
type masquerade
}
}
ssh {
port 22
protocol-version v2
}
unms {
disable
}
}
system {
analytics-handler {
send-analytics-report true
}
crash-handler {
send-crash-report true
}
domain-name ******
host-name ******
login {
user ****** {
authentication {
encrypted-password ******
}
level admin
}
}
ntp {
server 0.ubnt.pool.ntp.org {
}
server 1.ubnt.pool.ntp.org {
}
server 2.ubnt.pool.ntp.org {
}
server 3.ubnt.pool.ntp.org {
}
}
offload {
hwnat enable
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone Europe/Paris
}
Je précise tout de même quelques caractéristiques de la configuration de mon routeur :
- J’utilise
eth0
pour le WAN et j’ai crééswitch0
aveceth1-4
pour le LAN. Je n’utilise pas le PoE sureth4
. - J’ai une TV connectée (à mon grand regret) à qui je refuse la sortie sur Internet à part pour le NTP (et en écrivant ces lignes je capte que cette règle ne s’applique qu’en IPv4 et pas encore en IPv6).
- J’ai un réseau Wifi spécial pour les objets connectés (car certains doivent accéder à Internet) qui tague les paquets avec le VLAN 20. Ça permet au routeur de les cantonner à un LAN spécial (séparé du LAN principal), tout en les laissant sortir sur Internet. Ça protège contre la latéralisation (depuis un object connecté on ne peut pas voir les ordis/NAS/téléphones/…).
- La plupart de mes appareils (ordis,NAS, téléphones…) ont une IP fixe dans la plage du DHCP, mais j’ai omis ça exprès. Vous n’avez pas besoin de savoir ce qu’il y a chez moi.
Avec cette configuration, j’ai bien de l’IPv6 sortant sans problème.
Il y a par contre un truc étrange ; lorsque je suis en SSH sur le routeur, un ping en IPv6 ne marche pas alors qu’il marche depuis un ordi sur le LAN. Je m’en fiche pas mal mais c’est probablement que j’ai raté quelque chose.
Il reste un détail, le Freebox Player. Même si la plupart du temps j’utilise un autre système multimédia, j’aime savoir que je peux utiliser le lecteur DVD/BluRay du Player.
J’avais noté que selon les Freebox il y avait des astuces pour faire marche le Player quand le Server est en mode bridge. Pour la Freebox « Révolution » il y a une histoire de VLAN 100.
Mais en branchant un câble ethernet (ou les FreePlugs) entre le Freebox Player et le switch intégré du Freebox Server, ça marche directement. Je n’ai eu aucune configuration à faire.
J’ai même essayé de reboot le Freebox Server et le routeur, pour vérifier si l’histoire du DHCP pour l’IP publique n’allait pas casser, mais non, c’est resté fonctionnel.
Je n’ai pas encore fait le test de l’appel sortant par mon alarme. Je brancherai un téléphone à la place pour essayer, mais j’ai toute raison de penser que c’est OK.
Quelques références utiles