mercredi, septembre 05, 2012

J'ai besoin ... de construire une PirateBox

Suite à un article publié sur Le Monde, j'ai découvert une conférence vidéo de Gaël Musquet donnée à l'occasion du festival Pas Sage en Seine et qui présentait le principe de la PirateBox. Une PirateBox est un réseau sans fil, local qui permet d'échanger des fichiers de manière anonyme. L'idée m'est alors venue de créer une PirateBox afin de pouvoir partager mes différents outils de développements préférés (Eclipse, Java...). Cela est aussi une occasion de découvrir des choses intéressantes sur l'installation et la configuration d'un système embarqué comme OpenWRT.

L'objectif de ce billet et donc de vous présenter une installation d'une PirateBox. A vrai dire il s'agit d'une installation un peu particulière puisqu'elle ne s'est pas déroulée correctement. En effet, la mise à jour du firmware du routeur n'a pas réussi et j'ai du passer par une communication port série pour résoudre le problème.

Dans le cas où vous souhaitez des tutoriels plus concis et qui montrent les étapes pour installer une PirateBox dans les cas classiques, je vous conseille les suivants :
Pour créer une PirateBox, j'ai utilisé le matériel suivant :
  • Router TP-Link MR3020 V1.7 disponible sur Amazon,
  • Batterie Tecknet 7000 mAh pour être autonome au niveau de l'alimentation électrique. Prévoir une capacité élevée pour augmenter la durée ~ 14 heures disponible sur Amazon,
  • Clé USB 32 GO pour stocker les données. Il est possible d'utiliser une disque externe mais il faudra penser à l'alimenter ce qui pourra réduire considérablement l'autonomie de la batterie.

Concernant le matériel pour la communication port série, j'y reviendrai plus tard. C'est un passage obligé s'il ne vous est plus possible de passer par la voie Ethernet.

Au niveau logiciel, j'ai utilisé :
  • Windows 7,
  • Putty pour la communication Telnet, SSH et COM,
  • le firmware OpenWR,
  • le package PirateBox.

Pour les différentes étapes, je vais suivre un ordre chronologique.

Étape 1 : déballage du routeur TP-Link MR3020

Ayant reçu rapidement mon routeur TP-Link MR3020 commandé sur Amazon, je décide de me lancer dans la création de ma PirateBox. Premier constat, j'ai l'impression de déballer un produit Apple (IPod, IPhone). L'emballage est très ressemblant. Le contenu contient un routeur, une alimentation un cable USB et un câble Ethernet.
Emballage du TP-Link MR3020
Contenu de l'emballage du TP-Link MR3020

Étape 2 : connexion au routeur TP-Link MR3020

Je m'assure avec tout que l'interrupteur du routeur est en mode "Wisp". Je branche ensuite l'alimentation du routeur via le micro USB vers le port USB de mon portable. De même, je branche le câble Ethernet du routeur à mon portable. Enfin, je passe en WIFI afin de conserver la connexion internet sur mon portable PC.
Connexion du TP-Link MR3020
Ouvrir l'URL suivante http://192.168.0.254 à partir de n'importe quel navigateur.
Le nom d'utilisateur et le mot de passe sont 'admin'.

Étape 3 : mise à jour du firmware du routeur

Depuis le menu de gauche, choisir l'élément System Tools ;
Choisir alors l'entrée Firmware Upgrade puis sélectionner le fichier openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin (téléchargé ici).
Faire la mise à jour en cliquant sur Upgrade. L'installation va procéder et aucun message d'erreur ne devrait apparaitre. Il est ensuite indiqué que le routeur va redémarrer.
Historiquement il ne s'agit pas du même fichier que j'avais utilisé. Le précédent concernait la version 1.6 du routeur et l'installation sur la 1.7 (la version de mon routeur) a abouti à un problème d'activation du réseau. On va donc considérer par la suite que le connexion réseau vers le routeur ne fonctionne pas.

Étape 4 : le blackout, le début des problèmes

Le routeur redémarre et d'après les différents tutoriels que j'ai suivis, l'étape suivante consistait à se connecter en Telnet au routeur. J'ai utilisé le Telnet de Putty via la configuration suivante :
Configuration Telnet avec Putty
Le problème c'est que rien ne se produisait, le routeur ne répondait pas. Un test ping pour s'assurer de l'existence d'une connexion active n'a rien donné. Comme j'étais en DHCP sur ma configuration réseau, j'ai configuré en IP fixe pour avoir une classe d'adresses identique au routeur. Cela n'a également rien donné. J'ai décidé de rebooter le routeur et réitérer les différentes commandes précédentes, mais pas plus de changement.

J'ai découvert sur les différents forums qu'il existait un Safe Mode sur le routeur. Pour l'activer, il faut éteindre le routeur et le rebrancher. Dés que la première LED s'allume, il faut appuyer longtemps sur le seul bouton du routeur. Le résultat que vous devez obtenir est que la première LED clignote très rapidement. Mais le Safe Mode n'a rien changé non plus. A cette étape, j'ai bien pensé que mon routeur était mort.

Étape 5 : les forums PirateBox et le WIKI OpenWRT

