Archives par étiquette : user manager

Mikrotik : un « UserManager » pas au point !

Avec le développement de l’impression de tickets sur les hotspots Mikrotik, j’ai pu pas mal jouer avec le fameux User Manager, destiné à gérer les utilisateurs, leur affecter des profils, des durées, des limitations. Ce petit ajout au firmware RouterOS qui équipe les matériels Mikrotik semblait, sur le papier, plutôt sympa. Pour dialoguer avec, une simple connexion SSH initiée depuis un script Python sur un p’tit Raspberry Pi. Ca, c’est du moins la théorie, car en pratique, plusieurs bugs semblent subsister sur ce User Manager, et pas des moindres :

[badlist]

  • l’ajout d’utilisateur en ssh fonctionne, mais affecter un profil ne fonctionne qu’une fois sur deux : il faut envoyer la commande, vérifier, renvoyer la commande, vérifier, etc. Cela prend du temps, et lorsque vous voulez générer des dizaines de codes, la galère prend rapidement l’eau.
  • un utilisateur reçoit un profil qui lui attribue une durée d’utilisation : 1 jour, 1 heure, 1 minute, c’est vous qui décidez. Cela fonctionne super bien, sauf qu’une fois la durée expirée, votre utilisateur restera en mémoire : pas moyen de lister simplement tous les utilisateurs expirés. On les voit dans la liste car ils n’ont alors plus de profil mentionné : les supprimer supposerait de charger TOUTE la liste, de venir chercher utilisateur après utilisateur ce que contient la configuration, d’inscrire les logins à supprimer, etc. Imaginez le script de manipulation de chaine bien lourd qu’il faudrait, alors qu’une simple commande /tool usermanager delete expired aurait été d’un emploi si simple…. ben non 🙁

[/badlist]

 

De ce fait, après une journée perdue passée à cherche une solution fiable, stable, et universelle, force est de constater qu’il fallait se passer de ce User Manager encore trop peu stable pour un usage professionnel intensif et automatisé. Je précise bien automatisé car si vous gérez tout depuis l’interface d’administration, forcément cela fonctionne sans trop de soucis. Par contre, vous perdez alors la possibilité d’imprimer des coupons et n’avez toujours pas de fonctionnalité pour supprimer les codes expirés… on tourne en rond 🙁

Imprimante tickets pour hotspot Mikrotik

Retour donc à une solution plus simple, plus pratique : le gestionnaire utilisateur directement géré par la fonction /ip hotspot du firmware, et basta ! Là, la génération de code est bien plus simple : un login, un mot de passe, une durée et c’est tout ! Pas besoin de venir ajouter un profile ou je ne sais quoi d’autre.

Lorsque nous générons un code, voyons ce qu’il donne depuis l’accès ssh au hotspot :

name=« wsxb » password=« awfn » profile=default limit-uptime=1h uptime=0s bytes-in=0 bytes-out=0 packets-in=0 packets-out=0

limit-uptime=1h indique que ce code, wsxb dispose d’1 heure d’accès, pas plus. uptime=0s montre que le code n’a pas encore expiré, sans quoi nous aurions uptime=1h et là, nous pourrions clairement identifier le code pour venir le supprimer, étant expiré.

En conclusion, l’utilisation de RouterOS n’est pas si simple, les bugs subsistent et certaines fonctionnalités manquent cruellement. Si vous n’avez pas besoin de limiter vos utilisateurs autrement que sur la durée, User Manager ne vous sera d’aucune utilité. Espérons juste qu’il évolue vers une version plus « capable » et soit un jour en mesure d’effacer simplement les codes expirés.

 

Wifipak mini : hotspot avec imprimante de tickets

La solution Wifipak Mini avec une imprimante de tickets arrive, le développement en labo se présente plutôt bien, jugez plutôt avec l’interface d’administration :

