Wifi à la demande avec le vénérable Linksys WRT54G

Dans le cadre de mon travail, il m’a été demandé de mettre en place pour un centre d’animation un petit réseau wifi afin que les adhérents puissent se connecter à Internet : deux ordinateurs fixe sous Debian et un point d’accès Wifi. J’ai donc recyclé une vieille unité centrale pour en faire un petit routeur proxy filtrant avec ipfire et un vénérable Linksys WRT54G qui traînait.

Les postes sous Debian sont en accès libre toute la journée mais les animateurs voulaient que le wifi soit activé certains jours de 14h à 18h et éventuellement à la demande. Le WRT54G sert à la fois de switch réseau et de point d’accès Wifi. Bien entendu il y a OpenWRT d’installé dessus avec le SSH d’activé (son adresse est 10.0.0.250).

Mise en place d’un script pour l’activation-désactivation du Wifi

La première étape est la création d’un script shell pour activer désactiver l’interface wifi du Linksys. Connectons nous à notre Linksys

ssh root@10.0.0.250

Créons le fichier contenant le script, rendons-le exécutable et ouvrons-le avec vi.

touch /sbin/wtoggle.sh
chmod + x /sbin/wtoggle.sh
vi /sbin/wtoggle.sh

Il suffit maintenant de coller les commandes ci-dessous.

#!/bin/sh

device="wl0"
case $1 in
    "disable")
        wifi down $device
        echo 0 > /proc/diag/led/ses_white
        echo 1 > /proc/diag/led/ses_orange
        echo 0 > /proc/diag/led/wlan
        uci set wireless.$device.disabled=1
        uci commit wireless
        logger "Wifi disabled"
    ;;
    "enable")
        uci set wireless.$device.disabled=0
        uci commit wireless
        wifi up $device
        echo 1 > /proc/diag/led/ses_white
        echo 0 > /proc/diag/led/ses_orange
        echo 2 > /proc/diag/led/wlan
        logger "Wifi enabled"
    ;;
esac

Le script fait trois choses :

  1. Activer / Désactiver le point d’accès Wifi
  2. Allumer la diode SES en blanc / orange en fonction de l’état de la connexion
  3. Activer / désactiver la diode WLAN

L’utilisation est simple : wtoggle enable pour activer le wifi et wtoggle disable pour le désactiver.

Créer la tache cron pour activer le wifi à certaines heures

Il suffit d’ajouter les deux lignes suivantes au cron pour programmer la mise en route du Wifi avec la commande crontab -e

00 14 * * 1-6 wtoggle enable
00 18 * * 1-6 wtoggle disable

Le réseau Wifi est donc allumé du lundi au samedi de 14h à 18h. Mais sur Openwrt le service cron n’est pas activé1. Il faut donc le faire avec les commandes2

/etc/init.d/cron start
/etc/init.d/cron enable

Activation / désactivation à la demande du Wifi

Il est parfois nécessaire d’allumer ou d’éteindre le wifi manuellement, pour ça nous allons détourner le bouton SES du routeur (vous savez celui avec le logo cisco dessus). si le Wifi est désactivé, une pression sur ce bouton l’activera et une autre pression le désactivera à nouveau.

Créons un fichiers bouttons dans le répertoire /etc/hotswap.d/button/ qui va contenir les commandes à effectuer lors de la pression d’un boutons sur le Linksys

mkdir -p /etc/hotswap.d/button/
vi /etc/hotswap.d/button/buttons

Voici le contenu de ce fichier

#!/bin/sh
device="wl0"
if [ "$BUTTON" = "ses" ] && [ "$ACTION" = "pressed" ] ; then
    case $(uci get wireless.$device.disabled) in
        0)
            /sbin/wtoggle.sh disable
            ;;
        1)
            /sbin/wtoggle.sh enable
        ;;
    esac        
fi 

Une fois enregistré, le tout devrait fonctionner : le bouton SES pour allumer /éteindre le wifi et la tâche cron pour le faire automatiquement en fonction des heures d’ouvertures. Le voyant du logo Cisco servant aux animateurs à visualiser rapidement si le réseau Wifi est actif ou non.