Ein Turn-Server für die Matrix
Damit wir mit unserem Matrix-Server nicht nur Textnachrichten und Bilder austauschen, sondern auch telefonieren können, brauchen wir zusätzlich zu unserer Matrix-Synapse noch einen Turn-Server. Was ein Turn-Server im allgemeinen ist, könnt ihr hier nachlesen.
Für den Turnserver reicht eine Minimalausstattung an “Hardware”, respektive virtueller Hardware. Ich nutze hier einen virtuellen KVM-Server mit 1 vCPU, 2GB RAM und einer Plattenkapazität von 20GB. Den bekommt ihr für kleines Geld z.B. bei Hetzner.
Für meinen Turn-Server habe ich eine CentOS 8 Grundinstallation gewählt.
Was also ist zu tun, um den Turnserver für unsere Matrix-Synapse funktional zu machen?
Folgende Voraussetzungen sind gegeben:
- CentOS 8 Server mit dem DNS-Namen turn.mymatrix.de
- CentOS 7 Server mit der Matrix-Synapse matrix.mymatrix.de
Installation coturn
dnf install coturn |
Damit installieren wir den Turn-Dienst namens coturn.
Als nächstes muss ich den Dienst konfigurieren. Die Konfigurationdate heißt: /etc/coturn/turnserver.conf
vi /etc/coturn/turnserver.conf |
Als erstes gebe ich den Port an, auf dem unser Turn-Server lauschen soll. Ich will nur sichere Verbindungen zulassen und gebe hier nur den TLS-Port an:
tls-listening-port=443 |
Mit Listening-IP gebe ich an, unter welcher IP-Adresse der Turnserver erreichbar ist. Hier muss natürlich nicht die 172er-Adresse genommen werden, sondern die tatsächliche IP-Adresse des Servers:
listening-ip=172.17.19.101 |
Jetzt definiere ich einen Bereich von UDP-Ports, die der Turn-Server verwenden soll. Ich habe hier die Defaultwerte verwendet:
min-port=49152 |
Dieser Bereich muss später noch in der Firewall freigeschaltet werden.
Dann stelle ich die zu nutzende Authentifizierungsmethode ein:
use-auth-secret |
Als nächstes lege ich die geheime Zeichenkette fest, über die sich der Turnserver und die Matrix-Synapse später identifizieren werden. Eine möglichst komplexe, nicht zu kurze Zeichenkette. Diese muss ich dann später auch in die Konfiguration des Synapse-Servers eintragen.
static-auth-secret=SehrgeheimezufaelligeZeichenkettemitZahlenundso2132435443342!$32 |
Jetzt gebe ich bekannt, wer mein Gegenüber sein wird, also den DNS-Namen meines Matrix-Synapse-Servers:
realm=matrix.mymatrix.de |
Für die TLS-Kommunikation trage ich noch die Zertifikate ein, die ich zuvor über LetsEncrypt erstellt habe:
cert=/etc/letsencrypt/live/turn.mymatrix.de/fullchain.pem |
Das Command-Line-Interface werde ich hoffentlich nicht benötigen, ebensowenig die STUN-Funktionalität. Deswegen schalte ich es ab:
no-cli |
Die benötigten Ports in der Firewall noch aufmachen:
firewall-cmd --permanent --add-port=443/tcp |
Coturn vs. LetsEncrypt
Der Coturn-Service ist IMHO nicht ganz sauber implementiert und hat deswegen Probleme damit, das LetsEncrypt-Zertifikat und den LetsEncrypt-Key einzulesen. LetsEncrypt erlaubt nur root auf diese Dateien zuzugreifen.
Bin ich es bisher so gewohnt, dass ein Dienst mit root-Rechten startet und nach der Initialisierung auf einen anderen, niedrig privilegierten User umswitcht, so startet Coturn gleich als user coturn mit der Gruppe coturn.
Dies hat zur Folge, dass Coturn die LetsEncrypt-Dateien nicht einlesen kann und somit die Verschlüsselung nicht initialisieren kann.
Ich habe es recht “dirty” gelöst, indem ich der Gruppe coturn Zugriff auf die notwendigen Verzeichnisse “/etc/letsencrypt/archive“ und “/etc/letsencrypt/live“ sowie auch auf den private Key gegeben habe. Nicht schön, aber für den Moment funktional.
Ich hoffe, dass die Coturn-Entwickler dies zukünftig ändern werden.
Anpassungen am Matrix-Synapse-Server
Jetzt kommen die Anpassungen, die ich an der Konfigurationsdatei unseres Matrix-Homeservers vornehmen muss. Hierzu verbinde ich mich per SSH auf unseren matrix.mymatrix.de und wechsle dort in das Verzeichnis des Synapse-Servers:
ssh root@matrix.mymatrix.de |
Die Änderungen müssen in der Datei homeserver.yaml gemacht werden.
vi homserver.yaml |
## TURN ## |
Danach starte ich den Synapse-Server neu:
source /opt/synapse/env/bin/activate |
Anschliessend gehe ich wieder auf unseren neuen Turn-Server und starte dort den coturn-Dienst:
systemctl start coturn |