Installer OpenWRT sur Cisco Meraki MR33 😆

J'avais depuis quelques temps, une borne d'accès Wi-Fi (autrement appelée Access Point, Cisco Meraki MR33) qui prenait la poussière dans l'un de mes tiroir, j'ai décidé d'essayer (sans mal), d'installer OpenWRT et de vous donner la manip à suivre pour que vous puissiez y arriver du premier coup. 😊

Cette borne m'avait été offerte à l'époque par Cisco Meraki en ayant simplement suivi un webinar, d'ailleurs ce format est toujours d'actualité chez eux. 😱

D'ailleurs, j'avais également reçu un switch PoE+ 8 ports en suivant ce webinar.

Bon, revenon à nos moutons, avant d'entreprendre quoi que ce-soit, vous devez possèder le matériel suivant :

  • Des câbles Jumper Wire (x3), lien.
  • Un RaspberryPI avec RaspberryPI OS
  • Un tournevis torx, diammètre 4
  • Un câble RJ45
  • Et votre cerveau 🤯

Une fois que vous avez tout celà, vous allez devoir cloner le repo suivant sur votre Raspberry.

git clone https://github.com/julienbriault/mr33-openwrt.git

Installation des prérequis 😆

Si vous avez installé la toute dernière version de RaspberryPI OS et que vous avez fait un cat /etc/debian-release vous vous rendrez compte que celui-ci est basé sur Debian 11 (obviously). 😇

Cette version ne possède plus dans ses repos pip2 Ainsi, il nous faut l'installer manuellement :

sudo apt update; sudo apt install python2 curl -y
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py


# On peut vérifier que ça marche bien avec la commande
pip2 --version

Une fois que c'est fait, on va pouvoir installer la seule dépendance du script ubootwrite.py à savoir 'serial' :

pip2 install serial

‼️ A noter que toute cette partie peut être réalisée avec Docker également (allez voir le README du repo suivant).

Activation du mode console sur le RaspberryPI 🧐

Grosso merdo, sur votre Raspberry, nous allons utiliser 3 pins pour la console (dont un qui est pour la masse: GND).

Il faudra d'ailleurs faire très attention à ne pas se décaler en connectant les jumpers car sinon, ça ne risque pas de fonctionner. 😄

Source: https://www.ibeyonde.com/raspberry-pi-serial-ports.html

Ainsi pour activer ce fameux mode console (un peu comme si on voulait activer un port RS232 sur un pc classique), il faut utiliser l'utilitaire "raspi-config" en CLI et se rendre dans 'Interfacing options' > 'serial'.

Sur le prompt 1, vous devez spécifier 'no', sur le prompt 2 vous devez spécifier 'yes' pour l'activer. 🥸

Il vous faudra redémarrer dans l'idéal. Ainsi, vous pouvez ensuite contrôler avec la commande :

ls -l /dev | grep serial

Vous devriez obtenir :

  • serial0 -> ttyS0
  • serial1 -> ttyAMA0

Démontage et connexion

Sous votre borne, il vous faudra retirer les patins pour y dévisser les vis présentent en dessous.

Je vous conseil de vous aider d'un médiator en plastique pour déclipser la borne sans l'abîmer.

Maintenant que votre borne est éventrée. Nous allons devoir la connecter en console au RaspberryPI. 😇

Pour ce faire, munissez-vous de vos jumpers et connectez comme suit :

  • GND > blanc > pin tout à droite de la borne ;
  • GPIO14 > bleu > pin au centre de la borne ;
  • GPIO15 > rouge > pin à gauche (à côté de celui qui possède la flèche blanche).

Il est important de noter qu'il ne faut surtout rien connecter sur le pin avec un flèche blanche sur la borne.

Une fois que c'est fait, nous allons pouvoir flasher la borne (envoyer uboot). 😊

Envoyer uboot 🤗

Pour ce faire rien de bien compliqué, vous devez utiliser les commandes suivantes :

