Note : ce post n’avais pas été republié depuis la réinstallation de mon serveur car il n’était plus à jour, je l’ai donc rafraichi 🙂 il fonctionne aussi (modifiez juste l’architecture cible) avec un routerboard 450.
Depuis longtemps, je disposais d’une carte Routerboard 133 qui ne me servait pas. J’ai donc regardé comment l’utiliser au mieux.
Les cartes Routerboard (RB) sont fournies avec un OS spécialisé pour faire du routage RouterOS. Il ressemble dans sa conception à JunOS l’OS des switchs/routeurs Juniper.
Avantages :
- il est parfaitement adapté au matériel.
- propose beaucoup de fonctionnalités.
- documentation officielle détaillée.
Inconvénients :
- pas libre.
- pas très répandu.
- pas évident à prendre en main.
- peu d’informations en dehors du manuel constructeur.
- Openvpn uniquement en connexion TCP (et toujours pas UDP).
Donc j’ai préféré installer la distribution OpenWRT. L’installation sur une carte RouterBoard se fait en plusieurs étapes :
- compiler une image ramdisk d’OpenWRT pour votre carte RB.
- recompiler OpenWRT pour obtenir le kernel et le système de fichiers.
- démarrer en bootp sur l’image netboot.
- transférer le kernel et le système de fichier sur le RouterBoard.
Pour la compilation, vous aurez besoin des paquets suivants :
aptitude install gcc binutils bzip2 flex python perl make find grep \
diff unzip gawk getopt libz-dev headers g++ git subversion ncurses-dev
Compilation de l’image ramdisk :
Récupérez les sources de la dernière version sur le site officiel :
git clone git://git.openwrt.org/12.09/openwrt.git
Note : la version 14.07 (Barrier breaker) ne contient pas le système cible ADM5120, vous ne pouvez donc pas l’utiliser.
Note : si vous compilez depuis un périphérique monté, vous aurez des erreurs indiquant une dépendance manquante alors qu’elle est installée exemple :
Build dependency: Please install the GNU C++ Compiler (g++).
Dans ce cas, placez vous sur une autre partition ou ajoutez les arguments suivants lors du montage du périphérique : user,exec,suid,dev.
un dossier openwrt est créé par le git clone, déplacez vous dedans.
Faites un make menuconfig
Choisissez comme paramètres principaux ::
- Target System : Infineon/ADMTek ADM5120
- Subtarget : MikroTik RB-1xx
- Target Profile : Mikrotik RouterBoard 1xx family
- Target Image: ramdisk
Lancez la compilation, avec la commande make -j n V=99 (avec n le nombre de tâches à exécuter en parallèle en fonction du nombre de cœurs de votre machine) cela va prendre un certain temps.
Une fois terminé, vous trouverez dans le dossier ./bin/adm5120/ un fichier openwrt-adm5120-rb1xx-vmlinux-initramfs.elf, celui ci nous permettra de démarrer le Routerboard en mémoire.
Compilation de l’image finale
Refaites ensuite un make menuconfig, sélectionnez les mêmes paramètres sauf pour « Target image »
- Root filesystem archives : tar.gz
- Root filesystem images : jffs2
Puis sauvez et relancer la compilation.
Vous trouvez dans le dossier bin/ plusieurs nouveaux fichiers ceux qui nous intéressent sont openwrt-adm5120-rb1xx-vmlinux.elf c’est le kernel et openwrt-adm5120-rb1xx-RouterBoard-rootfs.tar.gz c’est le système de fichiers.
Démarrage en bootp :
Il vous faudra :
- un moyen de vous connecter sur le port série qui fera office de console.
- l’image netboot de démarrage en ram (fichier initramfs elf).
- le kernel (fichier elf)
- le système de fichier racine dans un fichier compressé tar.gz.
- un serveur DHCP (isc-dhsp-server).
- un serveur tftp (atftpd).
- un serveur web (Apache 2)*
ddns-update-style none;
option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
}
host routerboard {
hardware ethernet 00:0c:42:XX:XX:XX;
fixed-address 192.168.1.100;
next-server 192.168.1.2;
filename "openwrt-adm5120-rb1xx-vmlinux-initramfs.elf";
}
Il faut également un serveur tftp afin de délivre le fichier elf, j’utilise atftpd en direct (sans xinetd). Le fichier de config est /etc/default/atftpd. Le dernier paramètre indique le dossier ou est placé le fichier de boot indiqué par le DHCP.
USE_INETD=false
OPTIONS=" --daemon --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 \
--mcast-addr 239.255.0.0-255 --port 69 --mcast-ttl 1 --maxthread 100 \
--logfile /var/log/atftpd.log --verbose=9 /tftpboot"
Note : en cas de problème au démarrage il n’y a pas de message, il faut consulter le fichier de log.
Enfin, Apache sera juste utilisé pour délivrer les fichiers kernel et image du filesystem avec wget, pas de configuration spécifique.
Placez le fichier initramfs.elf dans le répertoire servi par atftpd et indiquez son nom dans le fichier dhcpd.conf, relancez les deux services.
Placez le fichier elf et le tar.gz dans le DocumentRoot du serveur web.
Transfert des fichiers
Connectez vous en console sur le RB par le port série, putty (lancé en root) fonctionne très bien, picocom aussi. Pour ma part, j’ai utilisé un adaptateur USB vers série et mon port série apparait en /dev/ttyUSB0 (Si ce n’est pas votre cas, surveillez le syslog au moment de brancher l’adaptateur) Le débit de mon RouterBoard est 115200.
Branchez le port série sur le RB, reliez le premier port Ethernet (celui qui fait PoE) sur votre réseau et branchez son alimentation. Vous devriez voir la séquence de boot du RouterBoard, affichée. Vous avez 2 sec pour appuyer sur une touche afin d’afficher le menu de démarrage. Celui ci vous permet de sélectionner
- le « boot device » [o]
- choisissez Boot from Ethernet [e]
- le « boot protocol [p]
- choisissez bootp protocol [1]
Quittez le menu, le routeur redémarre. Il devrait obtenir l’adresse IP fournie par votre serveur DHCP et commencer à charger le fichier elf.
Le système démarre et vous rend la main, vous pouvez lister les partitions de la mémoire nand avec le commande cat /proc/mtd
Selon le modèle vous pouvez en avoir un nombre variable, sur mon RB133 il y en a 4 :
- mtd0 « booter »
- mtd1 « firmware »
- mtd2 « kernel »
- mtd3 « rootfs »
Les deux premières ne doivent pas être modifiées sous peine de rendre inutilisable le routeur.
Monter la partition kernel
mount /dev/mtdblock2 /mnt
cd /mnt
ls
Vous devez trouver un fichier kernel et peut être un dossier lost+found.
Note : vous pouvez faire une copie du fichier kernel original et du contenu de la partition mtdblock3 avec scp afin de conserver un backup.
Récupérez le fichier bin par un wget ou scp et remplacez le kernel.
cd /tmp
wget http://192.168.1.2/openwrt-adm5120-rb1xx-vmlinux.elf
renommez le kernel
mv openwrt-adm5120-rb1xx-vmlinux.elf /mnt/kernel
umount /mnt
Faites de même avec la partition système :
mount /dev/mtdblock3 /mnt
cd /mnt
ls
Note : vous trouvez ici une arborescence linux classique, faites donc la commande dont vous avez toujours rêvé ^^ :
rm -rf *
wget http://192.168.1.2/openwrt-adm5120-rb1xx-rootfs.tar.gz
tar -xzvf openwrt-adm5120-rb1xx-rootfs.tar.gz
ls
rm openwrt-adm5120-rb1xx-rootfs.tar.g
Si tout est bon quittez le dossier, démontez le et redémarrez
cd /root
umount /mnt
reboot
Il faudra ensuite repasser par le menu et paramétrer le boot device en « boot from NAND only » et vous pouvez démarrer sur votre nouveau système 🙂
Les principaux sites qui m’ont permis de mettre en place cette procédure :