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 :

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 |