BigBlueButton installieren: Unterschied zwischen den Versionen
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 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 <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
certbotautomatisch (Timercertbot.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-alternativesfür Java-Werkzeuge. Sie sind harmlos. - Ein Fehler von
freeswitch.servicebeim 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 -hund die Dokumentation lesen.