Skyduino:~#
Articles
Autre, programmation, projet, tutoriel

[Hack] Routeur WRT54GL + OpenWRT + Arduino/FTDI basic

Bonjour tout le monde !

Aujourd’hui je vous ai préparé un article qui change un peu de l’ordinaire !
On va parler routeurs, je dirai même plus, on va parler routeurs Linksys !

Je ne pense pas avoir à vous présenter, le on ne peut plus célèbre, routeur Linksys WRT54GL, maitre incontesté du hack de routeur, seigneur du bidouillage, et grand maitre du firmware DD-WRT.
Pour certain c’est un routeur « magique » qui permet de faire des hotspot professionnel en quelques clics, pour d’autres c’est une magnifique passerelle réseau, mais pour les hackers que nous sommes c’est un petit bijou ne demandant qu’as être bricolé !

Précision importante : Mon routeur est un WRT54GL en version hardware 1.1.

Pour ceux qui n’aurez jamais vu un WRT54GL deleur vie voila à quoi ça ressemble.
Je suis sur que vous avez déja vu cette forme et cette couleur quelques par avant, que se soit dans un épisode de south park (ou il incarne « le grand routeur de l’internet ») ou dans divers articles/billets portant sur le hack/bidouillage.

Officiellement le WRT54GL tourne sous linux, mais le firmware Linksys de base est relativement limité.
C’est pourquoi j’ai pris une attention toute particulière à ne pas lire la doc fourni, et à installer directement le firmware DD-WRT conçu spécialement pour les WRT54Gxx :)
L’avantage du firmware DD-WRT c’est qu’il apporte énormément de fonctionnalités, et que l’on peut faire des modules kernel comme on le souhaite pour ajouter d’autre fonctionnalités maison en plus (opensource powaa!).

Il faut juste prendre la précaution de faire la mise à jour firmware Linksys -> firmware « Micro Generic » via l’interface web, puis firmware Micro -> firmware « standard » pour ne pas bricker le routeur.

Le firmware + les détails sont disponible sur le site de DD-WRT :
http://www.dd-wrt.com/wiki/index.php/Main_Page

Une fois DD-WRT installé nous voila avec un jolie routeur bleu, un bloc d’alimentation et un cable ethernet.

La prochaine étape ?

Le D E M O N T A G E ! Niark! Niark ! :)

Étape 1 : Enlever les antennes
Pour ce faire il suffit de les faire tourner en pinçant la base, c’est un pas de vis donc ça se fait sans problémes.

Étape 2 : Démonter le boitier
C’est la partie la plus compliqué … il faut pas avoir peur d’y aller comme une brute !
Il faut caler le routeur, puis pousser la face avant au niveau des deux pieds, au bout d’un moment les clips vont se défaire et la face avant va venir toute seul.
A ce stade la garantie constructeur sera annulé donc soyez sur que DD-WRT est bien fonctionnel, et que le routeur n’as pas de défauts sinon ce sera foutu aprés ;)

Humm … ça donne envie tout cette électronique ! Voyons un peu ce qu’il y a sous le capot !

Tout d’abord il y a processeur Broadcom BCM5352, tournant à 200 MHz, ce qui est suffisant pour faire tourner un petite distribution linux.
Il peut aussi supporter un overclocking à 250MHz en étant bien refroidi (via un duo ventirad + ventilateur externe).

Ensuite nous avons une puce ram de 16Mo, juste suffisante pour faire tourner linux et ses services.
Certaines personnes on réussi l’exploit de changer cette puce par un puce de plus grande capacité afin de booster les performances du systéme.
Le maximum possible est de 64Mo de ram, mais il faut avoir le matériel pour changer la puce, sinon c’est une opération plus que délicate …

Dans la même série il y a une mémoire flash de 4Mo qui contient le firmware.
4Mo c’est peu, pour DD-WRT c’est limite, le firmware generic passe mais pas le firmware mega …
C’est pourquoi comme avec la ram certaines personne ont remplacé la puce flash par un puce de plus grande capacité.
On remarquera que Cisco (le fabricant) a prévu plusieurs empreintes dans ce but (c’est un routeur pour g33k / Hackers, Cisco a donc pensé à leurs clients).