cd mr33-openwrt/ubootwrite
chmod a+x ubootwrite.py
./ubootwrite.py --write=mr33-uboot.bin --serial=/dev/ttyS0

Lancez le script sans avoir allumé la borne, vous devriez, tant que la borne n'est pas allumée, avoir le prompt "Uploading Image".

Allumez-la, et l'upload de l'image devrait commencer.

Uboot va nous être très pratique car il va nous fournir un serveur ftp pour envoyer l'image d'OpenWRT par la suite.

Une fois que l'image est envoyée, vous devriez obtenir un "Hello from MR33 U-BOOT".

Envoyer l'image initramfs 😱

Vous devez connecter votre raspberry avec une adresse IP dans le subnet 192.168.1.0/24 pour que vous puissiez accéder à la borne qui possède à présent l'IP (192.168.1.1).

Il nous faut à présent envoyer l'image avec la commande suivante :

echo -e "openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb" | tftp 192.168.1.1

Une fois que c'est envoyé, laissez le temps au MR33 de démarrer.

Vous pouvez passer à l'étape suivante lorsque la LED d'état passe au vert et cesse de clignoter. 🤠

Il ne vous reste plus qu'à vous connecter en SSH pour valider qu'OpenWRT est bien présent. Attention à ne pas redémarrer la borne, sinon, il faudra tout recommencer, pour le moment, nous n'avons rien écrit dans la NVRAM.

ssh root@192.168.1.1
root@OpenWrt:~#

Prévoir un retour arrière 🤩

Comme nous n'avons pas encore fait de sauvegarde de l'OS déjà présent, et que nous n'avons pas écrasé la NVRAM, il nous faut le faire pour pouvoir faire une marche arrière si tel est le cas.

Pour ce faire, il faut utiliser les commandes suivantes :

file="openwrt-ipq40xx-meraki_mr33-initramfs-fit-uImage.itb"
size=$(cat "$file" | wc -c)
ubirename /dev/ubi0 part.old part.meraki.old
ubimkvol /dev/ubi0 --size=$size --type=static 
--name=part.old

Volume ID 99, size 49 LEBs (6221824 bytes, 5.9 MiB), LEB size 126976 bytes (124.0 KiB), static, name
"part.old", alignment 1
Ubimkvol generates a new Volume ID (marked in red). This ID is used for the next command so please
replace the 99 with the correct value.

ubiupdatevol /dev/ubi0_99 "$file"

A noter que /dev/ubi0_99 correspond au Volume ID 99 présent un peu plus haut, ainsi ce numéro pourra changer en fonction du cas de figure. 😎

Installer OpenWRT pour toujours !

Maintenant que l'on a préparé un retour arrière, nous allons pouvoir installer OpenWRT, pour ça, il faut copier le fichier openwrt-ipq40xx-meraki_mr33-squashfs-sysupgrade.bin sur notre machine avec la commande :

scp openwrt-ipq40xx-meraki_mr33-squashfs-sysupgrade.bin root@192.168.1.1:/root/

Ainsi le fichier sera présent dans la home directory de root. 🤭

Il restera donc sur la machine à utiliser les commandes :

ubirename /dev/ubi0 part.safe part.meraki
sysupgrade -v openwrt-ipq40xx-meraki_mr33-squashfs-sysupgrade.bin

Une fois que c'est fait, la borne va à nouveau redémarrer, vous pourrez ensuite vous connecter à l'interface web d'OpenWRT (via http://192.168.1.1).

Restaurer le firmware d'origine 😜

Pour restaurer le firmware d'origine, il suffit d'utiliser les commande suivantes :

ubirename /dev/ubi0 part.safe part.openwrt part.old part.fallback
ubirename /dev/ubi0 part.meraki part.safe part.meraki.old part.old

# Supprimer les partitions OpenWRT
ubirmvol /dev/ubi0 --name=rootfs
ubirmvol /dev/ubi0 --name=rootfs_data

Sources

MR33 – Google Drive