Ici, depuis une interface Web disponible sur votre hotspot, vous allez pouvoir générer vos coupons sur demande, un client à la fois, voir 5, ou même 10 si un groupe se présente. Vous pourrez également effacer les coupons expirés, ou même effacer TOUS les utilisateurs de votre hotspot WiFi, mais attention à ne pas cliquer au mauvais endroit…

Lorsque vous cliquez pour générer un coupon, le système va exécuter un script, générer un login et un mot de passe, l’envoyer à votre hotspot Wifipak Mini, générer un ticket, l’imprimer et couper le papier. A la fin, une fenêtre pop-up s’affiche, vous indiquant la fin de l’impression, vous pouvez passer au ticket suivant.

La génération via une interface web s’accompagnera d’une génération via un simple clavier numérique relié en usb sur votre contrôleur : les touches 0 à 9 permettront d’activer une génération rapide des coupons, sans avoir à utiliser votre ordinateur. C’est simple, rapide, efficace !

Dans le conception de ce produit, nous avons opté pour certains critères, quitte à faire augmenter un peu le prix de revient, mais c’est une condition sine-qua-non pour avoir une durabilité :

  • un Raspberry Pi 3 pour la gestion
  • Raspbian pour le système d’exploitation (pas question ici de programmer avec Winchose et ses multiples bugs à répétition lol)
  • une imprimante Brother QL-570 : ce choix est dicté par un papier de bonne qualité, en rouleau continu (contrairement à Dymo qui propose des rouleaux d’étiquettes), une impression thermique (= pas de cartouche à changer), un matériel utilisé ici depuis plusieurs années, sans failles.

  • un clavier USB « commercial » : pas de bricolage sur le Raspberry Pi pour venir ajouter un bouton, pas de perçages horribles, aucun risque de mauvais contact sur la durée.

A terme, il n’est pas exclu de concevoir un bloc écran tactile + Raspberry Pi :

Mais, car il y a un mais, cela ajoute encore un peu plus d’euros au prix de revient, est-ce bien une idée ? L’autre mais, c’est l’exploitation de l’écran, pouvoir utiliser un script qui va véritablement afficher ce que nous voulons, sans afficher l’environnement graphique du Raspberry Pi mais uniquement un écran avec des pavés de sélection, sans autre accès possible pour ne pas remettre en question la stabilité de l’appareil ?

Nous allons prochainement vérifier si la p’tite framboise est capable de gérer à la fois la génération des accès hotspot ET l’enregistrement des connexions. Logiquement oui, à condition de bien concevoir et d’optimiser les scripts.

 

Mikrotik, hotspot, et imprimante

Longtemps assez dégoûté du peu d’ergonomie de RouterOS, le firmware des matériels Mikrotik, j’ai été contraint de passer énormément de temps pour chercher à mieux le comprendre. Désormais, maitrisant le système, il est facile de venir développer des solutions originales, comme la gamme Wifipak Mini par exemple, et ce n’est pas terminé.

Wifipak Mini + 4 bornes PoE

C’est souvent en expérimentant qu’arrivent souvent les idées intéressantes. Tenez, là il est question d’aller générer des utilisateurs à la volée dans le User Manager de Mikrotik, depuis un script Python sur un Raspberry Pi, et pourquoi pas le Raspberry Pi utilisé comme enregistreur de connexions tiens !

Prenons donc notre Mikrotik préconfiguré en hotspot, muni de son User Manager, sans mot de passe, avec l’IP 192.168.1.123. Depuis notre Raspberry Pi, nous allons créer le script Python mikro.py après avoir installé au préalable Paramiko (je vous laisse chercher un peu sur Google, c’est assez simple) :