Le site PirateBox contient un forum que j'ai parcouru pour tenter de trouver un message qui décrirait à peu près mon problème. C'était pas glorieux, il n'y avait pas grand chose. En fait, je me rendais compte que la version du routeur que je possédais était récente. J'ai donc décidé après m'être assuré que le problème n'était pas résolu de poster un message sur ce forum (Cannot connect in telnet after the OpenWRT firmware installation). Après plusieurs Allé / Retour sur cette discussion et sur le forum OpenWRT, j'en suis venu à la conclusion que seule une connexion via le port série était possible.  

Étape 6 : achat du module série

Depuis le WIKI d'OpenWRT pour le MR3020, une section décrit comment communiquer via le port série. Il est préconisé d’acheter un composant tout prêt qui permet d'utiliser le port série via une entrée USB. En fait je ne me sentais pas capable de monter un circuit from scratch. Je me suis donc orienté vers ce module FTDI Basic Breakout - 3.3V. J'ai également pris cela pour que les branchements soient plus faciles.

Étape 7 : le bricolage et la soudure

Tout d'abord il faut accéder à l'intérieur du routeur. Pour cela il faut vous munir d'un petit pied de biche en plastique et ouvrir le couvercle côté LED (vous pouvez essayer avec un tournevis au risque de rayer le plastique).
Outil pour ouvrir le dessus du routeur
Il n'y a aucune vis pour retenir le circuit imprimé du routeur, retirer donc le de son logement en plastique afin de faciliter les opérations de soudure. 

Le port série est identifiable via les quatre petits fiches / trous placé(e)s en ligne.
Identification des fiches du port série du TP-Link MR3020
Deux solutions s'offraient à moi pour connecter les fils sur le circuit imprimé. La première était de dénuder 4 fils et d'effectuer un point de soudure pour chaque trou. Le problème s'est la fragilité des fils. La seconde s'était d'essayer de reproduire une fiche mâle. C'est la seconde solution qui a été choisie. 
Pour trouver la bonne taille de connectique, j'ai utilisé des aiguilles à coudre. Pour les points de soudure, faites les par le dessous du circuit imprimé. Vous devriez obtenir le résultat suivant. J'ai fait un test au voltmètre pour m'assurer que les points de soudure étaient correctement réalisés.

Étape 8 : connexion via le port série du routeur TP-Link MR3020

Sur le routeur, la première fiche est identifiée par p1. Les fiches désignent dans l'ordre :
  • p1 : TX
  • p2 : RX
  • p3 : GND (masse)
  • p4 : VCC
 Sur le module USB/Série, le rôle des fiches est directement imprimé :
  •  p1 : GND (masse)
  •  p2 : CTS
  •  p3 : Power 3.3V
  •  p4 : TX
  •  p5 : RX
  •  p6 : DTR  
Naturellement j'ai fait correspondre les TX, RX et GND. Pour le VCC, j'ai branché l'alimentation. Toutefois, ça ne fonctionnera pas. Suivre alors les modifications suivantes.

Il faut supprimer l'alimentation (VCC) pas de p4 et intervertir TX et RX. Vous obtiendrez le résultat suivant :
Connexion TP-Link MR3020 avec le module FTDI Basic Breakout - 3.3V
Il faut ensuite connecter le module USB/Série sur votre PC et alimenter le router via le mini USB.
Il faut par ailleurs identifier le port virtuel COM employé par le module USB/Série. Dans mon cas c'était le COM5.

Depuis l'application Putty, paramétrer les informations afin d'effectuer une connexion en port série en s'assurant que les paramétrages suivants sont respectés :
  • Bits per second: 115200
  • Data bits: 8
  • Stop bits: 1
  • Parity: None
  • Flow control: None
Faire Open, vous devriez maintenant obtenir une communication avec OpenWRT. Si ça ne fonctionne pas assurez-vous que lorsque vous tappotez sur le clavier de votre PC les LED du module USB/Série clignotent. Vérifier également les points de soudure et contrôler enfin les branchements.

Étape 9 : mise à jour du firmware

A cette étape, j'arrive à me connecter au routeur. Je peux parcourir le contenu et m'apercevoir que tout le contenu de l'OpenWRT a l'air correcte. Un reboot du routeur me permet de remarquer que le configuration réseau pose problème. Il fallait donc que je trouve un moyen de mettre à jour ce firmware en m'assurant d'utiliser une version correcte pour mon routeur. J'ai pris le parti d'utiliser une clé USB et de déposer le firmware dézippé dedans.

Depuis Windows, copier le nouveau firmware dé-zippé sur une clé.

Brancher cette clé sur le routeur et procéder à son montage
 mount /dev/sda1 /mnt/usb
Copier le firmware dans le répertoire /tmp

Exécuter cette instruction et attendez que la mise à jour soit terminée
mtd -r write openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin firmware

Étape 10 : installer PirateBox

Pour le reste de l'installation de la PirateBox, je ne vais pas faire un copier/coller des nombreux tutoriels qui existent. Vous pouvez suivre celui-ci qui est très bien fait.

Conclusion

Au début de ce challenge, je ne pensais pas qu'il allait m'arriver ce genre de mésaventure. En y réfléchissant, je ressentis lors du plantage une certaine frustration du fait que j'avais acheté le routeur et que peut être il ne me servirait pas à grand chose. Un peu de patience, des recherches sur Internet, des gens motivés et le tour est joué : j'ai maintenant ma PirateBox.