Déploiement d`applications embarquées sur routeur IP

Transcription

Déploiement d`applications embarquées sur routeur IP
Projet S5
BOUHOURS Benoit
BOURAOUI Sami
LARREY Jérémy
TRAISSAC Nathanaël
Electronique 3ème Année
Option Systèmes Embarqués
Déploiement
d’applications embarquées
sur routeur IP
Responsable :
AHMED Toufik
Année 2007/2008
Projet S5
SOMMAIRE :
INTRODUCTION...................................................................................................................... 2
1 – Le projet OpenWrt : ...................................................................................................... 3
1.1 OpenWrt :..................................................................................................................... 3
1.2 Applications : ............................................................................................................... 3
1.3 Structure : ..................................................................................................................... 4
1.4 Flasher un routeur avec OpenWrt : .............................................................................. 4
2 – Les éléments de base : .................................................................................................... 7
1.1 Connexion par ssh : ...................................................................................................... 7
1.2 Wifi : ............................................................................................................................ 7
1.3 Connexion Internet ....................................................................................................... 7
1.4 Serveur web:................................................................................................................. 7
1.5 Mise en oeuvre de l'interface USB:.............................................................................. 8
3 - Le SIP de notre routeur : ............................................................................................... 9
3.1 Le protocole SIP :......................................................................................................... 9
3.2 Milkfish : .................................................................................................................... 10
CONCLUSION ........................................................................................................................ 12
1
Projet S5
INTRODUCTION
Un routeur Wifi est conçu pour transporter l’information d’un nœud à l’autre dans un
réseau sans fil. Il est doté d’un microprocesseur et d’un système d’exploitation qui est dédié
principalement à la réalisation de cette tâche.
Avec l’avènement de routeurs pouvant intégrer un système d’exploitation de type
Linux minimal, l’usage d’un routeur WIFI a pu être étendu à des applications plus appropriées
à l’utilisateur.
Dans le cadre de ce projet, nous nous proposons d’intégrer dans un routeur WIFI des
applications spécifiques, non disponibles dans le "firmware" d’origine. Pour cela, nous avons
choisi le routeur ASUS WL-500g Premium, qui a pour particularité la présence de ports USB,
et la distribution OpenWrt Kamikaze 7.09, dernière version du firmware OpenWrt,
spécialement conçu pour les routeurs.
Le but de ce projet est d’embarquer, en plus de nouvelles fonctionnalités de base, un
support de voix sur IP utilisant le protocole SIP sur le routeur. Une telle fonctionnalité a déjà
été implémentée sur la version précédente d’OpenWrt (White Russian), et a donc besoin
d’être adaptée à la nouvelle version.
2
Projet S5
1 – Le projet OpenWrt :
1.1 OpenWrt :
OpenWrt est une distribution GNU/Linux développée dans le but de remplacer les
« firmwares » des équipements de Broadcom. On peut citer par exemple comme plateformes
compatibles avec OpenWrt les routeurs WLAN de Linksys, Asus, Belkin, Dell, US Robotics
etc. Cependant, les routeurs les plus populaires sont le Linksys WRT54GS et l'Asus WL500g
deluxe.
Le développement d'un tel projet a été possible grâce aux « firmwares » constructeurs
sous licence GPL. Utilisés comme base, les développeurs ont pu légalement travailler sur des
« firmwares » intégrant des fonctionnalités absentes des « firmwares » d'origine.
La dernière version d'OpenWrt est distribuée sous le nom de Kamikaze 7.09 assurant
entre autre une plus grande compatibilité avec les différentes plateformes.
1.2 Applications :
Le système d'exploitation basé sur Linux offre un large éventail d'applications à
l'utilisateur. Celui ci peut alors utiliser pleinement les ressources du routeur afin de satisfaire
son besoin. Parmi les utilisations possibles on peut citer notamment :
La conversion du routeur en Hotspot Wifi (c'est le cas des routeurs de la
communauté FON faisant office de point d'accès public chez les particuliers).
Le partage de fichiers entre plusieurs utilisateurs reliés au routeur.
L'hébergement de pages web grâce au serveur web inclus dans la distribution.
La possibilité de gérer à distance la diffusion de musique en reliant une carte son
au routeur.
Les applications de télésurveillance en reliant une Webcam IP au routeur.
La gestion de la voix sur IP et de la messagerie instantanée disponibles pour tous
les utilisateurs reliés au routeur.
etc.…
Figure 1: Quelques applications d'OpenWrt
3
Projet S5
1.3 Structure :
La distribution OpenWrt est construite autour du noyau Linux 2.4 permettant aux
composants matériels du routeur de communiquer avec la couche logicielle.
Les applications fonctionnant sur le routeur font appel pour la plupart aux
bibliothèques standard C (libc) fournissant les fonctions de base du langage C. Cependant,
pour minimiser l'empreinte mémoire du système d'exploitation, OpenWrt repose sur les
bibliothèques uClibc moins gourmandes en espace mémoire et particulièrement bien adaptées
aux système embarqués.
Enfin, la distribution propose en standard l'application Busybox pour rendre son
système interactif avec l'utilisateur. En effet, il s'agit un programme unique incorporant un
shell (ash) ainsi que la plupart des commandes UNIX classiques comme ls, cd, vi. L'avantage
d'avoir un programme unique est toujours l'économie de l'espace mémoire.
Figure 2: Structure du firmware
1.4 Flasher un routeur avec OpenWrt :
Figure 3: Chaine de compilation et téléchargement
4
Projet S5
Tout d'abord, il faut récupérer l'archive contenant le code source du « firmware » sur le
site d'OpenWrt. Il s'agit d'une archive « tar » compressée que l'on décompresse dans notre
répertoire de travail :
$ tar xvf kamikaze_7.09.tar.bz2
$ cd kamikaze_7.09
On peut lancer ensuite l'utilitaire de configuration d'OpenWrt grâce à la commande :
Figure 4: Utilitaire de configuration OpenWrt
$ make menuconfig
L'utilitaire de configuration permet de sélectionner les différentes applications fournies
par OpenWrt. D'autre part il permet aussi de configurer l'utilitaire Busybox afin de définir les
commandes dont l'utilisateur a besoin. Bien que la configuration par défaut fournisse un
système opérationnel l'utilisateur a tout intérêt à configurer selon ses besoins afin de
minimiser l'empreinte mémoire du système.
Une fois la configuration terminée, on peut sortir de l'utilitaire et lancer la
compilation :
$ make
5
Projet S5
Une fois la compilation terminée, on dispose des images binaires du « firmware » dans
le répertoire "/bin". Il s'agit d'images au format « .trx » ou « .bin » qui vont chacune
implémenter un système de fichiers différent sur la mémoire flash du router (squashfs, jffs2
ou ext2). L'utilisateur choisit donc l'image correspondant au système de fichier qu'il souhaite
implanter (squashfs pour un système compact en lecture seule ou jffs2/ext2 pour plus de
fonctionnalités).
La procédure de téléchargement de la nouvelle image s'effectue grâce à un port
Ethernet côté LAN sur le routeur et en utilisant le protocole TFTP.
Pour flasher un routeur de type Asus WL500g, il faut tout d'abord démarrer celui ci en
mode sans échec. Pour démarrer le routeur dans ce mode, il suffit d'établir l'alimentation en
maintenant le bouton reset enfoncé.
L'adresse IP par défaut du routeur étant 192.168.1.1 les commandes permettant de
télécharger l'image sont les suivantes :
$ tftp 192.168.1.1
tftp> binary
tftp> trace
tftp> put openwrt-xxx-x.x-xxx.trx
Après cette manipulation, il faut finalement rebooter le router après 5 minutes afin de
finaliser l'installation.
On peut ensuite accéder au routeur grâce à une commande telnet :
$ telnet 192.168.1.1
Figure 5: Accès au shell de Kamikaze 7.09
6
Projet S5
2 – Les éléments de base :
1.1 Connexion par ssh :
On peut tout d'abord mettre en place un mot de passe pour restreindre l'accès au
routeur. Ceci peut être fait grâce à la commande passwd.
La connexion au routeur se fera par la suite en utilisant ssh:
ssh -l root 192.168.1.1
1.2 Wifi :
Le WIFI est désactivé par défaut sur le routeur ASUS WL 500GP après l'installation
de OpenWRT Kamikaze. On a besoin de l'activer pour pouvoir établir la connexion au réseau.
Pour cela il faut d'abord modifier le fichier de configuration « /etc/wireless » de la
manière suivante:
option disabled 0
On peut effectuer la même opération directement en utilisant une commande uci. Ces
commandes permettent sous Kamikaze d'accéder directement aux fichiers de configuration de
« /etc/config » en lecture et en écriture.
uci set wireless.w10.disabled=0
Il faut ensuite taper la commande suivante pour appliquer les modifications apportées:
uci commit wireless && wifi
La commande uci show wireless permet de vérifier la configuration du WIFI.
On peut également utiliser la commande ifconfig pour vérifier la présence de l'interface
WIFI.
1.3 Connexion Internet
On peut également établir une connexion à Internet à partir du routeur en brancher le
câble réseau sur le broche WAN du routeur Ceci peut nous être utile au téléchargement des
packages nécessaires pour la suite.
1.4 Serveur web:
Dans le système de fichiers de Kamikaze, on remarque la présence d'un répertoire
« /www » dans lequel on peut placer des pages html auxquelles on accède depuis un
navigateur en tapant l'adresse IP du routeur: http://192.168.1.1
7
Projet S5
1.5 Mise en oeuvre de l'interface USB:
Pour pouvoir utiliser les ports USB du routeur, nous avons besoin d'installer certains
packages, soit en les téléchargeant directement depuis Internet, ou bien en les transférant par
« scp » depuis une autre machine connectée sur le réseau wifi du routeur.
Les packages sont disponibles sur: http://downloads.openwrt.org/kamikaze/7.09/brcm2.4/packages
Nous avons besoin des packages suivants:
kmod-fs-vfat_2.4.34-brcm-1_mipsel.ipk
: prise en charge du système de fichiers vfat.
kmod-scsi-core_2.4.34-brcm-1_mipsel.ipk
: nécessaire à l'installation de périphériques.
kmod-usb-core_2.4.34-brcm-1_mipsel.ipk
kmod-usb-storage_2.4.34-brcm-1_mipsel.ipk
kmod-usb2_2.4.34-brcm-1_mipsel.ipk
Nécessaires à la prise en charge de
périphériques USB
Pour installer les packages nous utilisons la commande suivante:
ipkg install [nom du package]
Une fois les packages installés on a besoin de relancer le système avec la commande :
reboot
On peut par la suite brancher par exemple un périphérique de stockage USB à l'un des
ports du routeur. Pour pouvoir accéder au périphérique, il faut le monter sur le système de
fichiers dans /mnt:
mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt
On peut vérifier si le périphérique est détecté par la commande dmesg, et y accéder
dans le répertoire « /mnt ».
Pour démonter le périphérique, on utilise la commande umount /mnt
8
Projet S5
3 - Le SIP de notre routeur :
3.1 Le protocole SIP :
Session Initial Protocol (SIP) est un protocole de communication multimédia
standardisé par l’IETF (Internet Engineering Task Force) qui a été conçu pour ouvrir,
modifier et terminer des sessions entre un ou plusieurs utilisateurs. Ce protocole a été conçu
de façon à avoir une implémentation facile et une bonne flexibilité.
SIP n’est pas destiné, par contre, à être un protocole de communication général. C'està-dire qu’il ne transporte aucune donnée multimédia, il ne fait que gérer les sessions entres
des utilisateurs.
Ce protocole utilise des commandes simples en caractères ASCII, rappelant le
protocole HTML, dont les principales sont :
INVITE : Demande de début de session avec un autre utilisateur
ACK : Confirme l’établissement de la session
BYE : Termine la session.
Les requêtes sont émises à partir d’un User Agent, il en existe 2 types les SIP Client
User Agent et les SIP Server User Agent, suivant quel est le type du participant. Ces agents
permettent d’émettre et de recevoir les requêtes.
Un exemple d’échange standard dans le cas de la voix sur IP (VoIP) est représenté cidessous :
Figure 6 : échange standard dans le cas de la voix sur IP (VoIP)
9
Projet S5
Enfin le protocole SIP n’étant qu’un protocole de contrôle de la couche application
dans le modèle ISO, il est totalement indépendant du protocole utilisé pour transporter les
données multimédia. En général, pour la voix sur IP par exemple, il s’agit de RTP (Real-Time
Protocol) en liaison UDP.
Afin de supporter le protocole SIP, nous avons étudié puis installé le logiciel Milkfish
sur notre routeur.
3.2 Milkfish :
De façon à pouvoir utiliser ce protocole sur notre routeur, nous avons implémenté le
package Milkfish. Ce package, entièrement compatible avec la distribution OpenWrt,
comprend entre autres la prise en charge du protocole SIP, un serveur SIP et un Jabber offrant
la possibilité d’utiliser la messagerie instantanée.
Les paquets à télécharger pour pouvoir installer Milkfish sont :
milkfish-sip
milkfish-rtpproxy
milkfish-openser
milkfish-services
milkfish-webif
Le premier problème que nous avons rencontré est que le développement de Milkfish
n’a été prévu que pour la distribution « White Russian » de OpenWrt, alors que nous devions
utiliser « Kamikaze ». De façon à pouvoir étudier ce logiciel nous avons donc commencé par
charger le firmware WhiteRussian dans le routeur avec Milkfish. En effet le package était
compatible et comprenait une interface web très pratique et assez évoluée. On a pu constater
également avec WireShark que le serveur SIP fonctionnait. Après cette étude, nous avons
rechargé le firmware Kamikaze pour voir si Milkfish pouvait fonctionner.
Il s’est avéré que la fonctionnalité de Milkfish était suffisante pour permettre au
routeur de supporter le protocole SIP et fournir les applications de ce packages. Seule
l’interface Web ne fonctionnait pas, du fait de la structure différente du firmware. Il est
sûrement possible de l’implémenter en effectuant quelques modifications dans les fichiers de
configuration de Milkfish, mais le temps ne nous l’a pas permis.
Nous avons pu ainsi tester la gestion du protocole SIP à travers une connexion en
VoIP entre plusieurs ordinateurs. Nous disposions d’un ordinateur portable sous Linux
(distribution Ubuntu) avec le logiciel de voix sur IP « Linphone » ainsi que d’un autre
portable sous Windows XP avec le logiciel SJPhone et d’un PDA Dell Axim, également avec
SJPhone. La communication s’est établie sans aucun problème, tout comme le reste du
déroulement de la session. Nous avons eu la possibilité de nous enregistrer dans la base de
donnée du serveur SIP du routeur et ainsi non plus appelé par une adresse IP mais par le
pseudonyme de cette personne. Un exemple d’échange est disponible en annexe.
Enfin, la possibilité de gérer le protocole SIP nous permet de faire plus que de la voix
sur IP, notamment notre routeur pourrait tout à fait être implanté dans le projet HomeSIP (voir
illustration page suivante). Ce projet fonctionne entièrement à partir du protocole SIP, le
principe est de pouvoir connecter ensemble le maximum d’appareils électronique d’une
maison (électroménager, Internet, ordinateurs, téléphones, Webcam...) afin de pouvoir profiter
d’un réseau entièrement contrôlable à distance.
10
Projet S5
Figure 7 : Projet HomeSIP
Exemple d’échange de trames SIP entre le serveur et un participant :
REGISTER sip:192.168.1.1 SIP/2.0
Via: SIP/2.0/UDP 192.168.8.146:5060;rport;branch=z9hG4bK1215351527
From: <sip:[email protected]>;tag=585294075
To: <sip:[email protected]>
Call-ID: [email protected]
CSeq: 7 REGISTER
Contact: <sip:[email protected]:5060>
Max-Forwards: 70
User-Agent: Linphone-1.7.1/eXosip
Expires: 0
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP
192.168.8.146:5060;rport=5060;branch=z9hG4bK1215351527;received=192.168.1.173
From: <sip:[email protected]>;tag=585294075
To: <sip:[email protected]>;tag=329cfeaa6ded039da25ff8cbb8668bd2.38f3
Call-ID: [email protected]
CSeq: 7 REGISTER
Server: OpenSer 1.0.0 (boozy.milkfish.org)
Content-Length: 0
Warning: 392 192.168.1.1:5060 "Noisy feedback tells: pid=453
req_src_ip=192.168.1.173 req_src_port=5060 in_uri=sip:192.168.1.1
out_uri=sip:192
11
Projet S5
CONCLUSION
Ce projet a été très intéressant et nous a permis de découvrir un domaine jusque là
assez vaste pour nous.
Tout d’abord, il nous a permis de flasher un routeur pour mettre un autre "firmware"
qui se nomme OpenWrt.
Ensuite, nous avons mis en place diverses applications avec le montage d’une clé
USB permettant d’agrandir l’espace mémoire du routeur selon l’utilisation de ce que l’on veut
en faire.
Nous avons également installé un protocole SIP (Session Initiation Protocol)
permettant de faire de la voix sur IP (Internet Protocol). Pour cette application, nous avons pu
tester une communication entre deux ordinateurs mais également entre un ordinateur et un
PDA (Personal Digital Assistant).
12