Bon nous ce qui va nous intéresser c’est le port jtag/série (enfin plus le port série que jtag …).
Soyons clair, de base il n’y as pas de connecteurs, c’est moi qui les ai soudé.

Le port série va nous être d’une grande utilité, car celui ci est accessible depuis /dev/tts/1 dans la console DD-WRT, pas la peine de vous faire un dessin, avoir un port série libre c’est pouvoir connecter un microcontrôleur / carte arduino dessus, et donc pouvoir interagir avec le monde réel !

(Le port série c’est le connecteur avec un détrompeur, j’ai fait du travail propre sur ce coup :))

Le port série contient en réalité 2 port série !
Un premier qui est utilisé à la fois comme console de boot par le CFE (le programme trés bas niveau qui lance le firmware, un bios en quelque sorte) et comme port série libre, et un second qui est « vraiment » libre pour faire ce que l’on souhaite.

Le port série boot/cfe est énuméré comme tts/0 alors que le port série libre est énuméré comme tts/1, mais j’y reviendrai plus tard.

Bien maintenant que l’on connait le pinout du connecteur série il suffit d’y connecter un dongle usb/série FTDI-Basic pour tester son fonctionnement.

/!\ Attention : Le port série utilise des signaux au niveau 3v3 !!!! PAS 5V !!! Prendre garde de ne pas envoyer du 5v dans le port série, sinon il sera grillé définitivement.

Une fois le dongle câblé (pensé à croiser Tx et Rx ;)) il ne reste plus qu’as remettre les antennes, brancher l’alimentation et se connecter au routeur.

Lors du boot du routeur, on peut voir la console du CFE sur le port série tts/0.
Cette console n’as d’utilité que lors que l’on souhaite reflasher un nouveau firmware suite à une mise à jour raté qui aurait brické le routeur (ou de faire du debug kernel).

Bien passons maintenant à la parti SSH !
Il va bien falloir trouver un moyen de ce connecter au routeur en root et d’avoir accès à une console systéme.
C’est pourquoi on va utiliser un client ssh (il est possible d’utiliser un client telnet et laisser les options de config de base, mais telnet c’est le mal !).

Etape 1 : Ce logger en admin sur l’interface web du routeur et se rendre dans l’onglet services > services

Etape 2 : Activer le service sshd (vers le milieu de la page) Ne pas oublier de faire « save » entre chaque étape !

Etape 3 : Lancer son client ssh préféré sur l’ip du routeur port 22, avec comme nom d’utilisateur « root » et le mot de passe utilisé sur l’interface web.

Etape 4 : Se dire qu’on a bien travaillé pour en arriver là !

Ensuite pour communiquer avec le port série :

Pour écrire dans le port série
echo "blablabla" > /dev/tts/1

Pour lire depuis le port série :
cat /dev/tts/1

Note: Il est aussi possible d’utiliser les commandes tty linux pour avoir une console série « temps réel ».

Voila voila !

Remarque : Les deux ports série sont à 9600 bauds, 8 bits, pas de parité, 1 bit de stop.
Le port 0 est à 115200 bauds pendant la séquence de boot.

Annexe au sujet de la TTL 3v3

Il est possible de se faire un interface TTL / RS232 avec un MAX232 comme expliqué ici :
http://www.dd-wrt.com/wiki/index.php/WRT54GL_MAX232_Serial#Serial_port_on_a_Linksys_WRT54G.2FGL_router_using_a_MAX232_interface_IC

Il est aussi possible via un petit montage comme le « logic level shifter » de sparkfun de translater les signaux 3v3 en 5v et les signaux 5v en 3v3.

Il existe aussi d’autre mod encore plus dingue, comme ajouter un lecteur de carte SD, un mini ventilateur, …
Quelques exemples :
http://www.jbprojects.net/articles/wrt54gl_mods/
http://www.dd-wrt.com/wiki/index.php/Linksys_WRT54G-TM_SD/MMC_mod

