DevOps

Как настроить Matrix Synapse для корректной работы Element X

Настройка Matrix Synapse для Element X: исправление ошибок регистрации, shared secret, MAS/sliding-sync, настройка TURN и выбор Jitsi или Element Call.

Как настроить Matrix Synapse сервер для корректной работы с клиентом Element X?

Проблема: На сервере с открытой регистрацией и подтверждением через токен доступа пользователи могут успешно регистрироваться через клиент Element, но при попытке регистрации через клиент Element X возникает ошибка.

Цель: Использовать Matrix в небольшой группе в качестве замены видеозвонкам и конференциям через Telegram.

Дополнительный вопрос: В настоящее время для видеоконференций Element использует виджет jitsi-meet. Я видел видео презентацию, в которой демонстрировались два способа проведения видеоконференций (устаревший и новый, якобы нативный встроенный). На видео это выглядело отлично. Существует ли такая функциональность в текущей версии или это находится в стадии бета-тестирования?

Чтобы Element X корректно регистрировался и работал с сервером Matrix Synapse, проверьте настройки регистрации в homeserver.yaml (enable_registration, registration_shared_secret/registration_requires_token) и учтите, что Element X часто требует Matrix Authentication Service (MAS) / sliding‑sync для полноценных способов входа. Частая причина ошибки — отсутствие MAS или некорректный shared secret/токен; сначала воспроизведите запрос регистрации (curl) и посмотрите логи Synapse, затем исправляйте конфиг или ставьте MAS.


Содержание


Настройка Matrix Synapse для Element X

Коротко: Element (классический клиент) и Element X по-разному взаимодействуют с сервером. Element X ожидает поддержку современных потоков аутентификации и sliding‑sync (или MAS-посредника), поэтому на одном и том же Synapse регистрация может проходить в Element, но падать в Element X. Подходы к решению — в порядке от простого к надёжному:

  • Быстрая проверка: убедиться, что в homeserver.yaml включена регистрация (enable_registration) и что синтаксис корректен; перезапустить Synapse и повторить попытку регистрации.
  • Удобный и часто рабочий вариант: использовать registration_shared_secret (или registration_shared_secret_file) вместо сложных токен‑flow для регистрации из клиента.
  • Если вы хотите полноценную поддержку OIDC/SSO, sliding‑sync и современных flow — развернуть MAS (Matrix Authentication Service) / proxy, потому что Synapse сам по себе не даёт sliding‑sync, а Element X на него опирается.

Практическая подсказка: многие проблемы быстро диагностируются командами curl и просмотром логов (см. разделы ниже). Подробнее по параметрам конфигурации — в официальной документации Synapse: https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html и обсуждении ошибки регистрации: https://github.com/matrix-org/synapse/issues/2942. Также полезно чтение практических заметок про типичную ошибку регистрации: https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747.


Подготовка: быстрое воспроизведение и логирование

Что сделать в первую очередь — три простых шага.

  1. Воспроизведите проблему с клиента и напрямую:
  • Попробуйте зарегистрировать пользователя через curl (пример):
bash
curl -X POST "http://localhost:8008/_matrix/client/r0/register" \
 -H "Content-Type: application/json" \
 -d '{"username":"testuser","password":"SecurePass123!","auth":{"type":"m.login.dummy"}}'

Этот пример показан в практическом руководстве по ошибке регистрации — он поможет понять, возвращает ли Synapse причину (M_UNKNOWN / M_FORBIDDEN и т.д.) https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747.

  1. Посмотрите логи Synapse:
  • systemd: journalctl -u matrix-synapse -f
  • docker: docker logs -f <synapse-container>
    Ищите строки с ошибками регистрации, упоминания registration или M_UNKNOWN.
  1. Проверьте сеть и прокси:
  • Element X ожидает корректного TLS и доступности эндпоинтов (/_matrix, sliding‑sync, WebRTC-related endpoints). Если Synapse за reverse‑proxy (nginx), смотрите и его логи.

Конфигурация Synapse (homeserver.yaml)

Ключевые параметры, которые реально влияют на регистрацию:

  • enable_registration: true — разрешает регистрацию клиентам.
  • registration_requires_token: true/false — если вы используете token‑based подтверждение, нужно включить и правильно выдавать токены клиенту.
  • registration_shared_secret / registration_shared_secret_file — удобный способ для серверной/клиентской автоматической регистрации; Synapse может хранить секрет в файле (и создать его при первом запуске) — об этом есть упоминание в обсуждении: https://github.com/matrix-org/synapse/issues/2942.
  • enable_registration_without_verification: true — полностью отключает проверки (небезопасно; использовать только для теста).

