Overblog Suivre ce blog
Editer la page Administration Créer mon blog
La boîte à fourbi

Un serveur Linux qui consomme moins de 10 watts? C'est possible!

Oyez oyez!

Cela fait quelques mois que je suis ennuyé par la connexion Internet à mon travail : restrictive, elle ne me permet pas de faire ce que je veux et bloque même des sites que j'aime beaucoup aller voir (je vous vois venir avec vos gros sabots, mais ce qui m'intéresse, moi, ce sont les armes médiévales).

J'ai eu vent d'une solution assez complexe qui consiste à faire tourner, sur un PC, un serveur SSH qui permet de crypter les données et, via un tunneling simple, de naviguer au boulot avec votre connexion de chez vous, qui, elle, ne vous restreint pas.

Pratique, hein?

La personne qui m'a parlé de cela pratiquant déjà cet art, je lui ai demandé un accès à son serveur pour tester si ça marchait aussi pour moi (il s'avère que le réseau du boulot est assez particulier). Hop hop, ça marche, c'est classe.

Mais voilà les inconvénients :
1 - Il vous faut un PC allumé tout le temps chez vous ou chez la personne.
2 - Pour peu que la connexion de votre ami soit un peu faiblarde, à deux à naviguer, vous lui rendez la vie impossible (rien ne l'empêche de naviguer en même temps que vous!).
3 - Le jour où votre ami part en vacances, adieu la liberté.

On m'a parlé une petite carte électronique compatible avec Linux et qui permettrait de faire tourner le fameux serveur SSH... Pour une poignée de watts et à partir d'une simple clé USB.



I - Achat de la carte

Ca se passe ici : http://www.omnima.co.uk/store/catalog/Embedded-controller-p-16140.html .
Je vous recommande chaudement de prendre l'option Power supply : Power adapter EU plug pour avoir un transformateur fait pour la carte, et au choix, vous pouvez prendre le Programming tool : USB to UART pour pouvoir communiquer avec la carte en liaison RS232 si vous n'avez pas une interface existante (là, si vous ne comprenez déjà plus, vous pouvez passer votre chemin, malheureusement tout ceci requiert un certain niveau en informatique :( ).

Ensuite, toujours rayon options, je vous recommande Case : Small plastic case pour avoir un joli boîtier bien mieux foutu que la merde que j'ai bricolée (faut dire ce qui est) et enfin USB-based mini-distribution : Squidge on 1GB USB flash .

Cette dernière option est facultative, si vous ne la prenez pas et voulez utiliser une clé USB déjà existante, néanmoins sachez que si vous ne la prenez pas, il vous faudra un système sous Linux pour formater la clé USB en EXT3, le FAT n'étant pas reconnu par OpenWRT, la distribution Linux que nous allons utiliser.*

Pour ma part, j'ai utilisé Virtual Box avec une distribution Ubuntu, très pratique pour les débutants, et j'ai fait ma propre clé USB.

Très clairement, si vous ne voulez pas vous emmerder, prenez la clé USB, personnellement je regrette fort de ne pas l'avoir prise, mais il sera plus pratique d'avoir un système sous Linux de toute façon.



II - Installation de Squidge sur la clé USB (si vous ne l'avez pas prise toute faite)

Ici, je ne vais pas rentrer dans les détails de l'installation d'Ubuntu. Sachez juste que je pars du principe que vous avez un Ubuntu ou équivalent qui tourne et que vous avez quelques notions de Linux graphique.

Téléchargez Squidge, la distribution "toute faite" de OpenWRT, ici : ftp://squidge.hobbybob.info/squidge-1.7.tar.bz2 .
Sous Ubuntu ou peu importe votre Linux, faites un simple clic droit sur le fichier pour extraire le contenu de celui-ci.

Ceci fait, formatez votre clé USB en au format ext3 (ceci est possible en installant Gparted en utilisant le Gestionnaire de Paquets Synaptics dans la partie Système > Administration).

Ensuite, copiez l'intégralité de Squidge, sachant qu'il vous faut, dans la racine de la clé, tous les répertoires type etc, bin... En tout, 15 répertoires (+éventuellement Lost+Found suite au formatage).



III - Téléchargement du noyau Linux sur la carte

La prochaine étape consiste à envoyer le noyau Linux sur la carte. Ce noyau est situé dans le répertoire boot de Squidge et s'appelle firmware.csys.

Vous trouverez à l'adresse http://www.omnima.co.uk/forums/index.php?showtopic=4 quelques sujets en anglais sur comment vous connecter à la carte. Si vous avez une interface série faite maison, je vous recommande de jeter un oeil à la documentation de la carte à l'adresse suivante : http://www.omnima.co.uk/forums/index.php?act=attach&type=post&id=18 .
Les paramètres à entrer pour la liaison sont :
115200 bauds
8 bits de données
Aucune parité
1 bit d'arrêt
Aucun contrôle de flux.

Ensuite, préparez-vous : une fois la carte allumée, vous n'aurez que quelques secondes pour sélectionner et envoyer le fichier firmware.csys à la carte.
Je vous conseille donc de copier de fichier sur le bureau de Windows ou un emplacement facilement atteignable. Vous ne voyez pas encore de quoi je parle? C'est normal.

Mettez la carte sous tension une fois HyperTerminal (ou équivalent) lancé, puis lorsque vous voyez ADM5120 Boot... , appuyez trois fois sur la touche Espace.
Le menu suivant apparaît :

Linux Loader Menu
====================
(a) Download vmlinuz to flash ...
(b) Download vmlinuz to sdram (for debug) ...
(c) Exit

Please enter your key :


Tapez a.  Ne tentez pas b . Pas que ça fera tout planter, ou brûler, mais ça ne fera... Rien. J'ai tenté, justement pour être sûr de ne rien envoyer de mauvais sur la carte.
Sauf qu'en sdram, ça ne marche pas du tout, pour que le noyau boote, il faut qu'il soit envoyé en flash. Ayez confiance, comme dirait l'autre.

Attention, c'est là qu'il faut être rapide. Une fois appuyé sur a puis Entrée, sélectionnez le bouton Envoi dans la barre d'icônes d'HyperTerminal. Sélectionnez le fichier firmware.csys et dans le menu déroulant, Xmodem, puis Envoyer.
Si vous avez réussi à le faire suffisamment rapidement, les symboles § apparaissant dans HyperTerminal se sont arrêtés et le fichier est en cours d'envoi.

L'envoi terminé, mettez la carte hors tension et branchez la clé USB, puis remettez sous tension, toujours en ayant HyperTerminal de branché.
Si tout s'est bien passé, une série - une LONGUE série - de messages devraient défiler sur HyperTerminal.

Attention : je ne comprends pas pourquoi, mais parfois un message en rapport avec la clé USB tourne en boucle et la carte ne termine pas son boot :
usb 1-2: reset full speed USB device using adm5120-hcd and address 2
Auquel cas, mettez la carte hors tension, débranchez la clé USB et changez-la de port USB, puis remettez sous tension.

Si votre carte boote correctement, vous devriez avoir quelque chose du genre :
BusyBox v1.11.1 (2008-09-13 03:36:25 BST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Squidge v1.7 (bifferos@yahoo.co.uk)

root@OpenWrt:/# adm5120_wdt: enabling watchdog timer


Appuyez sur Entrée une nouvelle fois pour avoir le prompt :
root@OpenWrt:/#
Félicitations, la carte est prête!



IV - Installation des packages du serveur SSH

Maintenant que Linux tourne tranquillement - notez que vous pouvez perdre la communication, caractérisé par des "hiéroglyphes" quand vous appuyez sur Entrée, auquel cas il vous suffit de débrancher puis rebrancher la carte et de la laisser rebooter  - il nous faut installer les packages du serveur SSH.

Tapez cd /www/squidge/packages, puis les commandes suivantes :

opkg install zlib_1.2.3-5_mipsel.ipk
qui vous donnera :
Installing zlib (1.2.3-5) to root...
Configuring zlib

Collected errors:
 * Package kmod-usb-core version 1-0 has no architecture specified, defaulting to mipsel


opkg install libopenssl_0.9.8h-1_mipsel.ipk

qui vous donnera :
Installing libopenssl (0.9.8h-1) to root...
Configuring libopenssl


opkg install openssh-server_5.0p1-1_mipsel.ipk
qui vous donnera :
Installing openssh-server (5.0p1-1) to root...
Configuring openssh-server

adding group sshd to /etc/group
adding user sshd to /etc/passwd


opkg install openssh-client_5.0p1-1_mipsel.ipk
qui vous donnera :
Installing openssh-client (5.0p1-1) to root...
Configuring openssh-client


ssh-keygen
qui vous donnera :
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
<entrée>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
<entrée>
Enter same passphrase again:<entrée>
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
(série de chiffres et de lettres séparés par deux points) root@OpenWrt


/etc/init.d/sshd enable
/etc/init.d/sshd start

Ces deux lignes ne renvoient rien, mais elles sont censées démarrer SSH.

opkg install dropbear_0.51-1_mipsel.ipk
qui vous donnera :
Installing dropbear (0.51-1) to root...
Collected errors:
 * Package dropbear wants to install file /usr/bin/scp
        But that file is already provided by package  * openssh-client
 * Package dropbear wants to install file /usr/bin/ssh
        But that file is already provided by package  * openssh-client


passwd
Entrez un mot de passe qui sera nécessaire pour vous connecter à OpenSSH, le serveur. Par la même occasion, ce sera le mot de passe pour root, l'utilisateur principal de la carte.
Ce qui vous donnera :
Changing password for root
New password:
Retype password:
Password for root changed by root



Ensuite, tapez netstat -l (L minuscule), qui devrait vous donner :
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN

netstat: no kernel support for AF INET6 (tcp)
netstat: no kernel support for AF INET6 (udp)
netstat: no kernel support for AF INET6 (raw)
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path


Le "ssh" dans la seconde ligne commençant par "tcp" permet de constater qu'un serveur SSH est en train de tourner.

ssh localhost
Vous allez maintenant valider la fonction SSH en "ssh-ant" votre propre carte.
Ceci vous donnera :
root@OpenWrt:/# ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 7c:3f:78:ab:76:7f:6c:d1:63:7a:3f:60:a2:e1:0d:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
root@localhost's password:


BusyBox v1.11.1 (2008-09-13 03:36:25 BST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Squidge v1.7 (bifferos@yahoo.co.uk)

root@OpenWrt:~#

Et voilà, SSH est fonctionnel!


V - Mise en place du routage

Lorsque OpenWRT est lancé sur la carte, et que bien entendu vous avez votre câble internet branché, tapez cat /etc/config/network.
Vous devriez avoir un truc du genre :

root@OpenWrt:/# cat /etc/config/network
# Copyright (C) 2006 OpenWrt.org

config interface loopback
        option ifname   lo
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0

config interface lan
        option ifname   eth0
        option type     bridge
        option proto    static
        option ipaddr   192.168.1.1
        option netmask  255.255.255.0


La ligne ipaddr dans interface lan est votre adresse IP locale, donc dans votre réseau domestique. Il est très important que cette adresse soit proche de celles de vos autres postes (PC, routeur internet...).
Par exemple, chez moi, mon routeur internet a l'IP 192.168.0.1, mon PC est en 192.168.0.10, et pour que la carte OpenWRT soit "visible" par les autres acteurs du réseau (donc mon routeur et mon PC), il faut que l'IP s'en rapproche, clairement que les trois premiers groupes de chiffres soient les mêmes (pour être sur le même sous-réseau).

Renseignez-vous sur vos IP locales, puis éditez l'IP de la carte en tapant vi /etc/config/network , puis appuyez sur <echap> puis i, déplacez-vous avez les flèches et modifiez l'ip pour la rendre proche des autres. Chez moi, par exemple, la carte est en 192.168.0.99. L'IP modifiée, tapez ensuite <echap> :wq , ce qui sauvera le fichier network et quittera l'éditeur.

Ensuite, nous allons mettre en place la passerelle qui permettra de naviguer sur Internet, donc, votre routeur Internet.
Rebelotte, vi /etc/config/network, puis <echap> i, déplacez-vous en bas du fichier et tapez <tab> option <espace> gateway <tab> [IP de votre routeur Internet, généralement 192.168.0.1 ou 192.168.1.1].

Tant qu'à faire, nous allons aussi implémenter les DNS en dur et prendre ceux de votre routeur (donc, ce qui transforme une IP en nom de domaine .com, .fr, etc.. .
Toujours en éditant le fichier network, ajoutez une nouvelle ligne commençant par <tab> puis option <espace> dns <tab> [IP de votre routeur Internet, généralement 192.168.0.1 ou 192.168.1.1].

Ce qui vous donne donc un truc dans le genre :

root@OpenWrt:/# cat /etc/config/network
# Copyright (C) 2006 OpenWrt.org

config interface loopback
        option ifname   lo
        option proto    static
        option ipaddr   127.0.0.1
        option netmask  255.0.0.0

config interface lan
        option ifname   eth0
        option type     bridge
        option proto    static
        option ipaddr   192.168.0.99
        option netmask  255.255.255.0
        option gateway  192.168.0.1
        option dns      192.168.0.1


... Enfin ça, c'est dans mon cas.

Ensuite, il faut encore rentrer les DNS dans la carte. C'est un peu confus dans ma pauvre tête mais une chose est sûre, ça marche chez moi.
echo "nameserver 192.168.0.1"> /etc/resolv.conf
echo "nameserver 193.55.10.101">> /etc/resolv.conf


Ensuite, tapez reboot pour laisser la carte redémarrer, pour qu'elle prenne en compte la passerelle (engtre autres), enfin, qu'elle redémarre l'interface Ethernet, somme toute!

Le prochain netstat -l vous donne :
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN

netstat: no kernel support for AF INET6 (tcp)
netstat: no kernel support for AF INET6 (udp)
netstat: no kernel support for AF INET6 (raw)
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path


Une ligne a disparu, mais ça ne remet pas en cause le fonctionnement, alors...
Après cela, si vous tapez wget http://www.google.fr, cela devrait vous donner :

root@OpenWrt:/# wget http://www.google.fr
Connecting to www.google.fr (209.85.229.105:80)
index.html           100% |*******************************|  5428  --:--:-- ETA


Si vous avez quelque chose dans ce goût-là, c'est gagné, votre carte se connecte à Internet! Sinon, heum... Revérifiez bien que vous avez rentré ce que j'ai dit comme je l'ai dit, ou bien revérifiez vos IP, il se peut qu'il y ait un souci de ce côté-là!

Ah, une chose : il est possible que votre routeur (celui qui vous donne l'accès à Internet) vous empêche d'accéder à l'extérieur. Pour cela, vous devez y accéder depuis un PC (enfin, depuis ailleurs que la carte sur laquelle tourne Linux) et changer le port forwarding dans les options de votre routeur.

A ce propos, je vous encourage à changer le port de votre serveur SSH (le port par défaut est 22). Pour faire cela, tapez vi /etc/ssh/sshd_config et, dans les premières lignes, trouvez :

#Port 22

puis appuyez sur <esc> i (mode insertion de caractère), et supprimez le #, puis changez le port pour celui que vous voulez. Attention, certains ports sont réservés (comme le port 80) mais vous pouvez trouver une valeur à la noix entre 1 et 65535.
Ensuite, appuyez sur <esc> puis :wq pour sauvegarder le fichier modifié.
N'oubliez pas de taper reboot pour redémarrer le contrôleur!

VI - Commandes diverses

Voici quelques commandes bien utiles implémentées sur OpenWRT :
reboot : ... Pas la peine que j'explique?

ls : liste les fichiers dans le répertoire (remplace le vieux dir sous DOS ou autres versions de Linux)

cd <destination> : change le dossier courant vers destination. Attention, si vous mettez un au début, c'est un chemion absolu; sinon, c'est un chemin relatif (vous vous déplacez de dossier en dossier et non à partir de la racine).

vi <répertoire>/<fichier> : édite fichier en mode texte.
Sous-commandes de cet éditeur :
<esc> puis 'i' : passe en mode insertion de caractères
<esc> puis ":wq" : sauve le fichier et quitte vi.
<esc> puis ":quit!" : quitte l'éditeur.

cat <répertoire>/<fichier> : imprime en mode texte fichier.

route : affiche la table de routage (pratique pour savoir si une passerelle est implémentée).

wget http://<ip ou adresse si DNS configuré> : se connecte à ip ou adresse.

ifconfig : affiche la configuration des ports réseau actifs (donc ceux sur lesquels se trouvent un câble réseau branché)

opkg install <nom du package>.ipk : une fois que vous êtes dans le répertoire /www/squidge/packages, cette commande installe le package <nom du package>. C'est un nom complexe et je vous suggère d'ouvrir le répertoire en question sous Ubuntu pour avoir une meilleure idée de ce dont je parle :p .

Partager cette page

Repost 0