Pour info, j'ai réussi à obtenir des beaux DHCP ipv6 (PD) + ipv4 avec LEDE 17.01.4 (dernier en date) sur un TP-Link WDR3400, sur un nouvel abonnement sosh mobile + livebox fibre. Je n'ai pas la TV: cette config ne fournit qu'internet.
Le WDR3400 dispose d'un unique port CPU connecté à un switch supportant les VLAN. Il faut donc configurer son switch pour que le port WAN (port #1) et le port CPU (port #0) soient capables de transporter les VLANs, c'est à dire en mode trunk.
Pour configurer les clients DHCP v6 et v4, j'ai capturé les requêtes émises par la livebox (livebox play) en connectant son port WAN à celui d'un PC et ai capturé les trames avec tcpdump:
tcpdump -pns0 -ieth0 -evXx ether host yy:yy:yy:yy:yy:yy and multicast
.
J'ai ensuite édité les différents fichiers de configuration pour que les requêtes DHCP s'approchent au maximum de ce que la livebox envoie.
Je n'ai pas eu besoin de modifier les priorités Ethernet pour obtenir des réponses DHCP.
Voici ce que j'ai dans /etc/config/network:
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan'
option type 'bridge'
option ifname 'eth0.1'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '64'
config interface 'wan6'
option ifname 'eth0.832'
option proto 'dhcpv6'
option macaddr 'yy:yy:yy:yy:yy:yy'
option mtu '1500'
config interface 'wan4'
option ifname 'eth0.832'
option macaddr 'yy:yy:yy:yy:yy:yy' # livebox mac address
option proto 'dhcp'
option peerdns '1'
option broadcast '1'
option vendorid 'sagem'
option reqopts '1 3 6 15 28 51 58 59 90 119 120 125'
# 0x4d: user class, "FSVDSL_livebox.Internet.softathome.livebox3"
# 0x5a: authentication (140 hex chars, 70 bytes)
# 0x3d: client identifier (livebox mac address)
# Remplacez les valeurs de ces trois options par celles émises par votre livebox. C'est de l'hexa, maj/minuscule n'a pas d'importance mais les chaines doivent être rigoureusement identiques.
option sendopts '0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 0x5a:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 0x3d:01yyyyyyyyyyyy'
option mtu '1500'
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '2 3 4 5 0t'
config switch_vlan
option device 'switch0'
option vlan '2'
option vid '832' # internet VLAN
option ports '1t 0t' # le port CPU et le port WAN sont en trunk: le switch passe les trames *avec* le tag vlan des deux côtés.
Remplacez les 'y' par l'adresses MAC de votre livebox et les 'z' par le reste de la chaine d'authentification envoyée par votre livebox (140 caractères soit 70 bytes).
Note: on clone l'adresse MAC de la livebox sur le vlan 832.
Avec cette config et après un ifdown wan4 && ifup wan4, j'obtiens un bail DHCPv4.
Pour ipv6, c'est un peu plus compliqué : le client DHCPv6 (odhcp6c) de LEDE 17.04.1 ne supporte pas les options arbitraires mais il a été mis à jour dans les versions de développement (
https://git.openwrt.org/?p=project/odhcp6c.git;a=commit;h=510aaf6d528210c5e8a6159f9b80b32615e88c5f). Sur une install 17.04.1 à jour, on peut l'installer assez facilement de la facon suivante:
- dans /etc/opkg/distfeeds.conf, rajoutez la source snapshot de votre architecture.
Par exemple, pour le WDR3400 (mipsel), la ligne ressemble à ca:
src/gz reboot_base_snapshots http://downloads.lede-project.org/snapshots/packages/mipsel_24kc/base
- mettez à jour l'index des packages puis installez la nouvelle version d'odhcp6c:
opkg update
opkg upgrade odhcp6c
- retirez ou commentez la ligne reboot_base_snapshots précédemment ajoutée dans /etc/opkg/distfeeds.conf,
- éditez le fichier /lib/netifd/proto/dhcpv6.sh et remplacez la commande proto_run_command et ses options par:
proto_run_command "$config" odhcp6c \
-s /lib/netifd/dhcpv6.script \
-Nnone -P0 -R -f -a -r11,17,23,24 -x 15:FSVDSL_livebox.Internet.softathome.livebox3 \
-x 11:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz -x 16:0000040e0005736167656d $iface
}
En clair:
- on passe les options 11, 15 et 16 avec -x opt:val,
- on demande les options 11,17,23 et 24 au serveur avec -r,
- on désactive la demande d'options non-spécifiées ci-dessus avec -R,
- on demande un préfixe mais pas d'adresse avec respectivement -P0 et -Nnone,
- on désactive l'envoi d'un hostname avec -f,
- on désactive le support de l'opcode reconfigure avec -a.
L'option 15 est user-class et doit contenir la même valeur que pour DHCPv4. Elle est cependant écrite en ASCII ici et non en hexa comme précédemment.
L'option 16 est le vendor id (sagem).
L'option 11 est votre chaine d'authentification. Ma livebox n'èmet pas la même chaine en v6 et en v4, vérifiez ce qu'envoie la votre avec tcpdump ou wireshark.
Espérons qu'il soit possible de spécifier toutes ces options dans /etc/config/network dans les prochaines versions, ca serait bien plus propre.
Après un ifdown wan6 && ifup wan6, votre routeur devrait obtenir un préfixe /56 et allouer le premier /64 à votre LAN.
Comme les règles de firewalling installées par défaut me semblent trop complexes, je désactive toujours fw3 sur mon routeur et utilise un script contenant des règles perso:
#!/bin/sh
WAN=eth0.832
LAN=br-lan
IP4T=iptables
IP6T=ip6tables
#ip6
$IP6T -F
$IP6T -X
$IP6T -P INPUT DROP
$IP6T -P OUTPUT DROP
$IP6T -P FORWARD DROP
$IP6T -A INPUT -i lo -j ACCEPT
$IP6T -A INPUT -i $LAN -p icmpv6 -m limit --limit 100/s -j ACCEPT
$IP6T -A INPUT -i $LAN -p udp --dport 53 -j ACCEPT
$IP6T -A INPUT -i $LAN -p tcp --dport 53 -j ACCEPT
$IP6T -A INPUT -i $LAN -p tcp --dport 22 -j ACCEPT
$IP6T -A INPUT -i $WAN -p icmpv6 -s fe80::/10 -d fe80::/10 -m limit --limit 100/s -j ACCEPT
$IP6T -A INPUT -i $WAN -p icmpv6 -m limit --limit 100/s -j ACCEPT
$IP6T -A INPUT -i $WAN -p udp -d fe80::/10 --sport 547 --dport 546 -j ACCEPT
$IP6T -A INPUT -i $WAN -m state --state RELATED,ESTABLISHED -j ACCEPT
$IP6T -A OUTPUT -o lo -j ACCEPT
$IP6T -A OUTPUT -o $LAN -j ACCEPT
$IP6T -A OUTPUT -o $WAN -p icmpv6 --icmpv6-type port-unreachable -j DROP
$IP6T -A OUTPUT -o $WAN -p icmpv6 -j ACCEPT
$IP6T -A OUTPUT -o $WAN -p udp --dport 547 --sport 546 -j ACCEPT
$IP6T -A OUTPUT -o $WAN -p udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IP6T -A OUTPUT -o $WAN -p udp --dport 123 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IP6T -A FORWARD -i $WAN -o $LAN -j ACCEPT
$IP6T -A FORWARD -i $LAN -o $WAN -j ACCEPT
$IP6T -t mangle -F
$IP6T -t mangle -X
#ip4
$IP4T -F
$IP4T -X
$IP4T -P INPUT DROP
$IP4T -P OUTPUT DROP
$IP4T -P FORWARD DROP
$IP4T -A INPUT -i lo -j ACCEPT
$IP4T -A INPUT -i $LAN -p udp --dport 53 -j ACCEPT
$IP4T -A INPUT -i $LAN -p tcp --dport 53 -j ACCEPT
$IP4T -A INPUT -i $LAN -p tcp --dport 22 -j ACCEPT
$IP4T -A INPUT -i $LAN -p udp --sport 68 --dport 67 -j ACCEPT
$IP4T -A INPUT -i $LAN -p icmp -m limit --limit 100/s -j ACCEPT
$IP4T -A INPUT -i $WAN -m state --state RELATED,ESTABLISHED -j ACCEPT
$IP4T -A OUTPUT -o lo -j ACCEPT
$IP4T -A OUTPUT -o $LAN -j ACCEPT
$IP4T -A OUTPUT -o $WAN -p udp --dport 53 -j ACCEPT
$IP4T -A OUTPUT -o $WAN -p udp --sport 68 --dport 67 -j ACCEPT
$IP4T -A FORWARD -i $WAN -o $LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
$IP4T -A FORWARD -i $LAN -o $WAN -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IP4T -F -t mangle
$IP4T -F -t nat
$IP4T -t nat -A POSTROUTING -o $WAN -j MASQUERADE
Attention: ce script part du principe que vous utilisez SSH pour administrer votre routeur. Il n'ouvre pas le port 443/tcp de l'interface web luci.
Un petit test de perf rapide sur bouygues.testdebit.info donne 200Mb/s en download, 100Mb/s en upload, en ethernet. La charge CPU d'environ 60%, on doit donc pouvoir faire un peu mieux. ipv6 est plus rapide qu'ipv4, ce qui n'est pas surprenant vu que le routeur ne NAT pas.
Bien sur, ce n'est pas clé en main pour ipv6, mais on peut avoir une connexion dualstack sur un routeur LEDE sans passer par une livebox.