Matrix et les ponts de messagerie
Activer le serveur Matrix (Synapse), son client web Element et les ponts mautrix (WhatsApp, Signal, Telegram, Messenger, Discord). Pour l’architecture, voir Matrix dans DNF.
Activer Matrix
Section intitulée « Activer Matrix »-
Déclarer les services sur l’hôte cible dans
etc/config.yaml:etc/config.yaml services:matrix:title: "Matrix"description: "Messagerie instantanée"element: # client webturn: # relais audio/vidéo (recommandé) -
Déclarer l’administrateur Matrix (clé globale, hors hôtes) :
etc/config.yaml matrix:admin: "alice" # local part du compte administrateurCe compte administre les ponts et reçoit les alertes de supervision.
-
Créer les secrets requis (voir tableau ci-dessous), puis déployer.
L’authentification passe par le SSO Kanidm (OIDC) : tout utilisateur déclaré se connecte avec son compte réseau, aucune création de compte Matrix n’est nécessaire.
Secrets requis
Section intitulée « Secrets requis »À renseigner dans usr/secrets/secrets.yaml :
| Clé sops | Rôle | Génération |
|---|---|---|
matrix-rss-password | Registration shared secret Synapse | openssl rand -hex 32 |
oidc-secret-matrix | Secret du client OIDC Kanidm | cf. SSO |
turn-secret | Secret partagé coturn (si turn activé) | openssl rand -hex 32 |
mautrix-doublepuppet-as-token | Token appservice double puppeting (commun aux ponts) | openssl rand -hex 32 |
mautrix-doublepuppet-hs-token | Idem, requis par Synapse, jamais utilisé | openssl rand -hex 32 |
Gérer les ponts
Section intitulée « Gérer les ponts »Les ponts WhatsApp, Signal, Telegram et Messenger sont activés par défaut avec Matrix ; Discord est désactivé par défaut. Réglage par hôte dans la configuration nix de la machine :
# usr/machines/<host>/default.nixdarkone.service.matrix.bridges = { discord.enable = true; # opt-in messenger.enable = false; # désactiver un pont par défaut};Chaque pont a ses secrets propres :
| Pont | Clés sops | Remarque |
|---|---|---|
mautrix-whatsapp-as-token, mautrix-whatsapp-hs-token, mautrix-whatsapp-encryption-pickle-key | openssl rand -hex 32 chacun | |
| Signal | mautrix-signal-as-token, mautrix-signal-hs-token, mautrix-signal-encryption-pickle-key | openssl rand -hex 32 chacun |
| Messenger | mautrix-meta-as-token, mautrix-meta-hs-token, mautrix-meta-encryption-pickle-key | openssl rand -hex 32 chacun |
| Telegram | mautrix-telegram-api-id, mautrix-telegram-api-hash, mautrix-telegram-as-token, mautrix-telegram-hs-token | API id/hash à créer sur my.telegram.org 🡕 |
| Discord | mautrix-discord-as-token, mautrix-discord-hs-token | openssl rand -hex 32 chacun |
Les tokens as/hs rendent la registration appservice de chaque pont
déterministe (voir
les tokens d’appservice).
Permissions
Section intitulée « Permissions »Rien à gérer : tout compte local (@*:domain.tld) peut utiliser chaque
pont avec son propre compte distant, sans interférence entre
utilisateurs. Le compte matrix.admin dispose des commandes
d’administration des bots (help en conversation directe avec le bot pour
la liste).
Double puppeting
Section intitulée « Double puppeting »Les ponts partagent un appservice doublepuppet (token
mautrix-doublepuppet-as-token) : les messages envoyés depuis le
téléphone apparaissent dans Matrix comme venant du vrai compte de
l’utilisateur. C’est automatique pour tous les comptes locaux, aucune action
par utilisateur.
Exploitation
Section intitulée « Exploitation »| Action | Commande |
|---|---|
| État des services | systemctl status matrix-synapse mautrix-whatsapp mautrix-signal mautrix-telegram mautrix-meta-messenger |
| Journaux d’un pont | journalctl -u mautrix-whatsapp -f |
| Journaux Synapse | journalctl -u matrix-synapse -f |
Diagnostiquer un bot muet
Section intitulée « Diagnostiquer un bot muet »Un bot qui ne répond pas à help alors que son service tourne tombe presque
toujours dans l’un des deux cas : ses tokens ne correspondent plus à la
registration chargée par Synapse, ou il reçoit les messages mais ne peut pas
les déchiffrer. Diagnostic dans l’ordre :
-
Le service tourne-t-il vraiment ?
Fenêtre de terminal systemctl status mautrix-<pont>journalctl -u mautrix-<pont> -n 50S’il redémarre en boucle avec « The as_token was not accepted », l’enregistrement en mémoire de Synapse ne correspond plus aux tokens du pont (typique après un reset ou une migration, voir l’encart plus haut) :
systemctl restart matrix-synapse, puis redémarrer le pont. -
Le message arrive-t-il au pont ? Suivre Synapse pendant l’envoi d’un
helpau bot :Fenêtre de terminal journalctl -u matrix-synapse -f | grep transactionsUne ligne
PUT .../_matrix/app/v1/transactions/... 200doit apparaître. Si rien ne part, l’appservice n’est pas chargé : vérifier la présence de l’enregistrement dans/var/lib/mautrix-<pont>/et redémarrer Synapse. -
Le pont peut-il le déchiffrer ? Si la transaction passe (200) mais que le bot reste muet, suivre ses logs pendant un nouvel envoi :
Fenêtre de terminal journalctl -u mautrix-<pont> -fChercher
decrypt,session,verification,dropping. Un échec de déchiffrement signifie que la clé de session du salon n’a pas été partagée avec le device actuel du bot (cas classique après un reset du pont : son identité e2ee a changé). -
Recréer la conversation. Quitter le message direct avec le bot et en démarrer un nouveau : le client établit une session de chiffrement neuve et partage la clé avec le device actuel du bot. Vérifier au passage que sa propre session Element est vérifiée.
-
Dernier recours : réinitialiser l’état du pont (encart ci-dessous), puis redémarrer Synapse pour recharger l’enregistrement.
Voir aussi
Section intitulée « Voir aussi »- Messagerie Matrix : guide utilisateur : connexion aux ponts pour les utilisateurs
- Matrix dans DNF : architecture et implémentation