|
|
(72 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 2: |
Zeile 2: |
|
| |
|
| = Beschreibung = | | = Beschreibung = |
| <!-- '''TODO: ''' Grafische Darstellung der Kooperation der verwendeten Dienste -->
| | ; Komponenten |
| | | {| class="wikitable sortable" |
| == Janus WebRTC gateway ==
| | |- |
| <!-- '''TODO: ''' Funktion und Aufgabe des Dienstes beschreiben -->
| | ! Komponente !! Aufgabe !! Link !! Beschreibung |
| | | |- |
| WebRTC ist eine Abkürzung für '''Web''' '''R'''eal-'''T'''ime '''C'''ommunication, also Echtzeitkommunikation. WebRTC ist ein offener Standard, der durch eine Sammlung von Kommunikationsprotokollen und Programmierschnittstellen definiert wird. Dieser Standard ermöglicht es Clients (wie beispielsweise Webbrowsern) eine '''direkte''' Verbindung zueinander aufzubauen. Der Vorteil besteht darin, daß keine zusätzliche Software installiert werden muss, wie es etwa bei Skype oder Zoom der Fall ist. Des Weiteren werden Server-Ressourcen geschont. WebRTC läuft innerhalb der Browser-Sandbox und ist dadurch auch sicher - es werden keine PlugIns benötigt oder andere Prozesse gestartet. Damit die Clients voneinander erfahren, wie sie die direkte Verbindung zueinander aufbauen können, sind die Dienste eines Signaling-Servers notwendig. | | | Janus || WebRTC Gateway || [[Nextcloud/Talk:HPB:Janus]] || |
| | | |- |
| ;Weitere Informationen
| | | NATS || Messaging Server || [[Nextcloud/Talk:HPB:NATS]] || |
| # https://github.com/meetecho/janus-gateway
| | |- |
| | | | Signaling-Servern || Signaling-Servern || [[Nextcloud/Talk:HPB:Signaling-Server]] || |
| == NATS messaging server ==
| | |- |
| <!-- '''TODO: ''' Funktion und Aufgabe des Dienstes beschreiben -->
| | | Webserver Frontend || Webserver Frontend || [[Nextcloud/Talk:HPB:Apache]] || |
| | | |} |
| Der NATS-Server ermöglicht es Anwendungen und Diensten Daten auszutauschen, die in Nachrichten unterteilt sind. Clients stellen über eine URL eine Verbindung zum NATS-Server her und können anschließend Nachrichten zu einem bestimmten Betreff abonnieren oder veröffentlichen.
| |
| | |
| ;Weitere Informationen
| |
| # https://nats.io/
| |
| | |
| == Signaling-Server ==
| |
| <!-- '''TODO: ''' Funktion und Aufgabe des Dienstes beschreiben -->
| |
| | |
| Der Signaling-Server ermöglicht Clients, die eine direkte Verbindung zueinander aufbauen wollen, den Austausch von Informationen, die dies gewährleisten. Möchte sich ein Client A mit einem Client B verbinden, '''signalisiert''' er dies dem Signaling-Server. Sollte Client B der Verbindungsanfrage zustimmen, übermittelt dieser seine Verbindungsinformationen an den Signaling-Server, der diese an Client A weiterreicht. Daraufhin erfolgt der direkte Verbindungsaufbau zwischen den Clients A und B.
| |
| | |
| ;Weitere Informationen
| |
| # https://github.com/strukturag/nextcloud-spreed-signaling
| |
| | |
| == Apache Webserver ==
| |
| <!-- '''TODO: ''' Funktion und Aufgabe des Dienstes beschreiben -->
| |
| | |
| Der Apache Webserver ist einer der meistgenutzten Webserver im Internet. Die Software ist modular aufgebaut und dementsprechend durch die Installation von zusätzlichen Modulen in ihrer Funktionalität erweiterbar. Für den Signaling-Server wird eine eigene Subdomain erzeugt (signaling.foxtom.de) und Apache als Reverse-Proxy konfiguriert. Bei einem solchen Szenario beantwortet der Webserver die Anfragen nicht selbst, sondern übergibt sie an einen Backend-Server, der keine direkte Verbindung zum Internet hat. Der Backend-Server - in diesem Fall der Signaling-Server - bearbeitet die Anfrage und übergibt den Inhalt zurück an den Apache-Webserver, der damit die HTTP-Antwort erzeugt und zurück an den anfragenden Client sendet. Im Endeffekt wird hier ein Zugang zum Signaling-Server über HTTPS geschaffen.
| |
| | |
| ;Weitere Informationen
| |
| # https://httpd.apache.org/docs/2.4/ Dokumentation zum Apache HTTP Server
| |
| # https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html Reverse Proxy
| |
|
| |
|
| = Installation = | | = Installation = |
| == Vorbereitung ==
| |
| === Schlüssel (keys) erstellen ===
| |
| ;<api-Key> für Janus
| |
| $ '''openssl rand -base64 16'''
| |
|
| |
| ;Hash-Key
| |
| $ '''openssl rand -hex 16'''
| |
|
| |
| ;Block-Key
| |
| $ '''openssl rand -hex 16'''
| |
|
| |
| ;Secret Key für die Nextcloud
| |
| $ '''openssl rand -hex 16'''
| |
|
| |
| ; openssl
| |
| * Option '''rand''' Pseudozufallszeichenketten einer bestimmten Kodierung und der angegebenen Länge erzeugt werden.
| |
| * Option '''base64'''
| |
| ** wird eine Zeichenkette aus Zahlen, Groß- & Kleinbuchstaben, sowie den Zeichen '+' und '/' generiert
| |
| * Option '''hex''' eine Zeichenkette aus Hexadezimalzahlen erzeugt wird.
| |
|
| |
|
| |
| == Server-Daten == | | == Server-Daten == |
| '''Nextcloud-Server:''' cloud.foxtom.de
| |
| '''TURN-Server:''' cloud.foxtom.de:5349
| |
| '''Signaling Server:''' signaling.foxtom.de
| |
|
| |
|
| <!--
| | {| class="wikitable sortable" |
| TODO
| | |- |
| * Was machen und bedeuten die folgenden Kommandos?
| | ! Server !! URL |
| * Warum brauchen wir diese Schlüssel?
| | |- |
| * Sind die vorgeschlagenen Einstellungen sicher genug?
| | | Nextcloud-Server || cloud.foxtom.de |
| * Wie ist mit diesen Daten umzugehen?
| | |- |
| -->
| | | TURN-Server || turn.foxtom.de:5349 |
| | |- |
| | | Signaling Server || signaling.foxtom.de |
| | |} |
|
| |
|
| = Konfiguration = | | = Konfiguration = |
| == Dateien == | | == Schlüssel (keys) erstellen == |
| | | {| class="wikitable sortable" |
| = Anwendungen =
| | |- |
| [[Category:Nextcloud:Verwaltung]]
| | ! Aufgabe !! Befehl |
| | | |- |
| = Sicherheit =
| | | Api-Key für Janus || openssl rand -base64 16 |
| = Dokumentation =
| | |- |
| == RFC ==
| | | Hash-Key || openssl rand -hex 16 |
| == Man-Pages ==
| | |- |
| == Info-Pages ==
| | | Block-Key || openssl rand -hex 16 |
| == Projekt-Homepage ==
| | |- |
| | | | Secret Key für die Nextcloud || openssl rand -hex 16 |
| = Links =
| | |} |
| == Siehe auch ==
| |
| == Weblinks ==
| |
| <!-- '''TODO: ''' Linke beschreiben und ich Gruppen aufteilen -->
| |
| # https://github.com/strukturag/nextcloud-spreed-signaling
| |
| # https://de.wikipedia.org/wiki/WebRTC
| |
| # https://decatec.de/home-server/nextcloud-talk-mit-eigenem-signaling-server-high-performance-backend/
| |
| # https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/
| |
| # https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/
| |
| # https://decatec.de/linux/lets-encrypt-zertifikate-mit-acme-sh-und-nginx/
| |
| # https://decatec.de/home-server/rsa-und-ecdsa-zertifikate-mit-nginx-hybrid-loesung/
| |
| # https://decatec.de/home-server/tlsv1-3-unter-ubuntu-server-18-04-lts-mit-nginx/
| |
| # https://decatec.de/home-server/docker-auf-ubuntu-server/
| |
| | |
| == Einzelnachweise ==
| |
| <references />
| |
| | |
| = Testfragen =
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 1''
| |
| <div class="mw-collapsible-content">'''Antwort1'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 2''
| |
| <div class="mw-collapsible-content">'''Antwort2'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 3''
| |
| <div class="mw-collapsible-content">'''Antwort3'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 4''
| |
| <div class="mw-collapsible-content">'''Antwort4'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 5''
| |
| <div class="mw-collapsible-content">'''Antwort5'''</div>
| |
| </div>
| |
| | |
| | |
| = Janus =
| |
| siehe '''[[Nextcloud:Talk:HPB:Janus]]'''
| |
| | |
| = NATS =
| |
| siehe '''[[Nextcloud:Talk:HPB:NATS]]'''
| |
| | |
| = Signaling Server =
| |
| siehe '''[[Nextcloud:Talk:HPB:Signaling-Server]]'''
| |
|
| |
|
| = Frontend-Webserver (Apache) =
| | ;siehe auch '''[[Openssl]]''' |
| * '''[Normalerweise?]''' wird der Signalisierungsserver hinter einem Webserver ausgeführt, der das SSL-Protokoll ausführt oder als Load Balancer für mehrere Signalisierungsserver fungiert.
| |
|
| |
|
| == Installation == | | == Einbinden in Nextcloud Talk == |
| | siehe '''[[Nextcloud/Talk:HPB:Einbinden in Nextcloud Talk]]''' |
|
| |
|
| == Konfuguration == | | == Firewall konfigurieren == |
| * Um den Apache-Webservice als Frontend für den Signalisierungsserver zu konfigurieren
| | # apt install ufw |
| * müssen die Module mod_proxy_http und mod_proxy_wstunnel aktiviert sein
| |
| * damit WebSocket- und API-Backend-Anforderungen weitergeleitet werden können
| |
|
| |
|
| # a2enmod proxy | | # ufw allow http |
| # a2enmod proxy_http | | # ufw allow https |
| # a2enmod proxy_wstunnel | | # ufw allow ssh |
| | # ufw allow 5349/tcp |
| | # ufw allow 5349/udp |
|
| |
|
| == Virtual-Host einrichten ==
| | # ufw enable |
| Jetzt kann die Virtual-Host-Konfiguration von Apache erweitert werden, um Anfragen an den Signalisierungsserver weiterzuleiten (vorausgesetzt, der Server wird auf der lokalen Schnittstelle an Port 8080 ausgeführt). Für signaling.foxtom.de sollte die Datei /etc/apache2/sites-available/signaling.foxtom.de.conf wie folgt editiert werden:
| |
|
| |
|
| <IfModule mod_ssl.c> | | # ufw status |
| <VirtualHost *:443>
| |
|
| |
| ServerAdmin webmaster@localhost
| |
| DocumentRoot /var/www/html
| |
|
| |
| ErrorLog ${APACHE_LOG_DIR}/error.log
| |
| CustomLog ${APACHE_LOG_DIR}/access.log combined
| |
|
| |
| ServerName signaling.foxtom.de
| |
| SSLCertificateFile /etc/letsencrypt/live/signaling.foxtom.de/fullchain.pem
| |
| SSLCertificateKeyFile /etc/letsencrypt/live/signaling.foxtom.de/privkey.pem
| |
| Include /etc/letsencrypt/options-ssl-apache.conf
| |
|
| |
| ProxyErrorOverride On
| |
| DocumentRoot "/var/www/html"
| |
| ProxyPass /error/ !
| |
| ErrorDocument 404 /error/404_proxy.html
| |
| ProxyPass / "http://127.0.0.1:8080/"
| |
| RewriteEngine on
| |
| RewriteCond %{HTTP:Upgrade} websocket [NC]
| |
| RewriteCond %{HTTP:Connection} upgrade [NC]
| |
| RewriteRule ^/?(.*) "ws://127.0.0.1:8080/$1" [P,L]
| |
|
| |
| </VirtualHost>
| |
| </IfModule>
| |
| | |
| == Debugging ==
| |
| === Log prüfen ===
| |
| | |
| Die Log-Dateien des Apache-Webservers werden im Verzeichnis /var/log/apache2/ gespeichert. Dabei kommt der Datei '''error.log''' die größte Bedeutung zu - sie ist der erste Anlaufpunkt zu Fehlerdiagnose:
| |
| | |
| $ sudo tail -f /var/log/apache2/error.log
| |
| [Tue Feb 02 00:00:01.238481 2021] [mpm_event:notice] [pid 22518:tid 139736999879808] AH00489: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
| |
| [Tue Feb 02 00:00:01.238532 2021] [core:notice] [pid 22518:tid 139736999879808] AH00094: Command line: '/usr/sbin/apache2'
| |
| | |
| Die '''access'''-Log-Dateien protokollieren jeden Zugriff auf denn Webserver:
| |
| | |
| $ sudo tail -f /var/log/apache2/access.log
| |
| 116.202.118.50 - - [01/Feb/2021:15:01:53 +0100] "POST /api/v1/room/maf38kte HTTP/1.1" 200 3898 "-" "Nextcloud Server Crawler"
| |
| 116.202.118.50 - - [01/Feb/2021:15:02:10 +0100] "POST /api/v1/room/maf38kte HTTP/1.1" 200 3930 "-" "Nextcloud Server Crawler"
| |
| ...
| |
| 116.202.118.50 - - [01/Feb/2021:15:03:04 +0100] "POST /api/v1/room/maf38kte HTTP/1.1" 200 3914 "-" "Nextcloud Server Crawler"
| |
| 116.202.118.50 - - [01/Feb/2021:15:03:17 +0100] "POST /api/v1/room/maf38kte HTTP/1.1" 200 3898 "-" "Nextcloud Server Crawler"
| |
| | |
| $ sudo tail -f /var/log/apache2/other_vhosts_access.log
| |
| | |
| === Debug-/Loglevel einstellen ===
| |
| | |
| Sollten die in den Log-Dateien erfassten Informationen zur Fehlerdiagnose nicht ausreichen, läßt sich durch Modifikation der Konfigurationsdatei des Webservers das Log-Level erhöhen. Der Standardeintrag in der Datei /etc/apache2/'''apache2.conf''' ist "'''LogLevel warn'''". Detailliertere Informationen können mit '''notice''', '''info''' oder '''debug''' erhalten werden. Es besteht auch die Möglichkeit, das Log-Level einzelner Module des Werbservers anzupassen, wie zum Beispiel mit: "LogLevel warn '''proxy:debug'''"
| |
| | |
| = Firewall konfigurieren =
| |
| '''TODO:''' Welche Ports müssen geöffnet sein?
| |
| | |
| '''TODO:''' Welche Schritte sind notwendig, um dies mit ufw zu tun?
| |
| | |
| '''TODO:''' Wie kann die Konfiguration geprüft werden?
| |
| | |
| $ sudo apt install ufw
| |
| | |
| $ sudo ufw allow http
| |
| $ sudo ufw allow https
| |
| $ sudo ufw allow ssh
| |
| $ sudo ufw allow 5349/tcp
| |
| $ sudo ufw allow 5349/udp
| |
| | |
| $ sudo ufw enable
| |
| | |
| $ sudo ufw status
| |
| Status: active | | Status: active |
| | | |
Zeile 235: |
Zeile 77: |
| 5349/udp (v6) ALLOW Anywhere (v6) | | 5349/udp (v6) ALLOW Anywhere (v6) |
|
| |
|
| = Einbinden in Nextcloud Talk = | | == Dateien == |
| * Dies geschieht unter ''Einstellungen'' > ''Talk''.
| |
| * Ganz unten wird nun ein Signaling Server mit dem Plus-Zeichen hinzugefügt.
| |
| * Die Domain lautet hierfür ''https://signaling.meinedomain.de/standalone-signaling''.
| |
| * Unter ''Gemeinsames Geheimnis'' wird nun der Nextcloud Secret Key hinterlegt, den wir ganz am Anfang erzeugt haben:
| |
|
| |
|
| Hinterlegen des Signaling Servers in der Nextcloud Talk Konfiguration
| | = Anwendung = |
|
| |
|
| Die Option'' SSL Zertifikat überprüfen'' sollte hier aktiviert werden, wenn der Signaling Server über ein valides Zertifikat verfügt (zum Beispiel Let’s Encrypt).
| | = Sicherheit = |
| | = Dokumentation = |
| | == Projekt == |
| | # https://github.com/strukturag/nextcloud-spreed-signaling |
|
| |
|
| | = Links = |
| | == Siehe auch == |
| | # https://de.wikipedia.org/wiki/WebRTC |
|
| |
|
| Quelle: https://nichteinschalten.de/signalisierungsserver-fuer-nextcloud-aufsetzen-how-to/
| | == Weblinks == |
| | | # https://decatec.de/home-server/nextcloud-talk-mit-eigenem-signaling-server-high-performance-backend/ |
| netstat -tulpen | grep 8080
| | # https://decatec.de/home-server/nextcloud-auf-ubuntu-server-20-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/ |
| | | # https://decatec.de/home-server/nextcloud-talk-mit-eigenem-turn-server-coturn/ |
| [http://nats.io/documentation/tutorials/gnatsd-install/ http://nats.io/documentation/tutorials/gnatsd-install/]
| | # https://decatec.de/linux/lets-encrypt-zertifikate-mit-acme-sh-und-nginx/ |
| | | # https://decatec.de/home-server/rsa-und-ecdsa-zertifikate-mit-nginx-hybrid-loesung/ |
| | # https://decatec.de/home-server/tlsv1-3-unter-ubuntu-server-18-04-lts-mit-nginx/ |
| | # https://decatec.de/home-server/docker-auf-ubuntu-server/ |
|
| |
|
| [https://github.com/meetecho/janus-gateway https://github.com/meetecho/janus-gateway]) can be used to act as a WebRTC gateway. See the documentation of Janus on how to configure and run the server. At least the <tt>VideoRoom</tt> plugin and the websocket transport of Janus must be enabled.
| |
|
| |
|
| The signaling server uses the <tt>VideoRoom</tt> plugin of Janus to manage sessions. All gateway details are hidden from the clients, all messages are sent through the signaling server. Only WebRTC media is exchanged directly between the gateway and the clients.
| |
|
| |
|
| Edit the <tt>server.conf</tt> and enter the URL to the websocket endpoint of Janus in the section <tt>[mcu]</tt> and key <tt>url</tt>. During startup, the signaling server will connect to Janus and log information of the gateway.
| |
|
| |
|
| The maximum bandwidth per publishing stream can also be configured in the section <tt>[mcu]</tt>, see properties <tt>maxstreambitrate</tt> and <tt>maxscreenbitrate</tt>.
| |
|
| |
|
| == Schlüssel für den TURN-Server ==
| | [[Kategorie:Nextcloud/Talk]] |
| * Talk-Einstellungen der Nextcloud
| |
| '''TODO:''' Beschreibung des Klickwegs als Text
| |
| | |
| '''TODO:''' Screenshot hinzufügen
| |
| | |
| Sofern bereits ein TURN-Server installiert ist, kann der benötigte Schlüssel im Administrator-Bereich der Nextcloud ausgelesen werden: Einstellungen >> Talk.
| |
| Über den Link: https://cloud.foxtom.de/settings/admin/talk gelangt man direkt zu den Einstellungen. Der Schlüssel findet sich auch in der Datei /etc/turnserver.conf (static-auth-secret=<Schlüssel>).
| |
|
| |
| {|
| |
| | [[Datei:TURN-Server-Key.png | links | 800px | TURN-Server-Konfiguration im Administrator-Bereich der Nextcloud-Talk-App]]
| |
| |}
| |