from random import choice
from string import digits
from string import ascii_lowercase
import paramiko
import time
target = '192.168.1.123'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(target, username='admin', password='', look_for_keys=False)
for x in range(0,10):
  login=''.join(choice(ascii_lowercase) for i in range(4))
  mdp=''.join(choice(ascii_lowercase) for i in range(4))
  msg = "/tool user-manager user add customer=admin username=us" + login + " password=" + mdp
  msg2 = "/tool user-manager user create-and-activate-profile us" + login + " customer=admin profile=wifipakmini"
  stdin,stdout,stderr = ssh.exec_command(msg)
  stdin,stdout,stderr = ssh.exec_command(msg2)
  time.sleep(0.8)
  stdin,stdout,stderr = ssh.exec_command(msg2)

A chaque exécution du script, nous allons générer deux variables, login et mdp contenant respectivement le login et le mot de passe d’un utilisateur. Cet utilisateur va être créé dans le gestionnaire Mikrotik et sera affecté au profile wifipakmini qui indique le temps disponible en ligne, 1 minute pour les essais.

Sur notre Mikrotik de test, peu puissant, une pause est nécessaire, ainsi qu’une répétition des commandes, sans cela certains utilisateurs ne sont pas affectés au profil wifipakmini et ne fonctionnent donc pas.

Ce script tourne 10 fois et va au final générer 10 utilisateurs d’un coup avec des logins qui débutent par « us ». Quel intérêt puisque le gestionnaire intégré permet de le faire ? Réfléchissez un peu, imaginez les possibilités et vous trouverez des applications potentiellement intéressantes.. En effet, si toi, ami Geek, tu es capable d’aller gérer en direct depuis le gestionnaire, quid de Mme Michu, paumée au fin fond de la Creuse, sans connaissances poussées en hotspot ? Ne va-t-elle pas préférer générer ses utilisateurs automatiquement et dans un langage clair, via une p’tite page html sur le Raspberry Pi par exemple ?

Allez, poussons un peu plus notre script, avec cette fois un nouveau, efface.py, qui sera lancé deux fois par jour par un simple Crontab sur le Raspberry Pi :

import paramiko
target = '192.168.1.123'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(target, username='admin', password='', look_for_keys=False)
msg = "/tool user-manager user remove [find uptime-used=1m]"
stdin,stdout,stderr = ssh.exec_command(msg)
print stdout.read()

Ici, nous allons chercher tous les utilisateurs ayant utilisé leur temps de connexion, 1m (= 1 minute) pour nos essais, mais ce peut-être 1d (= 1 jour) si vous modifiez le profil wifipakmini du gestionnaire Mikrotik. Tous les utilisateurs ayant la mention 1m dans uptime-used (= temps de connexion utilisé) seront ainsi effacés, évitant de saturer le hotspot avec des codes dévalidés.

Et après ?

Eh oui, tout ceci est bien mimi, c’est choupinou de générer des scripts, des utilisateurs, le principe fonctionne, mais après, que faire ? Imaginons par exemple que nous allons générer des planches avec tous les codes regroupés sur une seule et même feuille : le script se lance, une planche s’affiche en pdf ou en png, vous l’imprimez, tout ceci de façon simple, via un bout de script Php sur le Raspberry Pi, chargé de lancer toutes les actions.

Imaginons également que l’on vienne brancher une imprimante à tickets sur le Raspberry Pi : vous allez ainsi pouvoir générer un ticket à volonté, pourquoi pas en n’appuyant que sur un simple bouton installé sur la p’tite framboise. Et hop, un hotspot avec imprimante à ticket, pour un coût réduit, largement inférieur aux solutions commerciales habituelles, tel ce pack Zyxel vendu près de 1900 € avec enregistreur, WiFi local et imprimante :

Avec un calcul rapide et pas du tout optimisé, une solution équivalente pourrait sortir à bien moins cher, plus de deux fois moins cher en tout cas.

Vous le voyez, se creuser la tête avec des produits issus du monde libre permet de pas mal s’amuser. Le Raspberry Pi est un allié précieux pour développer, sa petite taille et sa modularité en font un outil indispensable pour développer de nouveaux projets.