OpenWISP, le contrôleur Wi-Fi universel pour OpenWRT 😎

Il y a pas très longtemps sur Twitter, j'annoncais avoir installé OpenWRT sur des bornes Cisco Meraki MR42 (non pas sans mal). 😅

Lien du Tweet en question : https://twitter.com/ju_hnny5/status/1679581547513389057?s=20

Avant de commencer, j'imagine que le projet OpenWRT ne parle pas à tout le monde, pour faire sur ce qu'est ce projet puisque sa présentation n'est pas le but de cet article est :

  • Un firmware open source (basé sur GNU/Linux) permettant de recycler du vieux matériel ou du matériel propriétaire en routeur libre. 😍

Ce n'est pas forcémment toujours très facile à déployer mais ça a le mérite de permettre de recycler du matériel voué à la poubelle (comme le matériel Cisco Meraki, qui sans licence ne sert à rien).

J'avais d'aillers déjà écrit un précédent article sur le déploiement d'OpenWRT sur une borne MR33 qui est lisible ici. 😎

Intéressant mais commençons à détailler ce qu'est OpenWISP.

Qu'est-ce qu'un contrôleur Wi-Fi ? 🤪

Avant de parler d'OpenWISP, j'aimerais simplement faire un rappel de ce qu'est un contrôleur Wi-FI, de son intérêt pour que vous puissiez facilement comprendre l'intérêt d'OpenWISP. 😋

Ainsi un contrôleur Wi-Fi va principalement servir à :

  • Gérer de manière centralisée un ensemble de bornes Wi-Fi (leurs configurations, leurs utilisateurs; leurs mises à jours, etc).
  • Collecter (superviser) l'état en temps réel des différentes bornes.
  • Fournir des informations rapide sur l'emplacement des bornes et intéragir avec elles.
  • Fournir de l'accès dynamique (via RADIUS ou autre) et/ou un portail captif (pratique dans des contextes de lieux publiques comme des hôtels, restaurants mais aussi du BYOD).
  • Et bien d'autres choses ! 😎

Ok cool, mais OpenWISP dans tout ça ? Eh bien globalement il fait tout ce qui est cité plus haut ! 🤓

Installer OpenWISP 2

Globalement, la meilleure manière (et surtout la plus simple), c'est par le biais de la collection Ansible fournit par OpenWISP.

Pour ce faire, il faut commencer par install cette collection :

ansible-galaxy install openwisp.openwisp2
ansible-galaxy collection install "community.general:>=3.6.0"
ansible-galaxy collection install "ansible.posix"

On va créer ensuite le dossier où l'on va travailler :

mkdir ~/openwisp2-ansible-playbook
cd ~/openwisp2-ansible-playbook

On va créer le fichier d'inventaire :

[controller]
openwisp.homelab.lan

Et maintenant créer le playbook.yml :

- hosts: controller
  become: "{{ become | default('yes') }}"
  roles:
    - openwisp.homelab.lan
  vars:
    openwisp2_default_from_email: "contact@homelab.lan"

Ne reste plus qu'à appliquer le playbook :

Biensûr, il faudra remplacer <user> par votre nom d'utilisateur souhaité ! 😁

Il ne restera plus qu'à tenter d'accéder à l'interface Web :

  • https://mon_ip/admin

Maintenant, nous devons y joindre nos bornes Wi-Fi.

Installer l'agent OpenWISP 2

Ce n'est pas magique, pour qu'OpenWISP soit capable de déployer des configurations et intérragir avec les bornes, il faut déployer l'agent sur celles-ci. 😄

Pour ce faire :

opkg update
opkg install https://storage.googleapis.com/downloads.openwisp.io/openwisp-config/latest/openwisp-config_1.1.0a-1_all.ipk

Il faut redémarrer le service après installation :

/etc/init.d/openwisp_config start

On va à présent configurer l'agent pour qu'il sache qui contacter en éditant le fichier /etc/config/openwisp et en ajoutant le contenu suivant :

config controller 'http'
        option url 'https://192.168.4.1'
        option verify_ssl '0'
        option management_interface 'br-lan'
        option uuid '4917xxxxxxxx'
        option key '91d9xxxxxx'
        option shared_secret 'dPacHxxxxxx'

Il ne restera qu'à redémarrer une nouvelle fois le service :  

/etc/init.d/openwisp_config start

A noter que la partie uuid, key et shared_secret est à récupérer dans l'interface lorsque vous déclarez votre nouvel AP. 😇

Une fois que c'est OK, on peut visualiser les bornes ici :

Publier un SSID en roaming 🥸

Comme première configuration, nous allons déployer un nouveau réseau Wi-Fi (visible via le SSID) en roaming, quand je parle de roaming, je parle de la norme 802.11r.

Cette norme permet aux appareils de se déplacer sans se déconnecter en passant d'une borne à l'autre (ce que l'on appelle également donc du "roaming"). 😎

Sur le lab, nous avons 3 bornes espacées pour que le roaming puisse fonctionner.

Ainsi pour commencer, nous allons créer un nouveau "template" de configuration dans la section du même nom dans l'interface.

Dans notre cas, nous allons le nommer "SSID Home" (mais peu importe son nom à vrai dire ...).

Pour simplifier la suite de la configuration, nous allons devoir ajouter 2 variables qui seront réutilisées, à savoir le nom du SSID et le mot de passe :

Ensuite, il faudra ajouter une nouvelle interface que l'on nommera wlan0 si celle-ci n'est pas déjà utilisée sur vos bornes :

Dans mon cas je vais utiliser la radio2 de mes bornes Cisco Meraki MR42 car c'est celle qui est compatible avec le plus de normes.

Il nous faudra utiliser notre variable wlan0_ssid pour référer le SSID. A noter que le moteur de templating est jinja2 puisque l'application est écrite en Python 3.

Il faudra absolument cocher les cases :

  • Roaming
  • FT PSK Generate local

Les autres sont normalement pré-cochées. 🙃

Pour continuer on va déclarer la carte réseau qui fournira le réseau, dans notre cas il se nomme "lan". Et pour terminer la configuration, on va spécifier le type de chiffrement de mot de passe et la clé.

Cette configuration devrait s'appliquer automatiquement sur vos bornes. Pour vérifier, vous pouvez vous rendre sur l'interface LuCI des bornes. ☺️

Conclusion

Vous l'aurez compris, on peut facilement déployer de la configuration par le bias d'OpenWISP sur des bornes OpenWRT sans trop de difficulté et ainsi maintenir un parc homogène en terme de configuration. 😇