Пример минимального фрагмента:

yaml
enable_registration: true

# Вариант A: регистрация через shared secret (рекомендован для упрощения регистрации)
registration_shared_secret_file: "/data/registration_shared_secret"

# Вариант B: если используете токены
registration_requires_token: true

# (только для временной отладки)
enable_registration_without_verification: false

Рекомендации:

  • После правки — перезапустите Synapse: systemctl restart matrix-synapse или перезапустите контейнер.
  • Если вы пользуетесь registration_requires_token, убедитесь, что Element X действительно получает и передаёт этот токен; на практике проще использовать shared secret для автоматической регистрации, чем пытаться протянуть токен во все клиенты.
  • Для создания аккаунта вручную можно использовать register_new_matrix_user (см. документацию Synapse).

Подробности конфигурации — в официальном руководстве Synapse: https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html.


MAS и Sliding Sync — что важно для Element X

Почему Element X ведёт себя иначе? Потому что Element X ориентирован на новые возможности экосистемы: sliding‑sync и расширенные способы аутентификации (OIDC/SSO и т.п.). Эти возможности обычно реализуются не «в ядре» Synapse, а через внешние компоненты/прокси — в частности Matrix Authentication Service (MAS). На практике это значит:

  • Без MAS Element X может показывать сообщения вроде «Server not supported» или «The selected homeserver doesn’t support password or oidc login» — именно такие случаи описаны в обсуждении на форуме: https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix.
  • Sliding‑sync, который даёт быстрый отклик и экономию трафика в Element X, обычно «включается» через MAS/прокси; Synapse сам по себе не предоставляет sliding‑sync‑endpoint в старых сборках.

Что делать:

  • Если вам нужна полная поддержка Element X (включая OIDC/SSO и sliding‑sync) — разверните MAS/соответствующий прокси и настройте его для работы с вашим Synapse.
  • Если нужен быстрый рабочий вариант без MAS — используйте описанные выше изменения в homeserver.yaml (shared secret / временное отключение проверок), но помните про ограничения (и безопасность).

Источник по проблеме и решениям: обсуждение на Cloudron и общие рекомендации по конфигу Synapse — https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix.


TURN, .well-known, TLS и WebRTC для звонков

Для надёжных видеозвонков и конференций (особенно когда участники за NAT) нужен правильно настроенный WebRTC‑стек:

  1. TURN (coturn)
  • WebRTC часто требует реле (TURN). Установите coturn на выделенный хост/VM и настройте его с секретом.
  • В Synapse в homeserver.yaml указывают turn_uris и shared secret, например:
yaml
turn_uris:
 - "turn:turn.example.com:3478?transport=udp"
 - "turn:turn.example.com:3478?transport=tcp"
turn_shared_secret: "YOUR_TURN_SECRET"
  • На стороне coturn обычно включают use-auth-secret и задают static-auth-secret. Подробности по параметрам TURN — в документации Synapse и общих гайдах по coturn.
  1. .well-known и Matrix‑RTC
  • Element X / Element Call иногда ожидают корректные .well-known‑эндпоинты (например /.well-known/matrix/client и/или /.well-known/element/element.json) с указанием базовых URL для homeserver и RTC. Без корректного .well-known клиент может неправильно выбирать сервер для звонков.
  • Если у вас reverse proxy (nginx), разместите соответствующие JSON‑файлы на корне домена или настройте проксирование.
  1. TLS и прокси
  • Убедитесь, что Synapse доступен по HTTPS и что WebSocket‑проксирование настроено корректно (важно для real‑time). Если Synapse за nginx/apache — проверьте конфигурацию, headers и websocket upgrade.

Практические инструкции по установке/настройке Synapse + прокси есть в больших пошаговых руководствах, например на Хабре: https://habr.com/ru/articles/739606/.


