Введение в круг понятий. UNIX/Linux  
  Мессенджеры  


Эти материалы являются объектом авторского права и защищены законами РФ и международными соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия лицензионного договора на использование этих материалов, или же вы не имеете права использовать настоящие материалы

Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только лишь истории о прошлом


Мессенджеры, которые мы можем сконфигурировать для себя, вошли в нашу жизнь давно. В первую очередь это, конечно, Jabber (XMPP). Который замечательно заменил централизованную "аську", но тут же уступил тем централизованным сервисам, которые предоставляли аудио и видеосвязь. Ну не умеет джаббер в VoIP по нормальному. Долгое время альтернатив не было, пока не появился стандарт Matrix, который так и не стал стандартом де юре, но стали им фактически. А также эталонные реализации сервера matrix - Synapse, и кльента - Element. А также ряда других клиентов и серверов. Сбоку к этому майнстримовому решению подползают и различные федерированные сервисы, типа Мастодонта, Плерому и т.п., но здесь хватит сил расписать только опыты по развёртывапнию Matrix

1. развёрнут пакет синапса из репозитария

2. сразу не стартовал, конфиг файл скопировал, пробовал по полученным ошибкам через pip обновлять компоненты Питона - не взлетело

3. пошёл в утилиты, сгенерировал все файлы и стартовал сервер, после чего добавил имена в DNS и пересоздал файлы конфигурации, сервер взлетел

/usr/lib/matrix-synapse/generate_config --config-dir /etc/synapse --data-dir /opt/synapse \
   --server-name mtx.zerot.local --report-stats yes --generate-secrets > /etc/synapse/homeserver.yaml
/usr/lib/matrix-synapse/generate_log_config -o /etc/synapse/log_config.yaml -f /opt/synapse/my_logfile.log
/usr/lib/matrix-synapse/generate_signing_key.py -o /etc/synapse/mtx.zerot.local.signing.key
/usr/lib/matrix-synapse/generate_log_config -o /etc/synapse/mtx.zerot.local.log.config -f /opt/synapse/my_logfile.log
/usr/lib/matrix-synapse/synctl start /etc/synapse/homeserver.yaml
/usr/lib/matrix-synapse/register_new_matrix_user -u admin1 -a -c /etc/synapse/homeserver.yaml http://mtx.zerot.local:8008
/usr/lib/matrix-synapse/register_new_matrix_user -u test1 --no-admin -c /etc/synapse/homeserver.yaml http://mtx.zerot.local:8008
/usr/lib/matrix-synapse/register_new_matrix_user -u test2 --no-admin -c /etc/synapse/homeserver.yaml http://mtx.zerot.local:8008

4. попробовал мобильных клиентов - не взлетело. Элемент вообще смотрит только в сторону матрикса, а флафи не видит сервера

5. развернул WEB клиента Элемент - он позволил подключиться к матриксу, но локальный сервер не видит, а точнее говорит, что недоверенный сертификат. Здесь притормозили, по результату настроили работу сервера matrix через nginx

6. для чего сделали самоподписанный сертификат


echo -e "
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%
DNS.2 = *.%%DOMAIN%%" > v3.ext

#!/bin/bash
# генерячим корневой
openssl genrsa -out rootCA.key 2048 ; openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 9999 -out rootCA.pem
# генерячим обычный
if [ -z "$1" ]; then   echo "имя_скрипта FQDN_сертификата" ; exit; fi
if [ -f device.key ]; then KEY_OPT="-key" ; else KEY_OPT="-keyout" ; fi

DOMAIN=$1
COMMON_NAME=${2:-$1}
SUBJECT="/C=RU/ST=Moscow/L=Moscow/O=MXT/CN=$COMMON_NAME"
NUM_OF_DAYS=9999

openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/$COMMON_NAME/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext

mv device.csr $DOMAIN.csr
cp device.crt $DOMAIN.crt

# remove temp file
rm -f device.crt;

7. и добавили модуль сайта матрикса в конфигурации nginx


server {
    listen 443 ssl http2;
    listen 8448 ssl default_server;

    server_name mtx.zerot.local ;

    access_log /var/log/nginx/matrix_access.log;
    error_log /var/log/nginx/matrix_error.log;

    ssl_certificate /var/letencrypt/hands/mtx.zerot.local.crt;
    ssl_certificate_key /var/letencrypt/hands/device.key;

    location / {
        proxy_pass http://127.0.0.1:8008;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

этим самым обернули http:8008 в https:443

8. По результату клиент всё равно выперндривается, что homeserver устарел. Методом подбора определились, что версия v1.11.1 работает корректно, и более старые 10, а вот v1.11.34 - уже не работает с нуля, но работает по v1.11.39 если ключи созданы в 10 релизе клиента. В v1.11.40 заявлена совместимость с matrix 1.1 Вероятно старый synapse от Alt более стар. Более того, внутри локальной сети работают и голосовые звонки, но всё работает только после приёма сертификата самого домашнего сервера матрикс - он самоподписанный и просто так не принимается. на этом остановились второй раз статьи: - хабр - https://tavda.net/matrix - про самоподписанный обновил память https://habr.com/ru/articles/352722/

9. Далее работа продолжена 20. Настроено ещё одно имя, ресолвящееся в Инетах - mtx, и проведена настройка основного сервера Apace на обратное проксирование запросов с этого имени на сервер Матрик. Подороге пришлось настроить сертификаты для домена mtx... настройка не давалась долго, пришлось переконфигурировать сервер на более корректную работу с виртуальными хостами, настроить прямой проброс без двойного https, но самая важная причина некорректной работы проброса - в закрытых сетевим фильтром возможностях проброса, из за чего сервер переводил запросы не по конфигурации виртуального хоста, а на дефолтный путь

В результате получена и работает следующая конфигурация проброса



    ServerName mtx.ourorbits.ru:443

    ServerAdmin webmaster@oracle.zerot.local
    ErrorLog logs/mtx_ourorbits_ru-error_log
    TransferLog logs/mtz_ourorbits_ru-access_log

    ProxyPreserveHost On
    ProxyPass "/" "http://172.16.31.207:8008/"
    ProxyPassReverse "/" "http://172.16.31.207:8008/"

    SSLEngine on
    SSLCertificateFile /etc/httpd/conf.d/mtx_certs/mtx.ourorbits.ru.crt
    SSLCertificateKeyFile /etc/httpd/conf.d/mtx_certs/mtx.ourorbits.ru.key
#SSLCACertificateFile /etc/httpd/conf.d/mtx_certs/rootCA.pem

    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
    
        SSLOptions +StdEnvVars
    
    BrowserMatch "MSIE [2-5]" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/mtx_ourorbits_ru-ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"




    ServerName mtx.ourorbits.ru:80

    ServerAdmin webmaster@oracle.zerot.local
    ErrorLog logs/mtx_ourorbits_ru-error_log
    TransferLog logs/mtz_ourorbits_ru-access_log

    ProxyPreserveHost On
    ProxyPass "/" "http://172.16.31.207:8008/"
    ProxyPassReverse "/" "http://172.16.31.207:8008/"


10. Далее проверена работа между клиентами - звонки без TURN возможны только внутри одной сети, и даже с включением его, т.к. он от другого домашнего серверак - не фурычит. Особенностью является то, что на телефоне WEB не отдаёт микрофон хрому, а камеру - Firefox'у. Также нужно каждый раз подтверждать сертификаты клиента и сервера в браузерах


Белонин С.С. (С)

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2025. Дата последней модификации страницы:2025-11-16 22:32:52