De même il est possible de relier le port série à une carte arduino pro mini 3v3 par exemple est de controler/afficher des informations directement via le pot série.
Exemple, un afficheur embarqué :

About these ads

Discussion

13 réflexions sur “[Hack] Routeur WRT54GL + OpenWRT + Arduino/FTDI basic

  1. Aurais-tu une idée du prix occaz et neuf ?

    Publié par TiBounise | 18 février 2012, 14 h 01 min
  2. Aaaah tes articles sont trop loongs xD

    Je dois toujours les mettre dans « à lire plus tard » et y consacrer minimum une soirée pour en comprendre au moins un morceau ;D

    Mais c’est cool comme ça, au moins j’ai pleins de détails. Je débute, mais je persévère… Merci pour tous tes articles l’ami :)

    Publié par Nicolas fritz | 19 février 2012, 14 h 48 min
  3. Salut Skywood,
    J’ai lu ton article, il se trouve que je possède un routeur WRT54G v2.2.
    Est il possible de faire pareil que le GL sur le G!?
    Si je puis me permettre de pousser ma réflection… S’il est possible de brancher un arduino au routeur par une liaison série, peut on envisager utiliser le routeur avec l’arduino comme on le ferais avec un shield Ethernet… sauf qu’avec le routeur, on aurait des fonctions plus évoluées (hub ethernet, pont wifi, gestion de flux, etc…)

    Publié par tsim79 | 19 février 2012, 21 h 49 min
  4. Si j’en crois la dd-wrt database (http://www.dd-wrt.com/site/support/router-database) le wrt54g v2.2 est 100% compatible avec le firmware v24 Pre-SP2 (build 13064).

    Vu qu’il est possible d’avoir dd-wrt dessus il doit être possible de faire le hack série :

    http://www.rwhitby.net/projects/wrt54gs

    Dans le principe il est possible de faire n’importe quoi avec le port série, donc oui il serait possible de faire des chose très poussé avec un duo arduino / dd-wrt.
    Mais il faut aussi ce rappeler que pour faire ce genre de chose, il faut écrire un module kernel, ou un prog systéme, ce qui implique d’avoir la toolchain pour recompiler dd-wrt, etc etc …
    Il faudra aussi faire trés attention de ne pas bricker le routeur avec un firmware maison foireux …

    Dans 99.9% des hack utilisant un routeur wrt54g (pour des robots, …) le routeurs servait juste de pont wifi -> ssh -> série, et c’etait un autre pc distant qui faisait le controle.
    Théoriquement c’est possible de rendre le routeur autonome en lui ajoutant des prog systéme, mais il faudrait faire trés attention à la gestion de la ram, du boot CFE, etc etc …

    Publié par skywodd | 20 février 2012, 16 h 39 min
    • Oulaaaaa,
      Bon ben ouais lol, passionant, au début tu m’as donné envie, un arduino avec un wrt54G, je me suis dit chouette le truc de dingue… Un gros shield routeur + arduino + serveur sa donnerait une sorte de multiprise Ethernet intelligente, genre depuis internet on accède au serveur arduino qui lui commande tout ce qui serait brancher sur le routeur… Mais vu tout ce que tu m’as dit que j’ai compris mais qui me dépasse je pense que je vais laisser cette idée dans un coin de toute manière il n’y avait pas d’objectifs ou besoin juste l’association equivoque entre un routeur et l’arduino.

      Publié par tsim79 | 20 février 2012, 17 h 35 min
      • Si tu veut controler ce qui est branché au routeur c’est possible, mais en utilisant la console.
        Parce que si tu compte faire un interface web, là c’est tout autre chose !

        Si tu veut faire un truc de controle à distance avec interface web il serait presque plus intéréssant de prendre un eeepc low-cost et de lui coller l’arduino en usb.

        Dans mon cas le routeur me sert juste de pont wifi/ethernet -> série, après avec un cpu à 200MHz il est possible de faire plein de chose mais ça devient trés lourd.

        Moi mon systéme est architecturé pour une utilisation comme ceci :
        ordi distant -wifi-> routeur (+ console ssh) -série-> arduino

        Publié par skywodd | 20 février 2012, 17 h 42 min
  5. Non mais voila sans vouloir modifier ou personnalisé le routeur comme tu le penses, je n’ai pas le niveau et je n’envisage pas un seul instant modifier le firmware du wrt54g afin d’utiliser les 200Mhz du CPU…
    Mais tout comme toi tu l’utilises je vois une utilisation schématisé comme suit:

    Internet----------                                                                 /-------- Equipement 1
                             \                                                              /---------- Equipement 2
                              ------ [ Wifi--Routeur-- Ethernet ] ------------------- Equipement 3
                             /        [           Série                     ]
    Lan--------------                          L------------------------------ Arduino ------- E/S Digital
                                                                                                   L------------ E/S Analog
    

    Après, il s’agit d’un schéma, en y pensant vite fait, cela permettrait de récupérer des données ou valeurs depuis les entrées de l’arduino, de commander des appareils connecter via RJ45 depuis un serveur géré par l’arduino mais qui utiliserais la liaison série sur le routeur plutot que de passer par un shield Ethernet!….

    Publié par tsim79 | 20 février 2012, 20 h 39 min
  6. zut la mise en forme que j’avais fait avec les espaces n’est pas resté pfff… tu ne vas rien comprendre à mon schéma…. grrrr Bon en résumé utilisé le routeur en passerelle comme tu le fais mais pour permettre une interconnexion avec d’autre appareil ethernet commandable depuis l’arduino, récupérer des valeurs (physique ou autre depuis les E/S de l’arduino, sans avoir besoin d’un shield ethernet et accessible depuis le lan par wifi ou l’internet.

    Publié par tsim79 | 20 février 2012, 20 h 42 min
    • T’inquiète pas j’ai accès au texte d’origine depuis mon panel admin ;)
      J’ai activé le formatage, maintenant ton schéma est plus lisible.

      Donc …
      Si tes équipement sont en mesure de ce connecter en telnet au routeur tu peut effectivement envisager de faire un systéme comme celui de ton schéma.
      Mais si il ne peuvent pas ce connecter en telnet (ou en ssh) c’est cuit.

      Publié par skywodd | 20 février 2012, 21 h 40 min
  7. salut et bravo pour l’explication. du très bel ouvrage. Vraiment

    question c… :
    une fois bricke on peut ou pas le débriquer ? le mien l’est mais je ne réussi pas à le rendre opérationel donc, suis preneur d’un tuto qui dise tout.

    merci
    un pur néophyte
    ps : pour l’adresse mel merci de ne pas la transformer en support pub…

    Publié par fsiii | 19 décembre 2012, 21 h 25 min
    • >> une fois bricke on peut ou pas le débriquer ? le mien l’est mais je ne réussi pas à le rendre opérationel donc, suis preneur d’un tuto qui dise tout.

      Le bootloader est toujours en vie (console de bootload sur le port série qui s’affiche même si ça boot plus correctement aprés) ?
      Si oui tu peut sauver les meubles via un serveur TFTP local, en envoyant un nouveau firmware par ethernet, mais pour être franc, c’est juste super chiant …

      Si le bootloader répond pas … à moins de reprogrammer la mémoire flash avec un programmateur externe je vois pas énormément de solution.

      >> ps : pour l’adresse mel merci de ne pas la transformer en support pub…

      Les adresses mails que je reçoit ne sont là que pour éviter le spam, je les utilisent / diffusent absolument jamais ;)

      Publié par skywodd | 19 décembre 2012, 21 h 32 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Archives

Wow. Dogecoin. Amaze.

Laissez un tip en Dogecoin

DMMNFk6WBVTpx2Wu1Z35GL61QXSd6r6WQx

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 770 autres abonnés