Ein eigener TeamSpeak-Sprachserver auf einem VPS läuft rund um die Uhr, und Freunde oder Ihr Team können jederzeit in den gewünschten Kanal kommen, auch wenn Ihr Computer ausgeschaltet ist. Sie entscheiden selbst, wie viele Kanäle es gibt, wer in ihnen sprechen darf und wem Sie Administratorrechte geben. In diesem Artikel installieren wir den Server aus dem offiziellen Archiv, starten ihn unter einem eigenen Benutzer mit systemd, finden den Administratorschlüssel und das ServerQuery-Passwort, öffnen die Ports, prüfen sie von außen, verbinden uns mit dem Client und richten Backups ein. Am Ende folgt ein Abschnitt zur Beta-Version von TeamSpeak 6 Server. Alle Schritte haben wir auf einem Testserver mit Debian 12 nachvollzogen, die Version des Servers war zum Zeitpunkt des Tests TeamSpeak 3 Server 3.13.8.
Wie der TeamSpeak-Server funktioniert
Der TeamSpeak-Server ist ein Programm, das die Stimme des Sprechenden entgegennimmt und an alle weiterleitet, die im selben Kanal sitzen. Die Sprachströme mischt der Server nicht. Sprechen mehrere Personen gleichzeitig, empfängt er also mehrere Ströme und schickt jedem Zuhörer alle davon. Daraus folgt für das Netzwerk etwas Einfaches. Der eingehende Datenverkehr des Servers ist gering, der ausgehende wächst dagegen mit der Zahl der Zuhörer und der gleichzeitig Sprechenden, und genau der ausgehende Kanal bestimmt, wie viele Personen Ihr Server bewältigt. Die Sprache läuft über das Protokoll UDP auf Port 9987. UDP wartet nicht auf die Bestätigung jedes Pakets, und in einem Live-Gespräch wird ein verspätetes Paket ohnehin nicht mehr gebraucht, deshalb ist die Verzögerung geringer als bei TCP. Neben der Sprache lauscht der Server auf einigen weiteren Ports. Über 30033/tcp übertragen Clients Dateien, Avatare und Kanalsymbole. Über 10011/tcp läuft ServerQuery, eine textbasierte Verwaltungskonsole, über die Bots, Panels und der Administrator selbst kommunizieren. Die offizielle TeamSpeak-Dokumentation hält nur 9987/udp und 30033/tcp für erforderlich und die ServerQuery-Ports für optional, und in der Firewall halten wir es genauso.
TeamSpeak kennt keine Konten mit Login und Passwort. Beim ersten Start erzeugt der Client ein Schlüsselpaar, und der Server erkennt eine Person an einer eindeutigen Kennung, die aus dem öffentlichen Schlüssel abgeleitet wird. Die Rechte sind an diese Kennung gebunden, der Nickname dient nur als Beschriftung auf dem Bildschirm. Dieses Schema hat einen Nachteil. Solange es auf einem neuen Server keine einzige Person mit Rechten gibt, kann niemand zum ersten Administrator ernannt werden. Diese Aufgabe löst der Privilegschlüssel (Privilege Key, früher hieß er Token). Der Server erzeugt ihn beim allerersten Start und zeigt ihn nur einmal an. Wer den Schlüssel im Client eingibt, landet in der Gruppe Server Admin, und der Schlüssel selbst funktioniert danach nicht mehr. Das zweite Geheimnis ist das ServerQuery-Passwort für das Konto serveradmin. Auch dieses wird nur einmal ausgegeben und öffnet die Verwaltung aller virtuellen Server. Deshalb ist die Suche nach diesen beiden Werten in Schritt 4 wichtiger, als es scheint.
Von TeamSpeak gibt es derzeit zwei Server-Generationen. Auf der Download-Seite ist TeamSpeak 3 Server 3.13.8 weiterhin das stabile Release, während TeamSpeak 6 Server als Beta für Neugierige bereitsteht, und die README des Servers nennt ihn ausdrücklich unvollständig. Für einen Server, der einfach nur laufen soll, sind die Einschränkungen der Beta erheblich. Die integrierte Lizenz ist für 32 Plätze ausgelegt und wird alle zwei Monate mit neuen Builds verlängert, im von uns geprüften Build gilt sie bis zum 1. Dezember 2026. Lizenzen von TeamSpeak 3 passen nicht zur sechsten Version, und eine Datenübernahme zwischen den Versionen gibt es bisher nicht. Deshalb haben wir den Hauptteil des Artikels dem stabilen TeamSpeak 3 gewidmet und der Beta einen eigenen Abschnitt am Ende eingeräumt. Der Server 3.13.8 schreibt beim Start selbst ins Protokoll, dass seine integrierte Lizenz bis zum 1. Juli 2027 gilt, bis zum Sommer 2027 lohnt sich also ein Blick auf die Download-Seite nach einer neueren Version.
Für ein Unternehmen wird eine andere Lizenz benötigt
Der Server ohne Lizenzschlüssel ist kostenlos und zeitlich unbegrenzt, erlaubt aber einen virtuellen Server und bis zu 32 Slots. Der Lizenztext gibt diesen Modus nur Privatpersonen und nichtkommerziellen Gemeinschaften frei. Wenn der Server für ein Unternehmen gedacht ist, bietet TeamSpeak eine eigene kommerzielle Lizenz an, die Bedingungen erfahren Sie direkt bei TeamSpeak.
Was Sie brauchen
- Einen Server mit Debian 12 und mindestens 1 GB Arbeitsspeicher, wie es die TeamSpeak-Dokumentation empfiehlt, zum Beispiel den Tarif DE-RZ9-1. Der TeamSpeak-Server selbst belegte bei uns im Leerlauf etwa 17 MB. Wenn Sie noch keinen Server haben, bestellen Sie ihn nach der Anleitung.
- Eine SSH-Verbindung, zum Beispiel über Termius. Die Befehle werden als
rootausgeführt. - Den TeamSpeak-Client bei Ihnen und bei allen, die den Server betreten. Sie laden ihn auf der Download-Seite von TeamSpeak im Reiter TeamSpeak 3 herunter, zum Zeitpunkt des Tests war dort die Version 3.6.2 zu finden.
- Einen zweiten Computer mit Linux oder macOS, um die Ports in Schritt 6 zu prüfen. Ein zweiter VPS tut es auch.
Schritt 1. Legen Sie einen Benutzer an und laden Sie den Server herunter
Den Server als root zu starten ist nicht sicher, deshalb legen wir für ihn einen eigenen Benutzer teamspeak mit dem Home-Verzeichnis /opt/teamspeak an. Die Anmeldung unter diesem Benutzer ist deaktiviert, den Server verwaltet systemd. Mehr über Benutzer steht im Artikel über Linux-Benutzer.
useradd -r -m -d /opt/teamspeak -s /usr/sbin/nologin teamspeakZum Herunterladen und Entpacken des Archivs werden die Pakete wget und bzip2 benötigt. In unserem Image waren sie bereits installiert, der folgende Befehl ist für den Fall gedacht, dass sie bei Ihnen fehlen.
apt install -y wget bzip2Laden Sie das Archiv des Servers herunter. Die Adresse stammt von der Download-Seite von TeamSpeak, und wenn dort inzwischen eine neuere Version erschienen ist, ersetzen Sie 3.13.8 an beiden Stellen durch diese.
cd /root
wget https://files.teamspeak-services.com/releases/server/3.13.8/teamspeak3-server_linux_amd64-3.13.8.tar.bz2Das Archiv ist etwa 10 MB groß. Entpacken Sie es nach /opt/teamspeak und übergeben Sie die Dateien an den Benutzer teamspeak.
tar -xjf teamspeak3-server_linux_amd64-3.13.8.tar.bz2 -C /opt/teamspeak --strip-components=1
chown -R teamspeak:teamspeak /opt/teamspeakDer Parameter --strip-components=1 entfernt aus den Pfaden den äußeren Ordner des Archivs, deshalb liegt die Datei ts3server direkt in /opt/teamspeak. Nach dem Entpacken belegt dort alles etwa 22 MB.
Schritt 2. Lesen Sie die Lizenz und nehmen Sie sie an
Der Server startet nicht, solange Sie der Lizenz nicht ausdrücklich zustimmen. Überzeugen Sie sich selbst davon und starten Sie ihn von Hand als Benutzer teamspeak.
cd /opt/teamspeak
runuser -u teamspeak -- ./ts3serverDer Server beendet sich sofort und erklärt, wie die Lizenz angenommen wird.

