BigBlueButton installieren: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Neue Anleitung
 
IPv6 für Medien: TURN, mediasoup, Firewall-Alias
 
Zeile 127: Zeile 127:


=IPv4 und IPv6=
=IPv4 und IPv6=
*Die '''Weboberfläche''', Greenlight und die Schnittstelle sind über '''IPv4 und IPv6''' erreichbar (wenn A- und AAAA-Eintrag sowie die ufw-Regeln für beide da sind).
Die Weboberfläche, Greenlight und die Schnittstelle sind mit A- und AAAA-Eintrag sowie den ufw-Regeln für beide Protokolle sofort über '''IPv4 und IPv6''' erreichbar. Für die '''Medien''' (Audio, Video) sind in der Voreinstellung der eingebaute TURN-Server und mediasoup nur an die IPv4-Adresse gebunden. LiveKit, die Standardschiene in BigBlueButton 4.0, sammelt die Adressen aller Netzwerkkarten ein und braucht keine Änderung.
*Die '''Medien''' (Audio, Video) und der eingebaute TURN-Server sind in der Voreinstellung '''nur an die IPv4-Adresse''' gebunden: <code>listening-ip</code> in <code>/etc/turnserver.conf</code>, <code>announcedIp</code> bei Mediasoup und LiveKit. Ein Teilnehmer nur mit IPv6 kommt damit ins Webinterface, aber nicht in die Medienströme. Die üblichen Rechner mit beiden Adressen nutzen für die Medien IPv4 und merken nichts davon.
 
==TURN-Server==
In <code>/etc/turnserver.conf</code> die IPv6-Adresse zusätzlich eintragen (die IPv4-Zeilen bleiben stehen):
<pre>
listening-ip=203.0.113.10
listening-ip=2001:db8:100::10
relay-ip=203.0.113.10
relay-ip=2001:db8:100::10
allowed-peer-ip=203.0.113.10
allowed-peer-ip=2001:db8:100::10
</pre>
Die Zeile <code>allowed-peer-ip</code> ist wichtig, weil die Voreinstellung alle IPv6-Peers mit <code>denied-peer-ip</code> sperrt. Danach <code>sudo systemctl restart coturn</code>.
 
==mediasoup==
In <code>/etc/bigbluebutton/bbb-webrtc-sfu/production.yml</code> bei <code>listenIps</code> einen zweiten Eintrag ergänzen:
<pre>
mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 203.0.113.10
      - ip: "::"
        announcedIp: "2001:db8:100::10"
</pre>
Danach <code>sudo systemctl restart bbb-webrtc-sfu</code>. Das Vorgehen steht in der [https://docs.bigbluebutton.org/administration/firewall-configuration/ Firewall-Anleitung] von BigBlueButton.
 
==Firewall vor dem Server==
Eine Firewall oder ein Router vor dem Server muss für die IPv6-Adresse dieselben Ports durchlassen wie für IPv4: TCP und UDP 3478 sowie UDP 16384–32768. Wer die Regeln mit einem '''Adress-Alias''' schreibt, muss die '''IPv6-Adresse im Alias ergänzen'''. Steht dort nur die IPv4-Adresse, laufen die IPv6-Regeln ins Leere, obwohl sie vorhanden sind.
 
==Testen==
Von einem anderen Rechner mit IPv6 (hier ein Python-Beispiel für eine STUN-Anfrage an den TURN-Server):
<pre>
python3 - <<'EOF'
import socket, os, struct
msg = struct.pack("!HHI", 0x0001, 0, 0x2112A442) + os.urandom(12)
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM); s.settimeout(4)
s.sendto(msg, ("2001:db8:100::10", 3478))
print(len(s.recvfrom(2048)[0]), "Byte Antwort")
EOF
</pre>
Kommt eine Antwort, ist UDP 3478 über IPv6 offen. TCP prüft man mit <code>nc -6 -vz bbb.example.org 3478</code>. Der Medienbereich lässt sich testen, indem man auf dem Server kurz einen UDP-Lauscher auf einem Port im Bereich startet und von außen ein Paket dorthin schickt. Im Browser zeigt <code>about:webrtc</code> (Firefox) oder <code>chrome://webrtc-internals</code> (Chrome) während einer Sitzung, ob ICE-Kandidaten mit der IPv6-Adresse auftauchen.


=Zertifikat und Updates=
=Zertifikat und Updates=

Aktuelle Version vom 30. Oktober 2026, 10:54 Uhr

Diese Anleitung baut einen eigenen BigBlueButton-Server (Version 4.0) mit der Raumverwaltung Greenlight auf einem frischen Ubuntu 24.04 auf. Alle Namen und Adressen sind Beispiele und müssen durch die eigenen ersetzt werden.

Beispielwert Bedeutung
bbb.example.org Name des Servers (FQDN)
203.0.113.10 öffentliche IPv4-Adresse
2001:db8:100::10 öffentliche IPv6-Adresse
admin@example.org Mailadresse für Let's Encrypt

