Aller au contenu

Configurer le wifi

En bref. Morphée écrit les comptes clients dans un annuaire LDAP ; le portail captif (pfSense) les y lit. Morphée ne parle jamais au pare-feu : celui-ci se configure une fois, et c'est tout.

À quoi ça sert

Séparer les rôles. L'annuaire détient les comptes, le pare-feu les vérifie, Morphée décide qui a droit au réseau et jusqu'à quand. Aucune interface propriétaire, aucun accès privilégié au pare-feu depuis le PMS, et dix portails peuvent lire le même annuaire — pratique pour un groupe d'hôtels.

Où le trouver

Configuration › Wifi › Portails wifi. Un portail par établissement (voire par SSID).

📸 Capture à réaliser — configuration/wifi

Configurer le wifi

Déposer le fichier dans assets/captures/configuration/wifi.png puis remplacer ce bloc par : ![Configurer le wifi](../assets/captures/configuration/wifi.png)

Les deux types de portail

  • Remise manuelle — Morphée prépare l'identifiant et le code, la réception les remet au client. Aucun équipement piloté. C'est aussi le repli à utiliser le jour où l'annuaire est en panne.
  • Annuaire LDAP — Morphée écrit les comptes dans l'annuaire, le portail captif les lit.

Remplir la fiche d'un portail LDAP

La plupart des champs sont déjà pré-remplis : seules la branche des comptes et le mot de passe demandent votre attention.

Champ Exemple
Nom du réseau (SSID) Hotel-Invites — ce que le client voit dans la liste des réseaux
URL de l'annuaire ldap://ldap.micrologic.fr:389
DN de connexion cn=admin,dc=ldap,dc=micrologic,dc=fr
Mot de passe (à saisir — jamais pré-rempli)
Branche des comptes ou=monhotel,dc=ldap,dc=micrologic,dc=fr
Attribut de nommage uid
Classes d'objet inetOrgPerson
Attribut d'identifiant / de mot de passe uid / userPassword
Attributs supplémentaires cn={login} puis sn={nom}

Jetons disponibles dans les attributs supplémentaires : {login}, {nom}, {porteur}, {debut}, {fin}.

Le piège de la classe d'objet

Dans un navigateur LDAP, une branche (ou=monhotel) et un compte (uid=dupont) n'ont pas la même classe : la première est un organizationalUnit, le second un inetOrgPerson. C'est celle du compte qu'il faut saisir.

Avec celle de la branche, tout paraît bien — la connexion réussit, la branche est trouvée — et l'annuaire ne refuse qu'à la création du premier compte : object class 'organizationalUnit' requires attribute 'ou'. Pour lire la bonne valeur, ouvrez une entrée uid=… existante dans votre navigateur LDAP.

Les trois boutons

Tester la connexion — à faire en premier, toujours. Il se connecte, cherche la branche, puis confronte votre configuration au schéma publié par l'annuaire : les classes et les attributs existent-ils ? l'attribut de nommage est-il autorisé par la classe choisie ? tous les attributs qu'elle exige sont-ils fournis ? Il nomme ce qui cloche, plutôt que de vous laisser le découvrir devant un client.

Le SSID n'est pas une coquetterie : il figure sur la fiche d'arrivée, sur le portail du client, sur l'écran de la borne et dans l'e-mail de pré-séjour. Sans lui, on remet un identifiant et un code sans dire où les saisir.

Créer la branche — un nouvel établissement n'a pas encore son unité dans l'annuaire. Ce bouton la crée, ainsi que les unités intermédiaires manquantes. Il ne touche jamais aux composants de domaine (dc=) : la racine de l'annuaire ne s'invente pas.

Réconcilier maintenant — relit l'annuaire et corrige les écarts (voir plus bas).

Côté pfSense, une fois pour toutes

System › User Manager › Authentication Servers › Add : type LDAP, l'adresse de l'annuaire, la branche des comptes en search scope, et le même attribut d'identifiant qu'au-dessus. Puis Services › Captive Portal › votre zone › Authentication : Use an Authentication backend, et le serveur créé.

Deux points de sécurité

  • Le compte de bind de pfSense doit être différent de celui de Morphée, et en lecture seule. Un pare-feu est exposé ; le compte de Morphée, lui, peut supprimer des comptes.
  • Réglez l'Idle timeout et le Hard timeout du portail captif (60 min / 24 h par exemple). Supprimer un compte n'interrompt pas une session déjà ouverte : sans ces délais, un client parti garderait son accès jusqu'à se déconnecter lui-même.

Ce qui tourne tout seul

Quand Quoi
Toutes les 10 min pousse ce qui reste dû (portail injoignable au moment du check-in…)
Toutes les heures ferme les accès dont la date de fin est passée
Chaque nuit réconcilie l'annuaire, puis purge le journal

La réconciliation existe parce que la file rattrape ce qui a échoué, mais pas ce qui n'a jamais été demandé : un annuaire restauré depuis la sauvegarde de la veille, une entrée supprimée à la main. Elle traite trois écarts :

  • un accès ouvert dont le compte a disparu → il est redemandé ;
  • un accès fermé dont le compte survit → sa fermeture est redemandée ;
  • un compte inconnu de Morphée → il est signalé, jamais supprimé.

Ce dernier point ne se négocie pas : la branche peut être partagée, et supprimer l'entrée de quelqu'un d'autre serait irréparable. Morphée ne défait que ce qu'il a fait. Les entrées concernées sont nommées dans le journal.

Les réglages de l'établissement

Tout est dans Réglages › Wifi, en trois blocs. Le premier est un interrupteur : cochez « Piloter les accès wifi », sinon Morphée n'en crée aucun et le reste des réglages reste caché.

  • Comment les accès s'ouvrent : le portail utilisé, le moment de l'ouverture, le nom du réseau ;
  • ouvrir l'accès à l'arrivée (par défaut), dès la confirmation — ce qui permet d'envoyer le code dans l'e-mail de pré-séjour — ou à la demande seulement, la réception s'en chargeant depuis le menu Actions. La fermeture reste automatique dans les trois cas ;
  • Jusqu'à quand, et pour combien d'appareils : la tolérance après le départ (4 heures par défaut — le client qui attend son taxi garde son réseau), le nombre d'appareils simultanés, et la durée de conservation du journal (90 jours ; il nomme des clients et leurs identifiants, ce sont des données personnelles).

Ces trois derniers réglages vivent techniquement sur le portail : les modifier ici ou là revient au même.

Quand ça ne marche pas

Symptôme Où regarder
L'accès reste « En attente » Réception › Accès wifi, colonne Dernière erreur
« ldap3 n'est pas installé » le paquet Python manque sur le serveur
« insufficientAccessRights » le compte de service ne peut pas écrire dans la branche
« noSuchObject » à l'ouverture la branche n'existe pas — bouton Créer la branche
Le client saisit son code, refus l'attribut d'identifiant de pfSense ne correspond pas à celui d'ici
Tout paraît bon, rien ne se passe Configuration › Wifi › Journal des échanges — chaque tentative y figure, secrets masqués

Voir aussi