Prolonger la vie de son WRT54GL - récupérer d'un crash de firmware, TFTP et JTAG (PC)
Par cubytus le vendredi 9 janvier 2015, 02:53 - Lien permanent
Comme on peut s'en douter à lire mes posts plus anciens sur ce même routeur, j'ai fait une modification de trop sur ce routeur, équipé du Tomato Shibby mod (je ne blâme pas Shibby, son firmware est très stable), ce qui donnait des crash aux dix minutes du wifi, et des reboot aux demi-heures. Les restaurations par l'interface Web ne donnaient rien, jusqu'à ce que l'interface elle-même plante lamentablement.
Difficulté: difficile. Aléatoire, surtout.
Quand l'interface Web ne répond plus, il reste toujours des solutions. En premier, on cherchera à savoir ce qui du routeur répond encore. L'interface Web peut avoir disparue, mais cela ne signifie pas pour autant la fin des haricots! Il faut commencer par déconnecter tous les périphériques du routeur, et ne laisser branché qu'un ordinateur par câble Ethernet dans un des ports LAN. Il faut aussi avoir en main toutes les informations de connexion: clé wifi, login et mot de passe du modem si c'est en ADSL (connexion PPPoE). Par défaut le routeur est accessible au 192.168.1.1, et le mot de passe sur Linksys est "admin" (pas de nom d'usager). Sous Tomato, utilisateur et mot de passe sont "admin" par défaut. Sous dd-wrt, c'est "root / admin".
Reprenez l'Utilitaire de Réseau (Applications > Utilitaires), et lancez un scan de ports entre 1 et 500 sur l'adresse du routeur, normalement 192.168.1.1. La limitation au nombre de ports n'a pour but que d'accélérer la recherche parmi les services les plus courants (Telnet sur le port 23, SSH sur le 22, HTTP sur le 80, HTTPS sur le 443, si vous n'avez pas changé les ports par défaut.
En même temps, lancez des ping à l'infini sur l'adresse du routeur. Un routeur fonctionnant mal soit ne répondra pas du tout, soit répondra irrégulièrement. Pour donner une idée, tout ping au-delà de 1ms en connexion câblée est suspect.
Un routeur débranché ou une carte réseau non configurée donnera ce genre de réponse.
Un routeur stable avec une carte réseau correctement configurée.
La méthode par "hard reset"
Le premier essai est de tenter le 30 / 30 / 30 reset. Ça vient à bout de la plupart des problèmes de configuration, et si vous faites partie des chanceux, même une restauration de paramètres se passera sans problèmes. Évidemment, il ne faut pas désactiver le bouton de reset dans l'interface Web, ce qui compliquerait la situation.
La méthode TFTP
Dans mon cas ça n'a pas fonctionné, et le "hard reset" n'était que la première étape, qui permet de réinitialiser le mot de passe, entre autres. Il faut tout d'abord donner une adresse statique à la carte réseau, puisque le serveur DHCP du routeur est censé ne plus fonctionner, ce qui permet de passer aux étapes suivantes.
Puis télécharger soit le firmware dd-wrt mini (dd-wrt.v24_mini_wrt54g.bin), soit celui de Linksys (FW_WRT54GL_4.30.16.6_US_20130308_code.bin). En effet, la méthode TFTP n'accepte que les formats en .bin, et non les .trx de la famille Tomato! De plus, la méthode TFTP limite la taille du logiciel à 3Mio seulement, exception faite de celui de Linksys.
Ouvrir une fenêtre de Terminal, et entrez successivement les commandes suivantes:
$ tftp 192.168.1.1
> binary
> rexmt 1
> timeout 60
> trace
puis, après s'être assuré que le fichier de firmware soit bien dans le dossier de démarrage ~, icône de petite maison, débranchez le routeur et tapez:
> put firmware.bin
Une seconde après avoir rebranché le routeur, appuyez sur Entrée pour lancer l'upload du firmware.
S'il échoue, utilisez la flèche du haut, puis Entrée pour relancer la commande, jusqu'à ce que le routeur avale le firmware présenté. En revenant à la fenêtre de ping de l'utilitaire réseau, on se rendra compte que la réponse du routeur devient irrégulière, ou absente. C'est normal, car il est occupé à écrire en mémoire flash, ce qui dure environ 3 minutes. Normalement le routeur doit se réinitialiser tout seul, mais s'il ne le fait pas ou que les pings ne sont toujours pas réguliers après cinq minutes, il faudra manuellement le débrancher et le rebrancher.
Quand les pings sont redevenus réguliers, un scan de ports devrait montrer, avec le firmware dd-wrt-Mini, les ports 23, 53 et 80 d'ouverts. À ce moment l'interface Web devient disponible, et il est possible de passer à Tomato.
Truc: Par défaut, le logiciel de Linksys n'a pas de nom d'utilisateur, et demande le mot de passe "admin", alors que dd-wrt vous demandera de changer immédiatement le nom d'usager et le mot de passe avant de continuer.
Une fois passé au firmware définitif, il faudra reconfigurer tout à la main, puisqu'une restauration à partir d'un fichier de sauvegarde a de bonnes chances de réinstaller les problèmes dont on cherchait à se débarrasser, et qui résident souvent en NVRAM
Problèmes potentiels
Error on server code pattern incorrect: peut arriver en essayant d'uploader dd-wrt-Mini. Il faudra alors tenter avec celui de Linksys.
Time out occured Connect request failed: le routeur n'était pas prêt au moment où vous avez appuyé sur Entrée. Recommencer l'opération.
L'upload peut caler à répétition sans raison apparente. Essayer de passer manuellement la carte réseau en 10Mbit/s, half-duplex. Le transfert se fera très lentement.
Il existe deux autres méthodes. Une par JTAG, mais qui présente deux inconvénients majeurs: il faut absolument un ordinateur doté d'un port parallèle (les moins de 20 ans ne sauront même pas à quoi ça ressemble!), Windows qui plus est (ça ne marche pas en machine virtuelle), et un peu de matériel pour construire le câble. Puis c'est lent à se pendre. Différents types de câbles sont disponibles, certains peuvent être construits à la main:
Méthode JTAG (expert, non testée)
Attention, tous ces câbles "maison" requièrent un ordinateur doté de port parallèle ou série, plutôt rare de nos jours. Pour une autre méthode, c'est par là que ça se passe.
Câble de type Xilinx (avec buffer)
Il existe des câbles USB, mais ils ont la réputation de ne pas fonctionner aussi bien que les modèles sur port parallèle.
Les connexions du Linksys WRT54GL:
Port parallèle | Routeur | Fonction | ||||||
---|---|---|---|---|---|---|---|---|
2 | 3 | TDI | ||||||
3 | 9 | TCK | ||||||
4 | 7 | TMS | ||||||
5 | 1 | TRST (Non connecté) | ||||||
13 | 5 | TDO | ||||||
18-25 | 2,4,6,8,10 | GND |
Le tout se commande avec le logiciel tjtag, pour Windows ou Linux, un shareware très abordable à 5$. Les instructions illustrées sont sur TIAOwiki. Plus ancien et possiblement non fonctionnel, HairyDairyMaid_WRT54G_Debrick_Utility_v48.zip.
Il faudra probablement recréer le bootloader (CFE) avec l'outil disponible ici, si vous n'en avez pas de sauvegarde, comme décrit ici. Malheureusement pas de bootloader générique, puisqu'il dépend de l'adresse MAC du routeur. Il est donc important de faire une sauvegarde du CFE dès que possible. Dans Tomato, ça se trouve dans l'interface Web sous Administration > Debugging > Download CFE.
Réinstaller le CFE, seulement si nécessaire.
Méthode court-circuit (kamikaze, non testée)
Et une autre méthode requiert de court-circuiter de très minces broches sur la mémoire flash pour faire répondre le routeur aux pings, et lui faire accepter le firmware.
(Simplifié et résumé de 1, 2, 3, 4, 5, 6, 7)
Inspiré par VicTek, une archive contenant le nécessaire pour récupérer d'un crash de firmware. Il n'inclut que trois schémas de câbles JTAG à port parallèle, non testés. Le nombre de variantes est tout simplement trop grand. Pour ce qui est de la méthode par Raspberry Pi, c'est de ce côté.
Morale de l'histoire: essayez l'overclock à 250MHz… À vos risques et périls! Ou bien avec l'excellent imgtool_nvram, inclus dans l'archive.