La Fibre

Datacenter et équipements réseaux => Routeurs => Orange fibre Remplacer la LiveBox par un routeur => Discussion démarrée par: xavier66 le 28 juillet 2018 à 15:35:06

Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: xavier66 le 28 juillet 2018 à 15:35:06
Ayant changé de routeur, je ne peux plus maintenir ce tuto. N'hésitez pas à poster des améliorations/corrections en réponses, ou me contacter pour que je mette un lien vers une version mise à jour.

J'utilise le firmware Tomato by shibby sur mon routeur D-Link DIR868L, qui me permet de laisser la livebox dans le grenier pour me connecter a Sosh. Suite a la baisse de debits PPPoE (https://lafibre.info/remplacer-livebox/baisse-de-debit-avec-routeur-depuis-la-hausse-de-debit-automatique/), je suis passé aujourd'hui en DHCP ipv4, voici comment j'ai fait.

Attention: nous allons devoir faire des changements bas-niveau, sauvegardez vos paramètres et assurez-vous de savoir faire un reset de la configuration de votre routeur en cas de mauvaise manipulation.

Paramètres DHCP

Tomato utilise udhcpc de busybox (https://udhcp.busybox.net/README.udhcpc), qui permet d'ajouter des options arbitraires, dont les fameuses options 77 et 90 (https://blog.jbfavre.org/2016/01/25/Remplacer-livebox-orange-configuration-routeur-mikrotik/) dont nous avons besoin pour se connecter. En suivant le tuto sur le nouveau format (https://lafibre.info/remplacer-livebox/cacking-nouveau-systeme-de-generation-de-loption-90-dhcp/) et en regardant l'aide de udhcpd, les options a ajouter a la commande udhcpd sont donc:

-O 0x4d -O 0x5a -x 0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a:00000000000000000000001a0900000558010341010d6674692fxxxxxxxxxxxxxx
(les xxxxxxxxxxxxxx sont à remplacer par votre identifiant en hexa, cf tuto original)

Tomato a un champ DHCPC Options dans la configuration avancée DHCP, mais malheureusement sa taille est trop petite pour ce que nous devons lui passer. Il va donc falloir ruser, en appelant udhcpc depuis un script. Nous voulons donc que le script suivant soit appelé par l'init:

exec busybox udhcpc -O 0x4d -O 0x5a -x 0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a:00000000000000000000001a0900000558010341010d6674692fxxxxxxxxxxxxxx "$@"
Les vétérans du shell n'auront pas de souci pour comprendre la syntaxe. Pour les autres, on demande d'exécuter (exec) le module udhcpd de busybox (busybox udhcpc) avec nos options personnalisées, puis les autres options que le système nous passera ("$@").


Remplacement de /sbin/udhcpc

C'est la manipulation "dangereuse" du tuto. Nous allons devoir faire en sorte que l'init utilise notre script perso au lieu du lien symbolique /sbin/udhcpc. Comme il n'y a pas de configuration pour spécifier quel binaire appeler pour le client dhcp, nous allons devoir directement remplacer le fichier. Le système de fichier étant en lecture seule, nous allons réaliser les manipulations suivantes:
Cela se traduit par le script suivant, a copier dans le script init, dans l'écran Administration > Scripts

cp -R /sbin/ /tmp/sbin
rm /tmp/sbin/udhcpc
echo 'exec busybox udhcpc -O 0x4d -O 0x5a -x 0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a:00000000000000000000001a0900000558010341010d6674692fxxxxxxxxxxxxxx "$@"' > /tmp/sbin/udhcpc
chmod +x /tmp/sbin/udhcpc
mount --bind /tmp/sbin/ /sbin

Sauvegardez les options, redémarrez et vérifiez par ssh/telnet que /sbin/udhcpc est bien notre script et plus le lien symbolique vers busybox.

Paramètres VLAN

Le trafic passe sur le VLAN 832, il faut donc mettre l'interface WAN/eth0 sur ce VLAN. Cela se passe dans Advanced > VLAN:

(https://i.imgur.com/ipc4NpS.png)

Activation du DHCP

Dans Basic > Network, mettez l'interface WAN en DHCP:

(https://i.imgur.com/6anktUA.png)

Profit !

Après avoir sauvegardé les paramètres, votre routeur va lancer la requête DHCP. Vous pouvez confirmer la prise d'une IP dans l'écran Overview. Et un petit speedtest pour la route:

(https://www.speedtest.net/result/7509264098.png)
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: cetipabo le 28 juillet 2018 à 16:02:42
Tomato a un champ DHCPC Options dans la configuration avancée DHCP, mais malheureusement sa taille est trop petite pour ce que nous devons lui passer. Il va donc falloir ruser, en appelant udhcpc depuis un script.
Bonjour,
super tuto, merci !

Par contre il n'y a pas moyen de modifier tout simplement la page web de l'interface de façon à accepter plus de caractères dans le formulaire ?
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: xavier66 le 28 juillet 2018 à 16:17:10
Bonjour,
super tuto, merci !

Par contre il n'y a pas moyen de modifier tout simplement la page web de l'interface de façon à accepter plus de caractères dans le formulaire ?

Merci ! Les routeurs ciblés par Tomato n'ont qu'une faible quantité de stockage disponible pour la configuration (sur un chip NVRAM ou un bout de l'EEPROM stockant le firmware), parfois juste 32ko. Je pense que la limitation vient donc de la définition du champ dans le format de stockage, pas de l'UI en elle-même. Il devrait être possible de modifier les sources du firmware pour modifier la taille de ce champ (en en supprimant / réduisant d'autres), mais c'est encore plus acrobatique que ma manipulation  :o
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: Flo_77 le 28 juillet 2018 à 22:09:16
Sympa comme config! Par contre ça marche sans donner la prio 6 au trafic DHCP sortant? (il me semble ne pas l'avoir vu)
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: xavier66 le 29 juillet 2018 à 14:38:49
Sympa comme config! Par contre ça marche sans donner la prio 6 au trafic DHCP sortant? (il me semble ne pas l'avoir vu)

Merci !

En effet, ceci n'a pas été nécessaire pour mon cas. De ce que j'ai pu lire, cela dépend des zones ? Je suis en ZTD avec point de mutu en pied d'immeuble.
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: warnershoot le 24 octobre 2018 à 13:34:31
Bonjour,

J'ai suivi le tuto, mais mon routeur tomato n'obtient jamais d'IP.

Voici le processus actif pendant le renew (j'ai masqué mon num fti hexa) :

Citer
root@tomato:/tmp/home/root# ps w | grep dhcp
busybox udhcpc -O 0x4d -O 0x5a -x 0x4d 2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a 00000000000000000000006674692f<mon num fti> -i vlan832 -b -s dhcpc-event -H tomato -O 33 -O 121 -O 249 -m -p /var/run/udhcpc-wan.pid

J'ai vu que certains parlaient de classe 6 sur le traffic sortant DHCP, à quoi ça correspond ?

Quelques infos sur mon firmware tomato : Tomato Firmware 1.28.0000 -3.5-140 K26ARM USB AIO-64K

Merci d'avance !
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: xavier66 le 24 octobre 2018 à 19:57:07
Orange a changé ses options DHCP, il faut que je mette à jour le tuto. En attendant, je te laisse regarder les détails sur le topic https://lafibre.info/remplacer-livebox/cacking-nouveau-systeme-de-generation-de-loption-90-dhcp/

Voici ce qui fonctionne chez moi: 0x5a:00000000000000000000001a0900000558010341010d6674692f<mon num fti>
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: warnershoot le 24 octobre 2018 à 20:22:18
Merci ça fonctionne  :D
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: benoqkuke le 08 novembre 2018 à 00:02:28
Salut,

Je viens d'être fibré Orange et j'ai un R7000 sous Advanced Tomato 3.5-140 (la derniere version). J'arrive a me connecter sans souci en PPPoE mais impossible de me connecter en DHCP. Mon probleme c'est qu'en PPPoE je n'ai "que"  100Mb descendant au lieu de 300.
Vous parliez de la classe 6 du DHCP sortant, c'est quoi exactement ça ? ça pourrait expliquer que je n'arrive pas a me connecter en DHCP ?

Merci d'avance !
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zoc le 08 novembre 2018 à 06:15:01
Antibes = CoS obligatoire sinon pas d'IP.

Par CoS, on parle de 802.1p (priorité au niveau VLAN), pas DSCP => Les requêtes DHCP doivent avoir une priorité 802.1p à 6. Si le routeur ne le supporte pas, alors le plus simple est d'intercaler un switch supportant DiffServ entre le routeur et l'ONT et de le configurer pour faire le marquage.
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: benoqkuke le 08 novembre 2018 à 07:56:04
Ok merci pour la confirmation qu'il faut activer le CoS sur Antibes.
C'est une option a activer dans Tomato ou ça devrait etre activer de base si mon routeur le supporte ?
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zoc le 08 novembre 2018 à 08:26:30
C'est du très spécifique Orange, tout comme l'authentification par l'option 90 d'ailleurs.

Après, tomato c'est Linux en dessous, donc ça doit être faisable avec iptables comme sur une Debian ou autre firmware basé sur Linux (comme dd-wrt, voir le sujet dédié)...
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: xavier66 le 09 novembre 2018 à 08:57:33
C'est une option a activer dans Tomato ou ça devrait etre activer de base si mon routeur le supporte ?

Dans mon investigation, je n'ai pas trouvé comment gérer la QoS DHCP via l'interface tomato. J'imagine qu'il va donc falloir faire de l'iptables à la main. Tu devrais pouvoir rajouter ces instructions dans le script init.
N'hésite pas à partager ton progrès pour que je mette à jour le tuto !
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: benoqkuke le 11 novembre 2018 à 22:54:44
En repartant des scripts de DD-WRT que j'ai un peu modifié:

Init:

user=fti/abcdefg
pass=hijklmn
maclivebox=01:23:45:67:89:AB
verlivebox=3

### Modification du client DHCP pour prise en compte des options Orange

cp -a /sbin /tmp/sbin_rw
mkdir /tmp/sbin
ln -s /bin/busybox /tmp/sbin/udhcpc
rm /tmp/sbin_rw/udhcpc

cat << \EOF > /tmp/sbin_rw/tohex
#!/bin/sh
for h in $(echo $1 | sed "s/\(.\)/\1 /g")
do
  printf "%2502x$2" \'$h
done | sed "s/$2$//"
EOF

maclivebox=$(echo $maclivebox |  tr '[a-z]' '[A-Z]')
cat << EOF > /tmp/sbin_rw/udhcpc
#!/bin/sh
if echo \$* | grep vlan832
then
  r=GPJD0Qqwe5EuiiNy
  s=3c12\$(tohex \$r)0313\$(tohex \${r:15})
  h=\$(echo -n \${r:15}$pass\$r | md5sum | cut -c1-32)
  exec /tmp/sbin/udhcpc \$* \\
  -x 0x3c:\$(tohex sagem) \\
  -x 0x3d:01${maclivebox//:/} \\
  -x 0x4d:\$(tohex +FSVDSL_livebox.Internet.softathome.Livebox$verlivebox) \\
  -x 0x5a:00000000000000000000001a0900000558010341010d\$(tohex $user)\$s\$h
fi
exec /tmp/sbin/udhcpc \$*
EOF

chmod +x /tmp/sbin_rw/tohex
chmod +x /tmp/sbin_rw/udhcpc
mount -o bind /tmp/sbin_rw /sbin

### Restart du client DHCP sur le VLAN 832 (et de dnsmasq)

service wan stop
service wan start

Attention: dans tohex on souhaite printf "%02x$2" \'$h mais l'interface semble interpreter le %02 (peut etre un bug de AdvancedTomato) et le modifie printf "^Bx$2" \'$h. Il faut donc entrer   printf "%2502x$2" \'$h pour que %25 soit interpreter en %
  r=GPJD0Qqwe5EuiiNy devrait etre aleatoire mais openssl ne semble pas avoir la fonction rand chez moi => il faut que je trouve comment le remplacer

Et firewall: 

### Version 16 20181010
### https://lafibre.info/remplacer-livebox/tuto-remplacer-la-livebox-par-un-routeur-dd-wrt-internet-tv/

### Priorite / CoS pour Internet

# File 0 (par defaut) pour le DHCP (raw-socket), file 1 pour le reste du trafic
vconfig set_egress_map vlan832 0 6
vconfig set_egress_map vlan832 1 0

### On classe le trafic Internet dans les bonnes files

# Tout le trafic priorite 1 (CoS 0)
iptables -t mangle -A POSTROUTING -j CLASSIFY --set-class 0000:0001

# Client DHCP non raw-socket (pas le cas de udhcpc) mais sert aussi pour le renew
iptables -t mangle -A POSTROUTING -o vlan832 -p udp --dport 67 -j CLASSIFY --set-class 0000:0000

J'arrive a me connecter en DHCP et j'ai mes 300MBs.

Seul 1 problème persiste:
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 07 janvier 2019 à 19:38:07
Salut et merci pour ce tuto,

Je suis un peu newbie dans le firmware tomato, cela fonctionne très bien en PPOE sauf le débit évidemment ...

Par contre je rencontre 2 difficulteés:
1- Comment faire pour sauvegarder le fichier /sbin/udhcp ? a chaque reboot, le binaire reviens en lieu et place du mount.
2- pour la commande qui alimente ce fameux fichier, je dois uniquement convertir mon identifiant fti/xxxx ? ou je dois coller mon mot de passe également et convertir le tout en héxa ?

Merci pour vos lumières !
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 07 janvier 2019 à 21:33:44
Je continue mes recherches, ça pourra servir au prochain passages sur ce forum:
Mon Routeur (Netgear R7000) avec tomato a besoin d'une mémoire externe pour avoir de la mémoire persistante, et nécessite un lancement de script d'init pour lancer éditer un fichier de configuration.

@benoqkuke j'ai tester ton script, il fonctionne parfaitement bien, et de nouvelle questions me viennent à l'esprit:
1- Comment être sur que le script sera joué avant la connexion ?
2- Si je le lance à la main, doit-il fonctionner ?

Merci :)
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 08 janvier 2019 à 20:00:18
En repartant des scripts de DD-WRT que j'ai un peu modifié:

Init:

user=fti/abcdefg
pass=hijklmn
maclivebox=01:23:45:67:89:AB
verlivebox=3

### Modification du client DHCP pour prise en compte des options Orange

cp -a /sbin /tmp/sbin_rw
mkdir /tmp/sbin
ln -s /bin/busybox /tmp/sbin/udhcpc
rm /tmp/sbin_rw/udhcpc

cat << \EOF > /tmp/sbin_rw/tohex
#!/bin/sh
for h in $(echo $1 | sed "s/\(.\)/\1 /g")
do
  printf "%2502x$2" \'$h
done | sed "s/$2$//"
EOF

maclivebox=$(echo $maclivebox |  tr '[a-z]' '[A-Z]')
cat << EOF > /tmp/sbin_rw/udhcpc
#!/bin/sh
if echo \$* | grep vlan832
then
  r=GPJD0Qqwe5EuiiNy
  s=3c12\$(tohex \$r)0313\$(tohex \${r:15})
  h=\$(echo -n \${r:15}$pass\$r | md5sum | cut -c1-32)
  exec /tmp/sbin/udhcpc \$* \\
  -x 0x3c:\$(tohex sagem) \\
  -x 0x3d:01${maclivebox//:/} \\
  -x 0x4d:\$(tohex +FSVDSL_livebox.Internet.softathome.Livebox$verlivebox) \\
  -x 0x5a:00000000000000000000001a0900000558010341010d\$(tohex $user)\$s\$h
fi
exec /tmp/sbin/udhcpc \$*
EOF

chmod +x /tmp/sbin_rw/tohex
chmod +x /tmp/sbin_rw/udhcpc
mount -o bind /tmp/sbin_rw /sbin

### Restart du client DHCP sur le VLAN 832 (et de dnsmasq)

service wan stop
service wan start

Attention: dans tohex on souhaite printf "%02x$2" \'$h mais l'interface semble interpreter le %02 (peut etre un bug de AdvancedTomato) et le modifie printf "^Bx$2" \'$h. Il faut donc entrer   printf "%2502x$2" \'$h pour que %25 soit interpreter en %
  r=GPJD0Qqwe5EuiiNy devrait etre aleatoire mais openssl ne semble pas avoir la fonction rand chez moi => il faut que je trouve comment le remplacer

Et firewall: 

### Version 16 20181010
### https://lafibre.info/remplacer-livebox/tuto-remplacer-la-livebox-par-un-routeur-dd-wrt-internet-tv/

### Priorite / CoS pour Internet

# File 0 (par defaut) pour le DHCP (raw-socket), file 1 pour le reste du trafic
vconfig set_egress_map vlan832 0 6
vconfig set_egress_map vlan832 1 0

### On classe le trafic Internet dans les bonnes files

# Tout le trafic priorite 1 (CoS 0)
iptables -t mangle -A POSTROUTING -j CLASSIFY --set-class 0000:0001

# Client DHCP non raw-socket (pas le cas de udhcpc) mais sert aussi pour le renew
iptables -t mangle -A POSTROUTING -o vlan832 -p udp --dport 67 -j CLASSIFY --set-class 0000:0000

J'arrive a me connecter en DHCP et j'ai mes 300MBs.

Seul 1 problème persiste:
  • Avoir un générateur aléatoire de chaine de char

En respectant ton script d'init et ton script firewall à la lettre, ca ne fonctionne pas :( ai-je loupé une étape ?
L'adresse mac de la livebox est mandatory ?
Merci pour ta réponse :)
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 09 janvier 2019 à 00:06:31
J'ai finalement réussi en mixant deux parties du tuto:

N°1 dans tomato administration > script > onglet init:

cp -R /sbin/ /tmp/sbin
rm /tmp/sbin/udhcpc
echo 'exec busybox udhcpc -O 0x4d -O 0x5a -x 0x4d:2b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 -x 0x5a:00000000000000000000001a0900000558010341010d6674692fxxxxxxxx "$@"' > /tmp/sbin/udhcpc
chmod +x /tmp/sbin/udhcpc
mount --bind /tmp/sbin/ /sbin


Pour obtenir les 'xxx' a remplacer rendez vous ci: https://jsfiddle.net/kgersen/45zudr15/embedded/result/
renseignez votre identifiant en fti/xxxx
récupérer uniquement les chiffre après "2f" et enlever les ':' entre chaque groupe de nombres.

N°2 dans tomato administration > script > onglet firewall utilisé la partie de benoqkuke:
### Version 16 20181010
### https://lafibre.info/remplacer-livebox/tuto-remplacer-la-livebox-par-un-routeur-dd-wrt-internet-tv/

### Priorite / CoS pour Internet

# File 0 (par defaut) pour le DHCP (raw-socket), file 1 pour le reste du trafic
vconfig set_egress_map vlan832 0 6
vconfig set_egress_map vlan832 1 0

### On classe le trafic Internet dans les bonnes files

# Tout le trafic priorite 1 (CoS 0)
iptables -t mangle -A POSTROUTING -j CLASSIFY --set-class 0000:0001

# Client DHCP non raw-socket (pas le cas de udhcpc) mais sert aussi pour le renew
iptables -t mangle -A POSTROUTING -o vlan832 -p udp --dport 67 -j CLASSIFY --set-class 0000:0000


N°3 dans tomato:
Dans Basic > network choisissez DHCP
Dans Advanced > VLAN fait comme l'image en première page (vlan 1 et vlan 832)

rebooter et le tour est joué !

Merci !
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: johnx102 le 17 avril 2019 à 11:45:19
Bonjour a tous, je viens de tester la solution proposer a la fin de ces post par zethis..
J'ai enfin un ipv4 en dhcp sur tomato .
Par contre je soulève 3 problème,
 le port wan sur lequel je branche l'ont devient le port ethernet 4 a la fin du déroulement de ce tutoriel quand j'ai la connection. en soit c'est pas gênant mais pkoi ne clignote il plus en tant que wan mais eth 4 ?
Ensuite je n'ai pas l'air d'avoir d'IPV6, quand je lance les site de test je suis a 0
Enfin je suis désormais plafonné en debit a 500 Mbit, lors qu'avant je plafonné dans les 900 quand sur le meme routeur j'étais sous dd wrt ...
Merci pour vos piste et votre aide !!
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 25 avril 2019 à 10:26:20
Salut !
Je ne vais pas pouvoir t'aider plus que ça, je suis passer chez free en fibre.
De plus j'etais chez sosh avant ça et je n'ai jamais eu plus de débit que le 300/300Mbps proposé chez sosh :(
Titre: TUTO - Mode DHCP sur firmware Tomato
Posté par: zethis le 05 mars 2022 à 18:41:59
Hello, je déterre le sujet, ayant déménagé, je suis retourné chez Sosh, pas moyen d'obtenir une IPV4 publique avec mon ancienne configuration, quelque chose à changer coté infra orange ou coté Fresh Tomato ?

Merci :)