Содержание

Установка собственного matrix сервера

Данная статья описывает установку собственного сервера matrix, который будет работать в общей федеративной сети серверов матрикс, но к которому доступ клиентов будет только из сети yggdrasil. При этом все фишки типа «Персональных сообщений» и «Шифрованных комнат» также будут работать

:!: Если вам не нужна связность с другими серверами - ставьте сервер в режиме standalone и не мучайтесь

Почему всё так сложно-то?

То есть, если вы хотите поднять сервер, который будет иметь возможность общаться с другими серверами в сети - он должен соответствовать этим трём требованиям.

К счастью, предусмотрена ситуация когда есть домен example.com но сервер разместить под этим именем возможности нет. Зато есть возможность разместить его под именем server.example.com. Вот, собственно, этой возможностью мы и воспользуемся.

Требуемые инструменты и материалы

И так, что нам потребуется:

Сервер

Ну, собственно, потребуется машина для установки самого сервера Matrix.

У этой машины должен быть выход в клирнет. Доступ к этой машине нужен только со стороны прокси, т.е. она вполне может сидеть где-то внедрах сети за NAT.

Домен

Домен может быть любым, который Вам доступен. Главное - он должен быть «белым» (т.е. резолвиться из клирнета) и у Вас должна быть возможность вносить туда записи. Я использовал для этого twinkle.ygg.at

Так же Вам потребуется имя для прокси сервера с белым адресом. Если вы использовали как основной домен .ygg.at вас ждёт неприятность - в этом домене нельзя указать какой либо IP кроме yggdrasil. Если вы используете что-то типа mybestowndomain.com - вам никто не мешает сделать для этого имя server.mybestowndomain.com. Я использовал ygg.twinkle.lol

"Серый" (ygg) адрес

Этот адрес дожен быть прописан на основном домене, который вы выбрали в прошлом пункте. У меня это 300:dada:feda:f443::12

Белый IP адрес

Этот адрес должен быть назначен как «внешний» на прокси сервере. Никаких особенных требований, ну кроме того, что как минимум должен быть открыты порты 443 и 8448 на вход. У меня это 193.111.115.214

SSL сертификат

Так как у нас на основном домене используется «серый» адрес, получить SSL по простому - не получится. Нужно будет получать через «DNS авторизацию». Я пользуюсь для этого вот этим плагином для certbot.

:!: ВАЖНО
Если вы будете пользоваться этим плагином - он вам выведет строчку, которую нужно прописать в DNS. Если, при этом, вы пользуетесь доменом .ygg.at, при прописывании его в Alfis от имени оставьте только _acme-challenge а в самом CNAME уберите последнюю точку (должно получиться .auth.acme-dns.io в конце). От этой точки alfis шизеет.

Собираем всё в кучу

Собственно - на этом можно было-бы ставить точку. Правильно собранное устройство в дополнительной настройке не нуждается. Но я обещал рассказать зачем SSL на имя прокси, да и вобще стоит описать происходящее. И так…

Как оно должно работать в идеальной стране розовых пони

Сервер приходит в домен twinkle.ygg.at за srv записью, получает её и идёт на прокси сервер ygg.twinkle.lol (с основным доменом в урле, кстати, а вовсе не с проксёвым). И дальше сервера спокойно между собой общаются. Соответственно на прокси не должен никто приходить с его именем. Клиент из белой сети приходит в домен twinkle.ygg.at, получает ygg адрес и плача уходит. Клиент из ygg приходит в домен twinkle.ygg.at, получает ygg адрес и радостно работает.

Как оно работает на самом деле

Сервер приходит в домен twinkle.ygg.at и сначала пытается получить /.well-known/matrix/server. Не может. Пытается получить новый вариант SRV. Если не может - пытается получить старый. Дальше он идёт на указанный прокси, и общается с ним, в основном, по правильному имени основного домена. Но иногда, некоторые серверы, некоторые запросы шлют на доменное имя прокси сервера. Именно по этому лучше получить SSL на это имя и обрабатывать запросы и на него. Но так как мы не хотим, что-бы клиенты из белой сети могли заходить на наш сервер - мы рубим на корню клиентское API.


Вот теперь - действительно всё.