Ce tutoriel propose de remplacer la Livebox par un routeur sous
DD-WRT.
+ Internet IPv4 / IPv6 + TV.
– Pas de support du téléphone qui nécessiterait que l'on garde la Livebox (derrière le routeur).
Cette configuration est actuellement compatible avec les routeurs basés sur
Broadcom, Qualcomm / Atheros, Marvell, les principaux donc.
La différence entre ces plateformes provient de la manière dont est faite la configuration des VLANs sous DD-WRT.
Il faut un routeur équipé d'un processeur relativement puissant pour profiter pleinement d'un lien WAN 1 Gbps.
Quelques chiffres
à partir de ce post, n'hésitez pas à partager les vôtres (méthode en fin de tutoriel).
Etape 0, prérequis :Comme seul matériel nécessaire l'
ONT fibre Orange (ou le
SFP fibre Orange + un
convertisseur cuivre), le routeur DD-WRT, éventuellement le décodeur TV.
/!\ Si votre Livebox n'était initialement pas fournie avec un boitier ONT, et que vous en avez récupéré un auprès d'Orange,
pensez à le faire activer.
Connectez l'ONT fibre au port WAN du routeur DD-WRT.
Connectez si vous souhaitez vous en servir le décodeur TV à l'un des ports LAN du routeur DD-WRT.
Assurez vous que DD-WRT soit dans une version récente, au minimum la r39137 (
ici ou
là) (historique des développements
ici).
Et effectuez une remise à 0 des paramètres, pour partir initialement sur de bonnes bases (*).
Dans l'onglet DD-WRT Administration / Factory Defaults :
– Reset router settings / Restore Factory Defaults : yes
+ Apply Settings
(*) Dans de rares cas certains ont pu avoir besoin de faire un reset plus large, méthode disponible dans les 2/3 posts
ici.
Vous allez avoir besoin de connaître l'interface physique WAN, repérée wanif dans la suite du tutoriel.
Dans l'onglet DD-WRT Setup / Networking, si WAN Port Assignment :
- a pour valeur vlan..., alors il s'agit de eth0
- a une autre valeur (eth0, eth1, ...), alors il s'agit de cette valeur (eth0, eth1, ...)
- n'a pas de valeur, alors il s'agit sans doute de eth0
Etape 1, configuration de base du routeur :Dans l'onglet DD-WRT Setup / Basic Setup :
– Connection Type : DHCP Authentication (*)
– Shortcut Forwarding Engine : Enable (**)
– Static DNS 1/2/3 : éventuellement, les serveurs de noms de votre choix
+ Apply Settings
(*) La configuration des options DHCP requises par Orange est faite par le script de démarrage (60/16, 61/1, 77/15 et 90/11 pour DHCP v4/v6).
(**) Permet une amélioration significative des débits WAN <-> LAN,
tant que la QoS n'est pas activée.
Cette fonctionnalité SFE a été développée par Qualcomm / Atheros, mais elle est générique.
Elle est comparable au
Software Flow Offloading, que DD-WRT pourrait proposer avec son kernel
4.14 /
4.19.
Quant au Hardware Flow Offloading, peu de CPU / SoC le supportent. Cela dit, le SFE et le Software Flow Offloading font parfaitement l'affaire !
Etape 2, configuration IPv6 :Dans l'onglet DD-WRT Setup / IPV6 :
– IPv6 : Enable
– IPv6 Type : DHCPv6 with Prefix Delegation
– MTU : 1500
+ Apply Settings
Etape 3, configuration du VLAN Internet :Dans l'onglet DD-WRT Setup / Networking :
– Tagging / Add / VLAN 0 Interface : wanif / Tag Number : 832 / Prio : 0
+ Apply Settings
– Port Setup / WAN Port Assignment : wanif.832 (*)
+ Apply Settings
Dans l'onglet DD-WRT Setup / Basic Setup :
– Use VLAN Priority : yes (**)
+ Apply Settings
L'assignation du port WAN au VLAN 832 est faite par le script de démarrage, car elle dépend de la plateforme et peut ne pas être disponible au travers de l'interface graphique.
(*) L'option (voire la page) peut mettre quelques instants à être disponible, le temps que DD-WRT créé le nouveau VLAN. Il suffit simplement de rafraichir.
(**) Permet la configuration de la CoS (priorité) 6 requise par Orange pour les requêtes DHCP, détails donnés plus bas.
Etape 4, TOS / DSCP :Positionnement du TOS à 0x00 pour l'ensemble des paquets afin d'éviter
d'éventuels problèmes de débits, détails donnés plus bas.
Dans l'onglet DD-WRT Security / Firewall :
– Filter TOS/DSCP : yes
+ Apply Settings
Etape 5, support TV, configuration du VLAN TV :Dans l'onglet DD-WRT Setup / Networking :
– Tagging / Add / VLAN 1 Interface : wanif / Tag Number : 840 / Prio : 5
+ Apply Settings
– Network Configuration wanif.840 / Bridge Assignment : Unbridged / Masquerade NAT : Disable / IP Address : 192.168.255.254 / Subnet Mask : 255.255.255.255
+ Apply Settings
L'assignation du port WAN au VLAN 840 est faite par le script de démarrage, car elle dépend de la plateforme et peut ne pas être disponible au travers de l'interface graphique.
Etape 6, support TV, pré-configuration du serveur DHCP :Dans l'onglet DD-WRT Services / Services :
– Additional DNSMasq Options :
conf-file=/tmp/dnsmasq.livebox.conf+ Apply Settings
La configuration des options DHCP requises par le(s) décodeur(s) TV est faite par le script de démarrage (serveurs DNS Orange et option 125).
Etape 7, support TV, autorisation du multicast :Dans l'onglet DD-WRT Security / Firewall :
– Filter Multicast : no
+ Apply Settings
L'activation d'IGMPproxy est faite par le script de démarrage.
Etape 8, support TV, IGMP Snooping & Multicast to Unicast :Activation de l'IGMP Snooping, afin d'éviter de polluer les interfaces non concernées (WiFi notamment).
Dans l'onglet DD-WRT Setup / Networking :
– Create Bridge / br0 / IGMP Snooping : On
+ Apply Settings
Il peut également être intéressant d'activer le Multicast to Unicast, afin d'éviter de polluer les ports Ethernet non concernés. Les flux sont ainsi dirigés vers les bons décodeurs uniquement.
Dans l'onglet DD-WRT Setup / Networking :
– Multicast To Unicast : Enable (au moins donc pour l'interface correspondant aux ports Ethernet)
+ Apply Settings
Dans le cas où vous n'activez pas le Multicast to Unicast, et si vous connectez vos décodeurs TV par l'intermédiaire d'autres switchs, il peut être bien qu'ils supportent l'IGMP Snooping, afin d'éviter de polluer leurs autres ports. Quelques références de matériel
ici.
Etape 9, script de démarrage :Dans l'onglet DD-WRT Administration / Commands :
– Command Shell / Commands : script ci dessous, personnalisez les informations utilisateur au début (laissez
macdecodeur= si vous n'utilisez pas de décodeur TV)
+ Save Startup
### Version 21 20190310
### https://lafibre.info/remplacer-livebox/tuto-remplacer-la-livebox-par-un-routeur-dd-wrt-internet-tv/
### Informations utilisateur
# Identifiant de connexion, sur le contrat Orange
user=fti/abcdefg
# Mot de passe de connexion, sur le contrat Orange
pass=hijklmn
# Adresse MAC de la Livebox, sous la Livebox
maclivebox=01:23:45:67:89:AB
# Version de la Livebox, 3 ou 4
verlivebox=3
# Numero de serie de la Livebox, sous la Livebox
serlivebox=ABCDE0123456789
# Adresse MAC du/des decodeur(s) TV, sous le(s) decodeur(s) TV
macdecodeur=01:23:45:67:89:CD,01:23:45:67:89:EF
# Serveurs DNS1,DNS2 Orange, si DD-WRT en utilise d'autres
dnsorange=
### Detection type switch et interface / port WAN
wanif=$(nvram get wan_default | sed 's/^vlan[0-9][0-9]*$/eth0/; s/^$/eth0/')
wanvid=2
swconfswitch=$(swconfig list | awk '/^Found:/ {print $2; exit}')
if [[ "$swconfswitch" ]]
then
if [[ "$(swconfig dev $swconfswitch get enable_vlan)" == "1" ]]
then
wanprt=$(swconfig dev $swconfswitch vlan $wanvid show |
awk '$1=="ports:" {print substr($2,1,1)"t "substr($3,1,1)"t"}')
fi
else
wanprt=$(cat /proc/switch/$wanif/vlan/$wanvid/ports |
awk '/\d/ {print substr($1,1,1)"t "substr($2,1,1)"t"}')
fi
### Debug
{
echo === DEBUG START ===
echo; echo === Router model
nvram get DD_BOARD
nvram get os_version
uname -a
echo; echo === before: swconfig
swconfig list
echo; echo === before: swconfig vlan config
swconfig dev $swconfswitch show
echo; echo === before: /proc number of vlans
ls -lR /proc/switch/*/vlan | wc -l
echo; echo === before: /proc/switch/
ls -l /proc/switch/
echo; echo === before: /proc vlan config
grep . /proc/switch/*/vlan/*/ports
echo; echo === before: wan_default
nvram get wan_default
echo; echo === detect: wanif $wanif
echo; echo === detect: wanprt $wanprt
} >>/tmp/debugorange.log 2>&1
### Options DHCP
tohex() {
for h in $(echo $1 | sed "s/\(.\)/\1 /g")
do
printf "%02x$2" \'$h
done | sed "s/$2$//"
}
maclivebox=$(echo $maclivebox | tr '[a-z]' '[A-Z]')
r=$(openssl rand -base64 12)
c=$(openssl rand -base64 1 | cut -c 1)
o60=sagem
o16=$o60
o61=01${maclivebox//:/}
o01=000300$o61
o77=+FSVDSL_livebox.Internet.softathome.Livebox$verlivebox
o15=${o77:1}
o90=00000000000000000000001a0900000558010341
o90=${o90}010d$(tohex $user)
o90=${o90}3c12$(tohex $r)
o90=${o90}0313$(tohex $c)$(printf $c$pass$r | md5sum | cut -c1-32)
o11=$o90
[[ "$(nvram get dhcpc_vendorclass)" != "$o60" ]] && reboot=1
nvram set dhcpc_vendorclass=$o60
[[ "$(nvram get dhcp_clientid)" != "$o61" ]] && reboot=1
nvram set dhcp_clientid=$o61
[[ "$(nvram get dhcp_userclass)" != "$o77" ]] && reboot=1
nvram set dhcp_userclass=$o77
[[ "$(nvram get dhcp_authentication)" == "" ]] && reboot=1
nvram set dhcp_authentication=$o90
[[ "$(nvram get dhcp6c_vendorclass)" != "$o16" ]] && reboot=1
nvram set dhcp6c_vendorclass=$o16
[[ "$(nvram get dhcp6c_clientid)" != "$o01" ]] && reboot=1
nvram set dhcp6c_clientid=$o01
[[ "$(nvram get dhcp6c_userclass)" != "$o15" ]] && reboot=1
nvram set dhcp6c_userclass=$o15
[[ "$(nvram get dhcp6c_authentication)" == "" ]] && reboot=1
nvram set dhcp6c_authentication=$o11
### VLAN 832 (Internet) sur le port WAN
if [[ "$wanprt" ]]
then
if [[ "$swconfswitch" ]]
then
swconfig dev $swconfswitch vlan $wanvid set vid 832
swconfig dev $swconfswitch vlan $wanvid set ports "$wanprt"
swconfig dev $swconfswitch set apply
else
echo $wanprt >/proc/switch/$wanif/vlan/832/ports
echo >/proc/switch/$wanif/vlan/$wanvid/ports
fi
brctl delif br0 vlan$wanvid
vconfig rem vlan$wanvid
fi
brctl delif br0 $wanif
### Support TV, VLAN 840 sur le port WAN
if [[ "$wanprt" ]] && [[ "$macdecodeur" ]]
then
if [[ "$swconfswitch" ]]
then
swconfig dev $swconfswitch vlan 3 set vid 840
swconfig dev $swconfswitch vlan 3 set ports "$wanprt"
swconfig dev $swconfswitch set apply
else
echo $wanprt >/proc/switch/$wanif/vlan/840/ports
fi
fi
### Support TV, IGMPproxy
if [[ "$macdecodeur" ]]
then
[[ "$(nvram get tvnicfrom)" != "$wanif.840" ]] && reboot=1
nvram set tvnicfrom=$wanif.840
fi
### Support TV, options DHCP
if [[ "$macdecodeur" ]]
then
f=/tmp/dnsmasq.livebox.conf
if [[ "$dnsorange" ]]
then
echo dhcp-option=tag:decodeur,option:dns-server,$dnsorange >>$f
fi
if [[ "$serlivebox" ]]
then
serlivebox=$(echo $serlivebox | tr '[a-z]' '[A-Z]')
echo -n dhcp-option=tag:decodeur,125,00:00:0d:e9:24:
echo -n 04:06:$(tohex ${maclivebox//:/} : | cut -c 1-17):
echo -n 05:0f:$(tohex ${serlivebox} :):
echo 06:09:$(tohex Livebox :):20:$(tohex $verlivebox)
fi >>$f
for mac in ${macdecodeur//,/ }
do
echo dhcp-host=$mac,set:decodeur >>$f
done
stopservice dnsmasq
sleep 5
startservice dnsmasq
fi
### Reboot
nvram commit
[[ "$reboot" == 1 ]] && reboot
### Debug
sleep 90
{
echo; echo === after: swconfig vlan config
swconfig dev $swconfswitch show
echo; echo === after: /proc vlan config
grep . /proc/switch/*/vlan/*/ports
echo; echo === after: vlan maps
cat /proc/net/vlan/$wanif.*
echo; echo === after: ifconfig
ifconfig -a | sed 's/\(inet6* addr:......\).*/\1.../'
echo; echo === after: bridge
brctl show br0
echo; echo === after: udhcpc
ps ww | grep udhcpc | grep -v grep | sed 's/\( -x 0x..:......\)[^ ]*/\1.../g'
echo; echo === after: dhcp6c
ps ww | grep dhcp6c | grep -v grep
echo; echo === after: dhcp6c config
cat /tmp/dhcp6c.conf | sed 's/\(send raw-option ......\).*/\1.../g'
echo; echo === after: dnsmasq
ps ww | grep dnsmasq | grep -v grep
echo; echo === after: igmprt
ps ww | grep igmprt | grep -v grep
echo; echo === after: igmprt config
cat /tmp/igmpproxy.conf
echo; echo === DEBUG END ===
} >>/tmp/debugorange.log 2>&1
Etape 10, fin :Reboot
Terminé !
Debug, pour aider en cas de problème :Patientez au moins 2 minutes après un éventuel redémarrage du routeur.
Dans l'onglet DD-WRT Administration / Commands :
– Command Shell / Commands :
cat /tmp/debugorange.log+ Run Commands
Et postez le résultat (qui doit finir par
=== DEBUG END ===), entre 2 balises
[code] [/code] afin que ça reste lisible.
Test de débit :Rendez vous sur
https://www.speedtest.net/fr.
En connexion filaire bien entendu, pas en Wi-Fi.
Puis faites un test en choisissant "Connexions Unique" (un seul flux de données ouvert, pour tester les capacités du routeur par flux).
Et un test en choisissant "Connexions Multi" (plusieurs flux de données ouverts en parallèle, pour tester le débit max du routeur).
A noter que selon le serveur choisi et sa latence (son ping), les résultats peuvent pas mal fluctuer... If faut donc tester.
Vous pouvez poster / partager les résultats, par exemple :
Netgear WNDR3700 v4
Unique : 414 / 230
Multi : 825 / 300Détails firewall :A titre d'information, voici les règles firewall automatiquement mises en place par les différentes options DD-WRT pour la connexion Orange.
### Interface physique WAN ($wanif)
eval $(nvram get rc_startup | grep "^wanif=")
### Priorite / CoS pour Internet (fait par l'option "Use VLAN Priority")
# File 0 (par defaut) pour le DHCP (en raw-socket), file 1 pour le reste du trafic
vconfig set_egress_map $wanif.832 0 6
vconfig set_egress_map $wanif.832 1 0
### On classe le trafic Internet dans les bonnes files (fait par l'option "Use VLAN Priority")
# Tout le trafic priorite 1 (CoS 0), SFE actif donc outgoing + incoming
iptables -t mangle -A POSTROUTING -o $wanif.832 -j MARK --set-mark 0x100000
ip6tables -t mangle -A POSTROUTING -o $wanif.832 -j MARK --set-mark 0x100000
iptables -t mangle -A PREROUTING -i $wanif.832 -j MARK --set-mark 0x100000
ip6tables -t mangle -A PREROUTING -i $wanif.832 -j MARK --set-mark 0x100000
iptables -t mangle -A POSTROUTING -m mark --mark 0x100000 -j CLASSIFY --set-class 0:1
ip6tables -t mangle -A POSTROUTING -m mark --mark 0x100000 -j CLASSIFY --set-class 0:1
# DHCP (en kernel-socket)
iptables -t mangle -A POSTROUTING -o $wanif.832 -p udp --dport 67 -j CLASSIFY --set-class 0:0
ip6tables -t mangle -A POSTROUTING -o $wanif.832 -p udp --dport 547 -j CLASSIFY --set-class 0:0
### On fixe le TOS des paquets, SFE actif donc outgoing + incoming (fait par l'option "Filter TOS/DSCP")
iptables -t mangle -A POSTROUTING -m mark --mark 0x100000 -j TOS --set-tos 0x00
ip6tables -t mangle -A POSTROUTING -m mark --mark 0x100000 -j TOS --set-tos 0x00
WiFi :Bien que ce ne soit pas l'objet du tutoriel, voici le manuel des sections WiFi
Atheros et
Broadcom.
Utile comme point de départ pour un éventuel ajustement de la configuration de base.
Note :Testé et approuvé sur différents routeurs Broadcom, Qualcomm / Atheros, Marvell...
Libre cours aux modérateurs (et autres) à ajuster ce tutoriel en fonction des besoins / changements à venir etc...