xieme-art/content/articles/archives/wifi-a-la-demande-avec-le-venerable-linksys-wrt54g/index.md
2019-05-14 14:50:52 +02:00

136 lines
4.2 KiB
Markdown

Title: Wifi à la demande avec le vénérable Linksys WRT54G
Date: 2017-03-09 15:57
Category: sysadmin
Tags: OpenWRT, Wifi, réseau, pl-fr
Status: published
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][l_ipfire] et un vénérable [Linksys
WRT54G][l_wrt54g] qui traînait.
[l_ipfire]:http://www.ipfire.org/
[l_wrt54g]:https://wiki.openwrt.org/toh/linksys/wrt54g
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.
```bash
#!/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é[^n_cron-openwrt]. Il faut donc le faire avec
les commandes[^n_openwrt-buttons]
~~~
/etc/init.d/cron start
/etc/init.d/cron enable
~~~
[^n_cron-openwrt]: voir sur la [documentation
d'openwrt](https://wiki.openwrt.org/doc/howto/cron#activating_cron)
### 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
```bash
#!/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.
[^n_openwrt-buttons]:voir sur la [documentation d'openwrt](https://wiki.openwrt.org/doc/howto/hardware.button)