Relay-Server (TURN)¶
Rein Peer-to-Peer aufgebaute Verbindungen lassen sich manchmal nicht herstellen, wegen Firewalls oder NAT bei einem der Benutzer oder bei allen. Um dem abzuhelfen und auch die widerspenstigsten Firewalls zu durchqueren, können ein oder mehrere TURN-Server (Traversal Using Relay NAT) eingesetzt werden.
Wir verwenden coturn (github.com/coturn/coturn) für unsere TURN-Server, wie die meisten Anbieter, darunter Slack und Zoom. Coturn dient zugleich als STUN-Server, der die Frage "Wie lautet meine öffentliche IP-Adresse?" beantwortet.
Dedizierte Maschine
Wir raten davon ab, einen TURN-Server auf derselben Maschine bereitzustellen, auf der bereits Drovio Server läuft, aus Sicherheits- und Leistungsgründen.
Unter Debian installieren¶
Coturn ist für Debian paketiert, wobei Version 13 eine nahezu aktuelle Fassung mitbringt, und läuft sowohl unter x64 als auch unter arm64; die folgenden Befehle sind auf beiden identisch. Schritt für Schritt, auf einer frisch installierten Debian-13-Maschine:
- Kommentieren Sie
TURNSERVER_ENABLED=1ein und speichern Sie. - Öffnen Sie die Konfigurationsdatei, siehe Coturn konfigurieren weiter unten:
Unter RHEL installieren¶
Coturn steht unter RHEL 9 und 10 über EPEL zur Verfügung. Schritt für Schritt:
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install coturn
Der erste Befehl aktiviert EPEL, hier in der Fassung für RHEL 9: passen Sie die URL an Ihre Version an.
Öffnen Sie anschließend die Konfigurationsdatei, siehe Coturn konfigurieren weiter unten:
Coturn konfigurieren¶
Ändern Sie turnserver.conf wie folgt.
Listener und Netzwerk:
listening-portundtls-listening-portsollten auf80und443gesetzt werden statt auf die Standardports, um die meisten Firewalls zu durchqueren.listening-ip: die öffentliche IP, oder die private IP, wenn Sie hinter einem NAT stehen, etwa auf AWS EC2.relay-ip: identisch mitlistening-ip.external-ip: die öffentliche IP, nur wennlistening-ipeine private Adresse hinter einem NAT ist.min-port=49152undmax-port=65535: der UDP-Portbereich, den coturn für den relayten Verkehr belegt. Öffnen Sie diesen Bereich in Ihrer Firewall für UDP.
Authentifizierung:
fingerprintmuss einkommentiert sein.static-auth-secret=MySeCrEt: ersetzen Sie den Wert durch eine lange Zufallszeichenkette. Das ist das gemeinsame Geheimnis zwischen Drovio Server und coturn.realm=turn.example.com: zu ersetzen; dieser Wert muss auf nichts auflösen.stale-nonce=600muss einkommentiert sein.
Bandbreite:
max-bps: maximale Anzahl Bytes pro Sekunde und Sitzung. Kommentieren Sie die Zeile aus, um sie nicht zu begrenzen, oder setzen Sie sie mindestens auf die maximale Bitrate, die insettings.confunterwebrtc.service_quality.maximumkonfiguriert ist. Achtung,max-bpswird in Bytes pro Sekunde angegeben,webrtc.service_quality.maximumdagegen in kbit pro Sekunde: der Standardwert von 10 Mbps entspricht 1 250 000 Bytes pro Sekunde.
TLS (optional, für die Unterstützung von TURNS):
certundpkeymüssen auf Ihr Zertifikat und Ihren privaten Schlüssel verweisen. Wenn Sie TURNS nicht benötigen, überspringen Sie diesen Teil und verwenden Sie nur den Port80, wenn Sie auf diesen Server verweisen, siehe Drovio Server konfigurieren.- Setzen Sie
cipher-listauf"ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AESCCM". no-tlsv1undno-tlsv1_1müssen einkommentiert sein.
Härtung:
no-multicast-peersmuss einkommentiert sein.allow-loopback-peersmuss auskommentiert bleiben, da Loopback seit coturn 4.5.2 standardmäßig abgelehnt wird.no-tcp-relaymuss einkommentiert sein: Drovio nutzt ausschließlich das UDP-Relay, und das TCP-Relay abzuschalten verkleinert die Angriffsfläche.denied-peer-ip=0.0.0.0/8,denied-peer-ip=10.0.0.0/8,denied-peer-ip=172.16.0.0/12,denied-peer-ip=192.168.0.0/16unddenied-peer-ip=127.0.0.0/8: verhindern, dass relayter Verkehr private Netze oder Loopback-Netze erreicht.no-software-attributemuss einkommentiert sein, was die coturn-Version in den Antworten verbirgt.no-rfc5780,no-stun-backward-compatibilityundresponse-origin-only-with-rfc5780müssen einkommentiert sein. Sie schalten hier überflüssige, historisch bedingte STUN-Funktionen ab und verringern die Exposition.
Sie werden diesen Server vermutlich auch in seinem eigenen Netz oder VPC isolieren wollen.
Kommandozeilenschnittstelle:
cli-ip=127.0.0.1,cli-port=5766undcli-password=myclipassword: ändern Sie das Passwort. Diese Schnittstelle dient dazu, die verbundenen Peers zu prüfen, indem Sietelnet localhost 5766starten, das Passwort und dannpseingeben. Geben Sie diesen Port nicht nach außen frei.
Speichern Sie, und starten Sie coturn neu:
Ihr Relay-Server für TURN, und STUN, ist nun betriebsbereit.
Drovio Server konfigurieren¶
Zurück auf Ihrer Drovio-Server-Instanz:
Suchen Sie webrtc, ersetzen Sie turn_servers_secret durch den oben
festgelegten Wert von static-auth-secret und passen Sie die folgende
Konfiguration an Ihre Bedürfnisse an, wobei Sie die URL turn.example.com durch
die URL oder die IP Ihrer coturn-Maschine ersetzen:
"webrtc": {
"turn_servers_secret": "MySeCrEt",
"turn_servers_auth_timeout": 300,
"ice_servers": [
{ "url": "stun:turn.example.com:443" },
{ "url": "turn:turn.example.com:443" },
{ "url": "turn:turn.example.com:443?transport=tcp" },
{ "url": "turns:turn.example.com:443" }
],
"service_quality": {
"minimum": 1000,
"maximum": 10000
}
}
- Der erste Eintrag ist das STUN, das nur auf die Frage "Wie lautet meine IP-Adresse?" antwortet.
- Der zweite ist das klassische TURN über UDP auf 443, ohne TLS-Schicht.
- Der dritte ist das TURN über TCP auf 443, ohne TLS-Schicht.
- Der vierte ist das TURNS über UDP auf 443, mit zusätzlicher TLS-Schicht.
Das sollte mit den meisten widerspenstigen Firewalls funktionieren. Der Abschnitt
webrtc wird im laufenden Betrieb übernommen, es ist also nichts neu zu starten:
die neuen Relays werden innerhalb weniger Sekunden berücksichtigt.
Den Relay-Server überprüfen¶
So prüfen Sie, ob der Relay-Server korrekt funktioniert:
- Starten Sie Firefox.
- Geben Sie
about:configin die Adressleiste ein, bestätigen Sie und fahren Sie fort. - Tippen Sie
relayin die Suchleiste. - Setzen Sie
media.peerconnection.ice.relay_onlyauftrue. - Öffnen Sie die Drovio App und melden Sie sich an.
- Nutzen Sie das Symbol in Form eines Briefumschlags und klicken Sie auf Invite by URL.
- Fügen Sie den Einladungslink in Firefox ein und fahren Sie fort.
- Geben Sie einen Anzeigenamen ein, ohne die App starten zu lassen, und fahren Sie im Browser fort.
- Sie sollten Ihren eigenen Bildschirm sehen, spiegelbildlich, wenn Sie den geteilten Bildschirm betrachten.
- Öffnen Sie einen neuen Tab in Firefox, ohne den vorherigen zu schließen, und
geben Sie
about:webrtcein. - Klicken Sie auf Show details.
- Sie sollten ICE State: succeeded, nominated: true, selected: true
lesen und relay neben Ihrer IP-Adresse sehen, statt
host,srflxoderprflx.
Setzen Sie die Einstellung zurück
Vergessen Sie nicht, media.peerconnection.ice.relay_only wieder auf false
zu setzen.