Voraussetzungen

  • Ein frischer, dedizierter Server mit Ubuntu 24.04 (64 Bit). Eine Aktualisierung von einer älteren BigBlueButton-Version ist nicht vorgesehen.
  • 8 CPU-Kerne und 16 GB RAM (mit Swap). Für Tests genügen weniger (4 Kerne, 8 GB).
  • Platte: Mit Aufzeichnungen sind 500 GB empfohlen, ohne Aufzeichnungen reichen 50 GB. Für die Aufzeichnungen am besten ein eigenes Volume.
  • Eine öffentliche IPv4-Adresse und, wenn gewünscht, eine IPv6-Adresse. Dazu etwa 250 Mbit/s symmetrisch bei vielen Teilnehmern.
  • Ein Name (FQDN) mit DNS-Eintrag, denn Kamera, Mikrofon und Bildschirmfreigabe funktionieren im Browser nur über HTTPS.
  • Port 80 und 443 dürfen von keinem anderen Webserver belegt sein.

DNS

Der Name muss auf den Server zeigen, bevor die Installation startet, sonst bekommt Let's Encrypt kein Zertifikat.

bbb.example.org.   IN  A     203.0.113.10
bbb.example.org.   IN  AAAA  2001:db8:100::10

Prüfen (von einem anderen Rechner):

dig +short A    bbb.example.org @8.8.8.8
dig +short AAAA bbb.example.org @8.8.8.8

Wichtig: Wenn ein AAAA-Eintrag existiert, versucht Let's Encrypt auch über IPv6 zu prüfen. Der Server muss dann auf Port 80 über IPv6 erreichbar sein, sonst scheitert das Zertifikat. Wer kein IPv6 anbietet, trägt keinen AAAA-Eintrag ein.

Vorbereitung

hostname -f                # muss bbb.example.org ausgeben
timedatectl                # System clock synchronized: yes
locale -a | grep en_US     # en_US.utf8 muss vorhanden sein
sudo apt update && sudo apt full-upgrade

Firewall

Das Installationsskript richtet mit der Voreinstellung die Firewall ufw ein. Das setzt voraus, dass SSH auf Port 22 läuft, sonst bricht es ab. Zusätzlich muss eine Firewall vor dem Server (Hoster, Router) die Ports durchlassen.

Port Protokoll wofür
22 TCP SSH
80 TCP HTTP, Zertifikat von Let's Encrypt
443 TCP HTTPS, Weboberfläche
3478 TCP und UDP eingebauter TURN-Server
16384–32768 UDP Audio, Video, Bildschirm

Eigener SSH-Port

Läuft SSH auf einem anderen Port (hier als Beispiel 2222), startet man das Skript mit dem Schalter -W und richtet ufw vorher selbst ein. Den SSH-Port zuerst freigeben, sonst sperrt man sich aus:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment "SSH"
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 16384:32768/udp
sudo ufw enable
sudo ufw status numbered

In /etc/default/ufw muss IPV6=yes stehen, damit die Regeln auch für IPv6 gelten (das ist bei Ubuntu die Voreinstellung). Danach in einem zweiten Terminal prüfen, ob eine neue SSH-Verbindung klappt, bevor man das erste schließt.

Installation

Das offizielle Skript bbb-install.sh erledigt alles: Pakete, Docker, nginx, Zertifikat, TURN-Server und Greenlight. Erst herunterladen und ansehen, dann starten:

sudo -i
wget -O bbb-install.sh https://raw.githubusercontent.com/bigbluebutton/bbb-install/v4.0.x-release/bbb-install.sh
chmod 700 bbb-install.sh
./bbb-install.sh -h        # alle Schalter anzeigen

Aufruf mit der eigenen Firewall (-W) und Greenlight (-g):

nohup ./bbb-install.sh -v noble-400 -s bbb.example.org -e admin@example.org -g -W > bbb-install.log 2>&1 &
tail -f bbb-install.log

Wer SSH auf Port 22 hat und die Firewall vom Skript einrichten lässt, lässt -W weg.

Schalter Bedeutung
-v noble-400 BigBlueButton 4.0 auf Ubuntu 24.04
-s Name des Servers
-e Mailadresse für Let's Encrypt
-g Greenlight (Weboberfläche für Räume) installieren
-W keine ufw-Einrichtung durch das Skript
-m /pfad /var/bigbluebutton auf ein eigenes Volume legen (Aufzeichnungen)

Die Installation dauert einige Minuten. Das Log enthält am Ende die Datenbank-Zugangsdaten von Greenlight und gehört deshalb nach der Installation gelöscht oder in ein sicheres Verzeichnis verschoben.

Prüfen

sudo bbb-conf --status      # alle Dienste müssen active sein
sudo bbb-conf --check       # Hinweise zur Konfiguration
sudo certbot certificates   # Zertifikat und Ablaufdatum
sudo docker ps              # greenlight-v3, postgres, redis

