Modem D-Link DSL-504T
Passage d'un modem routeur D-Link DSL-504T sous OpenWRT
Cela fait déjà un petit moment que l'idée me trottait en tête : avoir une connexion internet en ne passant que par des éléments utilisant des logiciels libres. J'avais déjà commencé en passant mon routeur sous OpenWRT et en lui attribuant toutes les taches, la box n'étant plus qu'un simple point d'accès au réseau internet. Mais sachant que j'incite mon entourage à utiliser des logiciels libres et que je peux vraiment être un emmerdeur à ce sujet là... Je ne pouvais pas rester avec un maillon de ma chaîne de connexion en proprio.
Les recherches
Le gros problème des modems, c'est que la plus part utilisent pour se connecter au FAI, une puce qui est proprio. Complètement fermé, dans une boite en acier, sous 15m de béton, au fond de l'océan … Impossible donc d'utiliser OpenWRT avec ce genre d'électronique
Heureusement, le site OpenWRT liste les différentes puces ainsi que l’existence de pilotes libres sur cette page. Vous pouvez voir que seul les puces Lantiq possèdent des pilotes libres. Les modems ou modems-routeur susceptible de fonctionner pleinement avec OpenWRT sont listés ici.
Pour tester je n'allais pas en acheter un neuf, j'ai donc parcouru les sites faisant de l'occasion en recherchant les modems de cette liste. J'ai finalement réussi à mettre la main sur un D-Link DSL-504T.
Découverte du machin
Un petit tour d'horizon pour voir à quoi ressemble ce truc :
Maintenant que les présentations sont faite, on va regarder un peu plus en détail. Après branchement l'accès à l'interface se fait de la manière habituelle (interface web + login/mdp). Même si mon but était de changer tout ça il fallait quand même que je regarde un peu, au moins par curiosité
Les choses sérieuses
La page du wiki d'OpenWRT concernant le DSL-504T renvoie à cette page pour l'installation. La première chose à faire est de se connecter avec telnet afin de déterminer l'adresse à utiliser pour se connecter au FTP. Bien alors allons-y !
Premier problème
telnet 192.168.1.1 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'.
login: admin Password:
Login incorrect login:
Là première chose bizarre, telnet répond bien mais impossible de se connecter. Quelques recherches et quelques reset plus tard, je me rend compte que le firmware du DSL-504T est encore en version 1 et vu que j'ai essayé tout le reste autant essayer avec la V2. Direction le site de D-Link pour télécharger une image, au passage on prend le code source.
Deuxième problème ...
Malheureusement lors de la décompression de l'archive je tombe sur un fichier en ".exe" BERK!!J'ai cherché un autre moyen, mais les images que j'ai trouvé n'étaient pas acceptés par l'interface web … J'ai donc lancé cet utilitaire avec wine. L'avancement de la mise à jour du firmware était extrêmement lente, mais vraiment ! Une tortue asthmatique aurait pu gagner la course. Puis au bout de 20mn environ, plus rien, plus d'avancement. Je m'imaginais déjà avec une jolie brique...
Première bonne nouvelle !
L'utilitaire en question possède une option : "Corrupted-image mode". Une fois le processus relancé avec cette option le DSL-504T à été flashé avec succès !
Deuxième bonne nouvelle !!
Après ce flashage en V2 telnet est devenu accessible avec les login/mdp de base (admin/admin).
Comme expliqué dans le tuto il faut commencer par trouver l'adresse ip du serveur ftp avec la commande :
# cat /proc/ticfg/env | grep my_ipaddress
Pour ma part il m'a renvoyé :
my_ipaddress 192.168.1.199
Dans la suite on apprend qu'il y a 4 partitions : mtd0, mtd1, mtd2 et mtd3. NE JAMAIS TOUCHER AUX MTD2 ET MTD3 ! La partition mtd2 contient le bootloader, c'est donc elle qui va gérer le démarrage, dans le cas ou elle serait corrompue le routeur ne démarrera plus du tout ! Vous serez alors en possession d'une belle petite brique. La partition mtd3 contient quant à elle la configuration du bootloader et le firmware original, là aussi dans le cas ou cette partition est modifiée routeur => brique
Petite parenthèse, il existe sur la série d-link dsl-5xxx un jtag qui permettrait aux courageux ayant planté leur routeur de lui redonner vie, mais ne me demandez pas comment ça marche … j'en ai aucune idée...
Le fichier "/proc/ticfg/env" contient la liste des partitions ainsi que leurs adresses mémoire :
mtd0 0x90091000,0x903f0000 mtd1 0x90010090,0x90090000 mtd2 0x90000000,0x90010000 mtd3 0x903f0000,0x90400000 mtd4 0x90010000,0x903f0000
La partition mtd4 est virtuelle
Serveur FTP
Maintenant commence la partie FTP. Perso je ne connais pas vraiment le protocol FTP, alors j'ai simplement suivis le tuto. De préférence placez vous dans le dossier contenant l'image openwrt avant de vous connecter au FTP.
Petite remarque : Lorsqu'on branche le modem-routeur le serveur FTP est lancé, mais seulement pour une durée de quelques secondes, il faut être assez vif ! Si jamais la commande :
ftp 192.168.1.199
Ne vous demande pas de vous identifier c'est que vous êtes arrivé trop tard … Il faut alors recommencer en débranchant le modem-routeur, le rebrancher et relancer la commande jusqu'à ce qu'il vous demande un nom d'utilisateur et un mot de passe. Dans mon cas il s'agit du couple : adam2/adam2
Une fois connecté au serveur FTP il suffit de rentrer les commandes du tuto, prenez quand même soin de vérifier les adresses ! Car il ne faut en aucun cas que la commande :
quote "SETENV mtd1,0x90010000,0x903f0000"
Empiète sur les adresses des partitions mtd2 ou mtd3 !
Si jamais vous remarquez comme moi que lors de l'envoie d'une commande la réponse n’apparaît que lors de la commande suivante (ou encore plus tard), utilisez la commande "reset". La commande "reset" permet une resynchronisation des requêtes/réponses. Ça évite d'envoyer la commande :
put "openwrt-ar7-squashfs.bin" "openwrt-ar7-squashfs.bin mtd4"
Alors que les commandes précédentes, qui sont censé préparer le transfert, n'ont pas été prise en compte. La commande reset n'a pas d'influence néfaste sur le déroulement des opérations, donc vous pouvez en user et même en abuser.
Si tout se passe bien, la commande précédente va vous faire apparaître une série de "#", représentant l'avancé du téléchargement. Une fois le téléchargement fini il suffit de redémarrer le modem avec la commande :
quote REBOOT
À ce moment là, il faudra le laisser tranquillement redémarrer jusqu'à ce que la d.e.l. status clignote à la manière d'un rythme cardiaque : …..*.*.....*.*.....*.*..... Je ne sais pas si c'est bien clair, mais vous verrez et comprendrez le changement.
Dans le cas où le transfert FTP bloque, "DON'T PANIC", il vous suffira simplement de recommencer l'opération : débrancher-rebrancher le modem, connexion FTP, login/mdp etc ...
Voici ce que donne la procédure complète :
sudo ftp 192.168.1.199 Connected to 192.168.1.199. 220 ADAM2 FTP Server ready. Name (192.168.1.199:jack): adam2 331 Password required for adam2. Password: 230 User adam2 successfully logged in. Remote system type is UNIX. ftp> quote "SETENV mtd1,0x90010000,0x903f0000" 200 SETENV command successful ftp> quote "GETENV mtd1" mtd1 0x90010000,0x903f0000 ftp> reset ftp> quote "MEDIA FLSH" ftp> reset 200 GETENV command successful 200 Media set to FLSH. ftp> binary 200 Type set to I. ftp> debug Debugging on (debug=1). ftp> hash Hash mark printing on (1024 bytes/hash mark). ftp> reset ftp> put "openwrt-ar7-squashfs.bin" "openwrt-ar7-squashfs.bin mtd4" local: openwrt-ar7-squashfs.bin remote: openwrt-ar7-squashfs.bin mtd4 ---> PORT 192,168,1,5,151,216 200 Port command successful. ---> STOR openwrt-ar7-squashfs.bin mtd4 150 Opening BINARY mode data connection for file transfer. ############################# ... ############################# 226 Transfer complete. 2818052 bytes sent in 22.44 secs (122.7 kB/s) ftp> reset ftp> quote REBOOT ---> REBOOT 221-Thank you for using the FTP service on ADAM2. 221 Goodbye. ftp> reset 421 Service not available, remote server has closed connection