Чеклист: пошаговые действия для ремонта

  1. Воспроизведите ошибку через Element X и напрямую через curl (см. пример выше).
  2. Просмотрите логи Synapse (journalctl/docker logs).
  3. Проверьте в homeserver.yaml:
  • enable_registration: true
  • registration_shared_secret / registration_shared_secret_file или registration_requires_token
  • server_name совпадает с тем, что указывает клиент
  1. Для быстрого теста: временно включите enable_registration_without_verification: true (на короткое время, только для отладки).
  2. Если регистрация через токен — убедитесь, что Element X получает токен (сложнее). Лучше использовать shared secret.
  3. Если Element X требует sliding‑sync/OIDC — разверните MAS/прокси (см. форум Cloudron).
  4. Настройте TURN (coturn) и проверьте .well-known и TLS.
  5. Перезапустите Synapse и протестируйте повторно.
  6. Для видеоконференций: сначала проверьте встроенный Jitsi‑виджет; затем протестируйте Element Call (если доступен).

Время: базовая проверка — 20–60 минут; развёртывание MAS/TURN — от часа и более в зависимости от окружения.


Element Call vs Jitsi — текущее состояние и что выбрать

Коротко про два варианта видеоконференций:

  • Jitsi (виджет) — стабильный, широко используемый. Element встраивает Jitsi‑виджет и он по‑прежнему надёжен для групповых звонков.
  • Element Call — нативное решение на базе Matrix, которое Element интегрирует в Element X и планирует как замену Jitsi. Официальное объяснение и анонс — в блоге Element: Introducing Native Matrix VoIP with Element Call и Element X: Ignition. Репозиторий проекта: https://github.com/element-hq/element-call.

Статус (на основе объявлений):

  • Element Call уже интегрируется в Element X, но функционал всё ещё развивается и в некоторых сценариях может быть менее зрелым, чем Jitsi. На видео всё выглядит красиво — в реальной жизни может понадобиться донастройка (TURN, .well-known, версии клиентов).
    Рекомендация: для небольшой группы, если вам нужна надёжность «сейчас» — используйте встроенный Jitsi. Если хотите нативную E2E‑опцию и готовы тестировать — включите/попробывайте Element Call (следите за обновлениями).

Источники: анонсы Element и репозиторий Element Call — https://element.io/blog/introducing-native-matrix-voip-with-element-call/, https://element.io/blog/element-x-ignition/, https://github.com/element-hq/element-call.


Частые ошибки и их устранение

  • “Registration has been disabled (M_UNKNOWN)”
    Причина: enable_registration=false или проблемы с registration flow. Решение: проверить homeserver.yaml, перезапустить Synapse и повторить curl‑запрос. См. практику в обсуждении: https://github.com/matrix-org/synapse/issues/2942.

  • “Server not supported” / “The selected homeserver doesn’t support password or oidc login” (Element X)
    Причина: отсутствует MAS/sliding‑sync или не реализованы ожидаемые flow. Решение: развернуть MAS/прокси или переключиться на простую регистрацию через shared secret. Подробности — обсуждение Cloudron: https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix.

  • Проблемы с видеозвонками (плохой звук, нет видео, не соединяется)
    Причина: отсутствует или неправильно настроен TURN, проблемы с TLS/.well‑known или проксированием WebSocket. Решение: настроить coturn, открыть нужные порты и проверить .well‑known.

Если остаются странные ошибки — соберите вывод curl, фрагменты логов Synapse и сообщения из Element X и сверяйтесь с документацией/форумом; обычно по логам быстро видно, что именно отклоняется.


Источники

  1. https://github.com/matrix-org/synapse/issues/2942
  2. https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
  3. https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix
  4. https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747
  5. https://element.io/blog/introducing-native-matrix-voip-with-element-call/
  6. https://element.io/blog/element-x-ignition/
  7. https://github.com/element-hq/element-call
  8. https://habr.com/ru/articles/739606/
  9. https://qna.habr.com/q/1404836

Заключение

Если кратко: начните с простых вещей — воспроизведите регистрацию через curl и проверьте логи, убедитесь, что в homeserver.yaml включена регистрация и установлен корректный shared secret или токен; перезапустите Synapse. Если же вы хотите, чтобы Element X использовал все современные возможности (sliding‑sync, OIDC/SSO и т.п.), разверните MAS/прокси — это решит большинство проблем с входом и синхронизацией. Для видеозвонков сначала проверьте Jitsi (надёжно), затем тестируйте Element Call — он интегрирован в Element X, но всё ещё развивается; настройте TURN и .well‑known, и у вас получится стабильная замена звонкам в Telegram на базе Matrix Synapse и Element X.

Авторы
Проверено модерацией
Модерация