Von einem anderen Rechner:

curl -4 https://bbb.example.org/bigbluebutton/api    # returncode SUCCESS
curl -6 https://bbb.example.org/bigbluebutton/api

Ein 502 direkt nach dem Start ist normal, solange Greenlight hochfährt. Nach einer halben Minute sollte https://bbb.example.org/b antworten.

Greenlight-Administrator

Zu Beginn gibt es noch kein Benutzerkonto. Das Administratorkonto legt man im Container an:

sudo docker exec -it greenlight-v3 bundle exec rake admin:create["Name","admin@example.org","EIN-LANGES-PASSWORT"]

Das Passwort steht dann in der Shell-Historie. Besser direkt danach in Greenlight ändern und die Historie bereinigen. Anmelden unter https://bbb.example.org/b.

IPv4 und IPv6

Die Weboberfläche, Greenlight und die Schnittstelle sind mit A- und AAAA-Eintrag sowie den ufw-Regeln für beide Protokolle sofort über IPv4 und IPv6 erreichbar. Für die Medien (Audio, Video) sind in der Voreinstellung der eingebaute TURN-Server und mediasoup nur an die IPv4-Adresse gebunden. LiveKit, die Standardschiene in BigBlueButton 4.0, sammelt die Adressen aller Netzwerkkarten ein und braucht keine Änderung.

TURN-Server

In /etc/turnserver.conf die IPv6-Adresse zusätzlich eintragen (die IPv4-Zeilen bleiben stehen):

listening-ip=203.0.113.10
listening-ip=2001:db8:100::10
relay-ip=203.0.113.10
relay-ip=2001:db8:100::10
allowed-peer-ip=203.0.113.10
allowed-peer-ip=2001:db8:100::10

Die Zeile allowed-peer-ip ist wichtig, weil die Voreinstellung alle IPv6-Peers mit denied-peer-ip sperrt. Danach sudo systemctl restart coturn.

mediasoup

In /etc/bigbluebutton/bbb-webrtc-sfu/production.yml bei listenIps einen zweiten Eintrag ergänzen:

mediasoup:
  webrtc:
    listenIps:
      - ip: 0.0.0.0
        announcedIp: 203.0.113.10
      - ip: "::"
        announcedIp: "2001:db8:100::10"

Danach sudo systemctl restart bbb-webrtc-sfu. Das Vorgehen steht in der Firewall-Anleitung von BigBlueButton.

Firewall vor dem Server

Eine Firewall oder ein Router vor dem Server muss für die IPv6-Adresse dieselben Ports durchlassen wie für IPv4: TCP und UDP 3478 sowie UDP 16384–32768. Wer die Regeln mit einem Adress-Alias schreibt, muss die IPv6-Adresse im Alias ergänzen. Steht dort nur die IPv4-Adresse, laufen die IPv6-Regeln ins Leere, obwohl sie vorhanden sind.

Testen

Von einem anderen Rechner mit IPv6 (hier ein Python-Beispiel für eine STUN-Anfrage an den TURN-Server):

python3 - <<'EOF'
import socket, os, struct
msg = struct.pack("!HHI", 0x0001, 0, 0x2112A442) + os.urandom(12)
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM); s.settimeout(4)
s.sendto(msg, ("2001:db8:100::10", 3478))
print(len(s.recvfrom(2048)[0]), "Byte Antwort")
EOF

Kommt eine Antwort, ist UDP 3478 über IPv6 offen. TCP prüft man mit nc -6 -vz bbb.example.org 3478. Der Medienbereich lässt sich testen, indem man auf dem Server kurz einen UDP-Lauscher auf einem Port im Bereich startet und von außen ein Paket dorthin schickt. Im Browser zeigt about:webrtc (Firefox) oder chrome://webrtc-internals (Chrome) während einer Sitzung, ob ICE-Kandidaten mit der IPv6-Adresse auftauchen.

Zertifikat und Updates

  • Das Zertifikat erneuert certbot automatisch (Timer certbot.timer). Test: sudo certbot renew --dry-run
  • Aktualisieren innerhalb der Version: dasselbe Skript noch einmal mit denselben Schaltern aufrufen.
  • Von einer anderen Hauptversion oder anderem Ubuntu aus wird nicht aktualisiert, sondern auf einem neuen Server neu aufgebaut.

Hinweise aus der Praxis

  • Im Log erscheinen Fehler von update-alternatives für Java-Werkzeuge. Sie sind harmlos.
  • Ein Fehler von freeswitch.service beim ersten Start wird vom Skript durch einen Neustart behoben. Kontrolle: sudo bbb-conf --status.
  • Die Meldung, eine Greenlight-Datei für nginx fehle, kommt beim ersten Lauf, danach wird sie angelegt.
  • Skript, Version und Schalter ändern sich. Immer zuerst ./bbb-install.sh -h und die Dokumentation lesen.

Quelle