Ohne Zustimmung zur Lizenz startet der Server nicht
Die Lizenz können Sie direkt im Terminal lesen. Sie ist lang, blättern Sie mit der Leertaste, beenden können Sie mit der Taste Q.
runuser -u teamspeak -- env TS3SERVER_LICENSE=view ./ts3server | lessDie Zustimmung zur Lizenz wird durch eine leere Datei .ts3server_license_accepted im Arbeitsverzeichnis des Servers festgehalten. TeamSpeak beschreibt noch zwei weitere Wege, den Parameter license_accepted=1 in der Befehlszeile und die Variable TS3SERVER_LICENSE=accept, aber die Datei ist bequemer, weil sie auch nach Updates erhalten bleibt.
runuser -u teamspeak -- touch /opt/teamspeak/.ts3server_license_acceptedSchritt 3. Richten Sie den Autostart ein
Damit der Server im Hintergrund läuft, zusammen mit dem VPS startet und nach einem Absturz wieder hochfährt, richten wir ihn als systemd-Dienst ein. Wie Dienste aufgebaut sind, steht ausführlich im Artikel über systemd.
nano /etc/systemd/system/teamspeak.serviceFügen Sie den folgenden Text in die Datei ein, speichern Sie mit Ctrl + O, danach Enter, und verlassen Sie den Editor mit Ctrl + X.
[Unit]
Description=TeamSpeak 3 server
After=network-online.target
Wants=network-online.target
[Service]
User=teamspeak
WorkingDirectory=/opt/teamspeak
ExecStart=/opt/teamspeak/ts3server
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetDer Parameter WorkingDirectory ist wichtig, denn genau im Arbeitsverzeichnis sucht der Server die Datei mit der Lizenzzustimmung und speichert Datenbank, Dateien und Protokolle. Der Server läuft im normalen Modus und nicht im Hintergrundmodus, deshalb legt systemd alles, was er auf den Bildschirm schreibt, im Journal ab. Aktivieren Sie den Autostart und starten Sie den Dienst.
systemctl daemon-reload
systemctl enable --now teamspeak
systemctl status teamspeak
Der Dienst läuft und ist für den Autostart aktiviert
Auf unserem Server dauerte der erste Start samt Anlegen der Datenbank etwa eine Sekunde, und im Leerlauf belegte der Dienst laut systemd 16,9 MB Arbeitsspeicher. Wir haben geprüft, dass der Dienst einen Absturz übersteht. Als wir den Prozess mit dem Befehl kill -9 zwangsweise beendeten, startete systemd den Server nach 10 Sekunden neu.
Den Server verwalten Sie jetzt über systemd.
systemctl stop teamspeakschaltet den Server aus.systemctl start teamspeakschaltet ihn ein.systemctl restart teamspeakstartet ihn neu.journalctl -u teamspeak -fzeigt das Journal in Echtzeit, beenden können Sie mit Ctrl + C. Mehr über Protokolle steht im Artikel über Linux-Logs.
Schritt 4. Finden Sie den Privilegschlüssel und das ServerQuery-Passwort
Beim ersten Start hat der Server zwei Geheimnisse ausgegeben. Da der Server unter systemd läuft, liegen sie im Journal des Dienstes. Wir lassen uns daraus nur die benötigten Zeilen anzeigen.
journalctl -u teamspeak --no-pager -o cat | grep -E "loginname|apikey|token="
Passwort, API-Schlüssel und Privilegschlüssel (auf dem Bild sind die Werte verdeckt)
Die Ausgabe besteht aus vier Zeilen.
- In der ersten Zeile stehen der Kontoname
serveradminund sein ServerQuery-Passwort. - In der zweiten Zeile steht der API-Schlüssel zur Verwaltung des Servers über HTTP, er ist nur für diejenigen nützlich, die Bots und Panels schreiben.
- In der dritten und vierten Zeile steht derselbe Privilegschlüssel, den Sie in Schritt 7 brauchen. Der Server gibt ihn zweimal aus, das erste Mal in einer Journalzeile, das zweite Mal in einem Rahmen.
Kopieren Sie diese Werte in einen Passwortmanager. Der Privilegschlüssel ist zusätzlich im Ordner logs in der Protokolldatei des virtuellen Servers festgehalten, das ServerQuery-Passwort und der API-Schlüssel gelangen dagegen nicht in die Protokolldateien, sie sind nur im systemd-Journal zu finden. Falls das Journal mit der Zeit geleert wird oder Sie die Werte früher verlieren, ist das nicht schlimm, im Abschnitt „Häufige Fragen“ unten gibt es einen Weg, einen neuen Schlüssel zu erzeugen und das Passwort zurückzusetzen.
Senden Sie Schlüssel und Passwort niemandem
Der Privilegschlüssel gibt Administratorrechte auf dem Server, und das ServerQuery-Passwort gibt die volle Kontrolle über alle Server. Zeigen Sie sie nicht auf Screenshots und schicken Sie sie nicht per Messenger. Wenn der Schlüssel in falsche Hände geraten ist, bevor Sie ihn benutzt haben, erzeugen Sie einen neuen, wie im Abschnitt „Häufige Fragen“ beschrieben.
Schritt 5. Öffnen Sie die Ports in UFW
Wenn auf dem VPS die Firewall UFW aktiviert ist, öffnen Sie den Sprachport und den Port für die Dateiübertragung. Diese beiden Ports brauchen alle, die den Server betreten. Mehr über die Firewall steht im Artikel über UFW.
ufw allow 9987/udp
ufw allow 30033/tcpDen ServerQuery-Port 10011 sollten Sie nicht für das ganze Internet öffnen. Das Passwort wird dort im Klartext übertragen, und das offizielle Handbuch des Servers nennt diese Variante die frühere Standardeinstellung und rät dringend zu sichereren Protokollen. Wenn Sie ServerQuery von Ihrem Heimcomputer aus benötigen, öffnen Sie den Port nur für Ihre eigene Adresse. Für die Prüfung in Schritt 6 haben wir es genau so gemacht, setzen Sie anstelle von IP-Ihres-Computers Ihre externe Adresse ein.
ufw allow from IP-Ihres-Computers to any port 10011 proto tcp
ufw status
Sprache und Dateien sind für alle offen, ServerQuery nur für eine Adresse
Der Server lauscht auf mehr Ports, als wir geöffnet haben. Außer Sprache und Dateiübertragung nimmt er ServerQuery-Verbindungen in drei Varianten an, die normale auf 10011, per SSH auf 10022 und per HTTP auf 10080, und zwar auf allen Adressen gleichzeitig. Das lässt sich mit dem Befehl ss prüfen.
ss -tuln | grep -E "Netid|:(9987|10011|10022|10080|30033) "
Ports, auf denen der TeamSpeak-Server lauscht
Die Ports 10022 und 10080 haben wir in der Firewall nicht geöffnet, und von einem anderen Computer aus antworten sie nicht. So lassen Sie es am besten.
Schritt 6. Prüfen Sie die Ports von außen
Die Ports müssen von einem anderen Computer aus geprüft werden. Wenn Sie die Prüfung auf dem Server selbst ausführen, gelingt sie auch bei geschlossener Firewall, weil der Datenverkehr über die interne Schnittstelle läuft, die die Firewall nicht einschränkt. Wir haben von einem Computer unter macOS aus geprüft, unter Linux sind die Befehle dieselben.
Zuerst prüfen wir den Port für die Dateiübertragung. Er arbeitet über TCP, deshalb genügt das Programm nc.
nc -vz IP-des-Servers 30033Die Antwort succeeded bedeutet, dass der Port offen ist und der Server antwortet.
Mit dem Sprachport ist es schwieriger, weil UDP auf eine einfache Verbindungsprüfung nicht antwortet. Wir haben ein kurzes Python-Skript geschrieben, das das erste Handshake-Paket sendet, mit dem der Client den Verbindungsaufbau beginnt, und drei Sekunden auf die Antwort wartet. Das ist kein offizielles Werkzeug, wir haben es selbst gemacht, um den Port ohne grafischen Client prüfen zu können. Erstellen Sie die Datei.
nano ts3-udp-check.pyimport os, socket, struct, sys, time
host = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) > 2 else 9987
# Erstes Handshake-Paket von TeamSpeak, so wie es der Client sendet
data = struct.pack('>IBI', 1566914096, 0, int(time.time())) + os.urandom(4) + bytes(8)
packet = b'TS3INIT1' + struct.pack('>HH', 101, 0) + b'\x88' + data
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(3)
s.sendto(packet, (host, port))
try:
reply, addr = s.recvfrom(2048)
print('Der Server hat geantwortet, der Port ist erreichbar')
except socket.timeout:
print('Keine Antwort, der Port ist geschlossen oder der Server läuft nicht')Starten Sie es und geben Sie dabei die Adresse des Servers und den Port an.
python3 ts3-udp-check.py IP-des-Servers 9987Zum Schluss prüfen wir ServerQuery. Verbinden Sie sich mit Port 10011, der Server begrüßt Sie mit der Zeile TS3. Geben Sie danach die Befehle einzeln ein. Setzen Sie anstelle von PASSWORT das ServerQuery-Passwort aus Schritt 4 ein.
nc IP-des-Servers 10011login serveradmin PASSWORT
version
quit
Alle drei Ports antworten, der Server meldet die Version 3.13.8
Die Antwort error id=0 msg=ok auf den Befehl login bedeutet, dass das Passwort akzeptiert wurde, und als Antwort auf version nennt der Server seine Version und Plattform. Auf unserem Server schwieg das Skript vor den ufw allow-Befehlen und meldete, dass keine Antwort kam, danach kam die Antwort nach etwa 60 Millisekunden.
Nach der Prüfung entfernen Sie die Regel für ServerQuery, wenn Sie sie nicht mehr brauchen.
ufw delete allow from IP-Ihres-Computers to any port 10011 proto tcpSchritt 7. Verbinden Sie sich mit dem Client und werden Sie Administrator
Die weiteren Schritte sind nach der offiziellen Dokumentation von TeamSpeak 3 beschrieben, weil wir den grafischen Client auf dem Testserver nicht gestartet haben. Die Namen der Menüpunkte stammen von dort.
- Installieren Sie den TeamSpeak-3-Client und starten Sie ihn.
- Wählen Sie im Menü Connections den Punkt Connect.
- Geben Sie in das Adressfeld die IP-Adresse des Servers ein. Läuft der Server auf Port 9987, muss der Port nicht angegeben werden, für einen anderen Port verwenden Sie die Schreibweise
IP:PORT. - Geben Sie den Nickname ein, unter dem andere Sie sehen. Das Feld für das Serverpasswort lassen Sie leer, solange Sie keines festgelegt haben.
- Klicken Sie auf die Schaltfläche zum Verbinden.
Sie gelangen als gewöhnlicher Benutzer ohne Administratorrechte auf den Server. Um sie zu erhalten, wählen Sie im Menü Permissions den Punkt Use Token und fügen den Privilegschlüssel aus Schritt 4 ein. Wenn alles geklappt hat, erscheint neben Ihrem Nickname das Symbol SA. Der Schlüssel ist einmalig, deshalb funktioniert er nach erfolgreicher Eingabe nicht mehr. Um noch jemandem Rechte zu geben, öffnen Sie im Menü Permissions den Punkt Token Manager, klicken Sie auf Add Token, wählen Sie den Typ Server Group und die Gruppe Server Admin und klicken Sie danach auf Create. In der App für iOS heißt der Punkt zur Eingabe des Schlüssels Use Privilege Key.
Jetzt können Sie den Server einrichten. Klicken Sie mit der rechten Maustaste auf den Namen des Servers über dem obersten Kanal und wählen Sie Edit Virtual Server. Dort legen Sie unter anderem das allgemeine Serverpasswort fest. Es wird gebraucht, wenn nicht jeder, der die Adresse erfährt, auf den Server kommen soll. Einen Link für Freunde können Sie in der Form ts3server://IP-des-Servers?port=9987 gestalten, per Klick darauf verbindet sich der Client selbst mit dem Server. Statt der IP-Adresse ist eine Domain praktisch, wie das geht, steht im Artikel über die Verknüpfung einer Domain.
Der TeamSpeak-6-Client passt auch
Laut der Dokumentation von TeamSpeak kann sich der Client der sechsten Version mit einem TeamSpeak-3-Server verbinden, erhält aber nur die Funktionen der dritten Version. Der TeamSpeak-6-Client ist auf der Download-Seite ebenfalls noch eine Beta und verlangt beim ersten Start, ein myTeamSpeak-Konto zu erstellen.
Backups
Alles, was TeamSpeak speichert, liegt in /opt/teamspeak. Laut der offiziellen Dokumentation werden für den Umzug des Servers auf einen anderen Rechner die folgenden Dateien benötigt.
ts3server.sqlitedbenthält die Datenbank mit allen Kanälen, Gruppen, Rechten und Benutzern und ist die wichtigste Datei.- Der Ordner
filesenthält hochgeladene Dateien, Symbole und Avatare. query_ip_allowlist.txtundquery_ip_denylist.txtenthalten die Adresslisten für ServerQuery. In der Dokumentation heißen siewhitelistundblacklist, in der Version 3.13.8 heißen die Dateien genau so, wie wir es geschrieben haben.licensekey.datgibt es nur bei denen, die eine Lizenz gekauft haben.ssh_host_rsa_keyenthält den Schlüssel der SSH-Variante von ServerQuery, ihn haben wir selbst hinzugefügt, damit sich der Schlüssel des Servers nach der Wiederherstellung nicht ändert.
Einfaches Kopieren von ts3server.sqlitedb auf einem laufenden Server ist unzuverlässig. SQLite schreibt Änderungen zuerst in eine benachbarte Journaldatei und überträgt sie nicht sofort in die Hauptdatei. Wir haben das auf unserem Server geprüft. Nach dem Anlegen von zwei Kanälen enthielt eine Kopie nur der Hauptdatei lediglich einen Kanal statt drei, die Kopie mit den Mitteln von SQLite selbst hat dagegen alle drei gesichert. Deshalb verwenden wir das Programm sqlite3 mit dem Befehl .backup, der eine konsistente Kopie ohne Anhalten des Servers erstellt.
apt install -y sqlite3
nano /opt/teamspeak/backup.shDas Skript sichert die Datenbank und die Dateien in einem Archiv im Ordner /opt/teamspeak/backups und behält die 7 neuesten Archive.
#!/bin/sh
# Kopie der Datenbank und der Dateien von TeamSpeak ohne Anhalten des Servers, behält die 7 neuesten Archive
set -e
cd /opt/teamspeak
mkdir -p backups
tmp=$(mktemp -d)
sqlite3 ts3server.sqlitedb ".backup '$tmp/ts3server.sqlitedb'"
cp -a files query_ip_allowlist.txt query_ip_denylist.txt ssh_host_rsa_key "$tmp"/
[ -f licensekey.dat ] && cp -a licensekey.dat "$tmp"/
tar -czf "backups/teamspeak-$(date +%F-%H%M).tar.gz" -C "$tmp" .
rm -rf "$tmp"
ls -1t backups/teamspeak-*.tar.gz | tail -n +8 | xargs -r rm --Machen Sie das Skript ausführbar, starten Sie es von Hand und tragen Sie es in den Zeitplan des Benutzers teamspeak ein, zum Beispiel jede Nacht um 4:00 Uhr.
chmod +x /opt/teamspeak/backup.sh
chown teamspeak:teamspeak /opt/teamspeak/backup.sh
runuser -u teamspeak -- /opt/teamspeak/backup.sh
echo "0 4 * * * /opt/teamspeak/backup.sh" | crontab -u teamspeak -
Im Archiv liegen die Datenbank, die Adresslisten und der SSH-Schlüssel sowie der Ordner files
Wir haben das Skript sowohl von Hand als auch nach Zeitplan geprüft, beide Male ist ein Archiv entstanden. Mehr über den Zeitplan steht im Artikel über cron. Kopien auf demselben Server helfen nicht, wenn der Server selbst verloren geht, laden Sie die Archive deshalb von Zeit zu Zeit auf Ihren Computer herunter oder schicken Sie sie auf einen anderen Server, zum Beispiel mit dem Befehl rsync.
Um den Server aus einer Kopie wiederherzustellen, stoppen Sie den Dienst, löschen Sie die aktuelle Datenbank und die Dateien, entpacken Sie das gewünschte Archiv und starten Sie den Dienst erneut. Setzen Sie anstelle des Archivnamens im Beispiel Ihren eigenen ein.
systemctl stop teamspeak
rm -rf /opt/teamspeak/ts3server.sqlitedb* /opt/teamspeak/files
tar -xzf /opt/teamspeak/backups/teamspeak-2026-10-21-1503.tar.gz -C /opt/teamspeak
chown -R teamspeak:teamspeak /opt/teamspeak
systemctl start teamspeakWir haben die Wiederherstellung auf unserem Server geprüft. Danach waren der Servername, beide Kanäle, das bisherige ServerQuery-Passwort und der bisherige Privilegschlüssel wieder da. Der Befehl rm löscht nebenbei die temporären Datenbankdateien mit den Endungen -wal und -shm, damit der Server mit einem sauberen Zustand startet.
Ein Server ohne Datenbank startet wie ein neuer
Wenn Sie den Server ohne die Datei ts3server.sqlitedb starten, legt er eine leere Datenbank an und gibt ein neues ServerQuery-Passwort und einen neuen Privilegschlüssel aus. Davon haben wir uns überzeugt, indem wir die Datenbank vorübergehend entfernten und danach die Daten aus der Kopie zurückspielten. Löschen Sie deshalb die Datenbank nicht, ohne ein aktuelles Archiv zu haben.
Server aktualisieren
Der Server wird durch den Austausch der Dateien aktualisiert. In der Dokumentation zum TeamSpeak-Server steht einfach, dass die neuen Dateien über die alten kopiert werden sollen. Datenbank und Einstellungen bleiben dabei unberührt, weil sie nicht im Archiv enthalten sind. Wir haben diese Reihenfolge auf unserem Server wiederholt. Eine neuere Version als 3.13.8 gab es zu dem Zeitpunkt nicht, deshalb haben wir dieselbe Version über die installierte entpackt. Kanäle, Schlüssel und Einstellungen blieben erhalten, und im Journal erschien nach dem Start wieder die Zeile mit der Version. Vor dem Update wird der Server gestoppt und mit dem Skript aus dem vorigen Abschnitt ein Backup erstellt.
systemctl stop teamspeak
runuser -u teamspeak -- /opt/teamspeak/backup.sh
cd /root
wget https://files.teamspeak-services.com/releases/server/NEUE-VERSION/teamspeak3-server_linux_amd64-NEUE-VERSION.tar.bz2
tar -xjf teamspeak3-server_linux_amd64-NEUE-VERSION.tar.bz2 -C /opt/teamspeak --strip-components=1
chown -R teamspeak:teamspeak /opt/teamspeak
systemctl start teamspeakDer letzte Befehl chown ist Pflicht. Wir haben das Archiv als root entpackt, und nach dem Entpacken gehörte die Datei ts3server dem Benutzer root. Die Version nach dem Start können Sie im Journal prüfen.
journalctl -u teamspeak -n 80 --no-pager -o cat | grep "TeamSpeak 3 Server"Die Liste der Änderungen jeder Version liegt in der Datei /opt/teamspeak/CHANGELOG.
TeamSpeak 6 als Beta-Version des Servers in Docker
Wenn Sie die neue Generation ausprobieren möchten, empfiehlt TeamSpeak für TeamSpeak 6 Server die Installation über Docker. Wie Sie Docker selbst installieren, steht im Artikel über die Installation von Docker. Wir haben den Build 6.0.0-beta13.1 geprüft. Das Image ist etwa 60 MB groß, und der Container belegte im Leerlauf etwa 20 MB Arbeitsspeicher. Die Ports der sechsten Version sind fast dieselben geblieben. Die Sprache läuft auf 9987/udp, die Dateiübertragung auf 30033/tcp, und ServerQuery ist standardmäßig nicht aktiviert. Wir haben das von außen geprüft, auf Port 10011 kommt eine Verbindungsverweigerung. Aktivieren lässt es sich über die Parameter des Servers, laut Dokumentation sind dafür die Ports 10022 für SSH und 10080 für HTTP vorgesehen.
Führen Sie den Befehl aus der offiziellen README des Servers aus. Wir haben --restart unless-stopped hinzugefügt, damit der Container nach einem Neustart des VPS wieder hochfährt. Die Zustimmung zur Lizenz wird hier über die Variable TSSERVER_LICENSE_ACCEPTED=accept festgelegt, und die Daten liegen im Volume teamspeak-data.
docker run -d --name teamspeak-server --restart unless-stopped \
-p 9987:9987/udp -p 30033:30033 \
-e TSSERVER_LICENSE_ACCEPTED=accept \
-v teamspeak-data:/var/tsserver \
teamspeaksystems/teamspeak6-server:latest
Der TeamSpeak-6-Container läuft
Den Privilegschlüssel und das ServerQuery-Passwort gibt der Server beim ersten Start genauso aus wie die dritte Version, nur müssen Sie sie im Protokoll des Containers suchen.
docker logs teamspeak-server 2>&1 | grep -E "loginname|apikey|token="
Schlüssel und Passwort im Protokoll des Containers (auf dem Bild sind die Werte verdeckt)
Der Container wird durch den Austausch des Images aktualisiert. Wir haben die Reihenfolge geprüft, danach blieben die Daten im Volume erhalten, und ein neuer Schlüssel und ein neues Passwort wurden nicht erzeugt.
docker pull teamspeaksystems/teamspeak6-server:latest
docker stop teamspeak-server
docker rm teamspeak-serverWiederholen Sie danach den Befehl docker run aus diesem Abschnitt. Wenn Sie den Port für die Dateiübertragung ändern, fügen Sie die Variable TSSERVER_FILE_TRANSFER_PORT mit derselben Nummer hinzu und veröffentlichen Sie dieselbe Portnummer auf dem Host, weil sich die Clients direkt mit diesem Port verbinden. Wir haben das mit Port 30034 geprüft.
Docker öffnet Ports an UFW vorbei
Ports, die über -p veröffentlicht werden, öffnet Docker selbst, und die UFW-Regeln gelten dafür nicht. Wir haben den Container auf den Ports 9988 und 30034 ohne eine einzige Regel in UFW gestartet, und von einem anderen Computer aus antworteten beide Ports. Veröffentlichen Sie nur die Ports, die für alle offen sein sollen.
Was Sie über die Beta wissen sollten
In der README des Servers steht, dass es sich um eine Beta handelt und einige Funktionen noch nicht fertig sind. Die integrierte Lizenz für 32 Plätze wird durch neue Builds verlängert, in unserem Build gilt sie bis zum 1. Dezember 2026, den Server müssen Sie also aktualisieren. Lizenzen von TeamSpeak 3 passen nicht dazu, und eine Datenübernahme zwischen den Versionen gibt es nicht. Wenn die dritte und die sechste Version auf demselben Server installiert sind, brauchen sie unterschiedliche Ports.
Häufige Fragen
Please set the environment variable TS3SERVER_LICENSE to "accept" in order to accept the license agreement
Der Server hat keine Zustimmung zur Lizenz gefunden und sich beendet. Diese Meldung haben wir beim ersten manuellen Start erhalten. Erstellen Sie die leere Datei .ts3server_license_accepted im Arbeitsverzeichnis des Servers, wie in Schritt 2 gezeigt, und stellen Sie sicher, dass im systemd-Dienst WorkingDirectory=/opt/teamspeak angegeben ist, denn die Datei wird genau im Arbeitsverzeichnis gesucht.
local accounting reports an already running instance, instance will shutdown
Ohne Lizenzschlüssel erlaubt TeamSpeak, auf einem Rechner nur einen Server zu starten. Diese Zeile haben wir erhalten, als wir eine zweite Instanz starteten, während der Dienst lief, und die zweite Instanz hielt sofort an. Meistens bedeutet das, dass Sie den Server von Hand starten, während der systemd-Dienst bereits läuft. Stoppen Sie die überzählige Instanz oder verwalten Sie den Server nur über systemctl.
error id=520 msg=invalid\sloginname\sor\spassword
Das ServerQuery-Passwort wurde nicht akzeptiert. Die Zeichen \s in der Antwort bedeuten ein Leerzeichen, so schreibt ServerQuery Leerzeichen. Nehmen Sie das Passwort aus dem Journal, wie in Schritt 4. Wenn das Passwort verloren ist, lässt es sich zurücksetzen. Stoppen Sie den Dienst und starten Sie den Server einmal von Hand mit dem Parameter serveradmin_password, und wenn er die Zeilen zum Start ausgegeben hat, beenden Sie ihn mit Ctrl + C und starten Sie den Dienst wieder.
systemctl stop teamspeak
cd /opt/teamspeak
runuser -u teamspeak -- ./ts3server serveradmin_password=NEUES-PASSWORT
systemctl start teamspeakWir haben diesen Weg geprüft, danach passte das bisherige Passwort nicht mehr, und das neue funktionierte. Beachten Sie, dass das Passwort im Verlauf der Befehle bleibt, deshalb rät die Dokumentation von TeamSpeak, nach der Anmeldung den Befehl clientsetserverquerylogin client_login_name=serveradmin auszuführen. Der Server gibt ein neues Passwort aus, und es steht nicht mehr im Verlauf.
error id=3329 msg=connection\sfailed,\syou\sare\sbanned extra_msg=you\smay\sretry\sin\s600\sseconds
Der Schutz von ServerQuery vor dem Erraten von Passwörtern hat ausgelöst. Diese Antwort haben wir nach drei falschen Passwörtern hintereinander erhalten, die Adresse war für 600 Sekunden gesperrt. Warten Sie diese Zeit ab oder starten Sie den Dienst mit systemctl restart teamspeak neu, wir haben geprüft, dass ein Neustart die Sperre aufhebt. Adressen aus der Datei query_ip_allowlist.txt lässt der Schutz in Ruhe, dort stehen standardmäßig 127.0.0.1 und ::1. Das Hinzufügen einer Adresse zu dieser Datei wirkt sofort, hebt aber eine bereits verhängte Sperre nicht auf, dafür ist ein Neustart nötig.
No reply from server oder Connection Error [0x705]
Der Client hat vom Server keine Antwort erhalten. Die Dokumentation von TeamSpeak nennt als häufige Ursachen eine falsche Adresse oder einen falschen Port, einen nicht gestarteten Server und eine Firewall, die den Datenverkehr blockiert. Prüfen Sie der Reihe nach.
- Der Dienst läuft,
systemctl status teamspeakzeigt active (running). - Der Port 9987/udp ist offen,
ufw statusenthält eine Regel dafür. - Die Prüfung aus Schritt 6 antwortet. Als wir die Regel für 9987/udp absichtlich entfernten, meldete das Skript, dass keine Antwort kommt, und nach dem Befehl
ufw allow 9987/udpkam die Antwort zurück. - Wenn der Server nicht auf Port 9987 läuft, muss die Adresse im Client in der Form
IP:PORTgeschrieben werden.
Privilegschlüssel verloren oder bereits verwendet
Ein neuer Schlüssel wird mit einem ServerQuery-Befehl erzeugt. Öffnen Sie die Konsole direkt auf dem Server, die Adresse 127.0.0.1 blockiert der Schutz vor dem Erraten von Passwörtern nicht, und in der Firewall muss kein Port geöffnet werden.
nc 127.0.0.1 10011Geben Sie nacheinander drei Befehle ein, setzen Sie anstelle von PASSWORT das ServerQuery-Passwort ein.
login serveradmin PASSWORT
use 1
servergrouplistSuchen Sie in der Gruppenliste die Zeile name=Server\sAdmin mit dem Merkmal type=1. Die Zeile mit type=0 hat einen anderen Zweck, sie ist eine Vorlage für künftige Server. Auf unserem Server hatte die gesuchte Gruppe die Nummer 6. Setzen Sie Ihre Nummer in den nächsten Befehl ein.
privilegekeyadd tokentype=0 tokenid1=6 tokenid2=0 tokendescription=new\sadminDer Server antwortet mit einer Zeile token=…, das ist der neue Schlüssel. Wir haben den Befehl geprüft, der Schlüssel wurde erstellt und erschien in der Liste des Befehls privilegekeylist. Die Konsole verlassen Sie mit dem Befehl quit.
Unable to open licensekey.dat, falling back to limited functionality
Das ist kein Fehler, sondern eine Warnung, dass der Server ohne gekaufte Lizenz läuft. Im Journal daneben sehen Sie, dass die Lizenz No License heißt und einen virtuellen Server und 32 Slots erlaubt. Für einen privaten Server reicht das.
Please set the environment variable TSSERVER_LICENSE_ACCEPTED to "accept" in order to accept the license agreement
So verhält sich der TeamSpeak-6-Container, wenn Sie ihn ohne die Variable mit der Lizenzzustimmung starten, genau so haben wir diese Meldung erhalten. Fügen Sie dem Befehl docker run den Parameter -e TSSERVER_LICENSE_ACCEPTED=accept hinzu.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com