Guides

TeamSpeak server on Linux: install TeamSpeak 3, open the ports, become admin

Run your own TeamSpeak 3 server on a Linux VPS: version 3.13.8, licence, systemd, ports 9987 and 30033, the privilege key, backups and the TS6 beta.

Published ~9 min read
On this page

Short answer: to host your own TeamSpeak server, download the TeamSpeak 3 server for Linux (version 3.13.8 as of October 2026), accept its licence, run it under systemd as its own user, open UDP 9987 and TCP 30033, and claim admin rights with the privilege key from the first log. Without a licence key it serves 32 slots.

This guide does that on Debian 12 or 13 and Ubuntu 22.04 or 24.04, keeps the admin ports off the internet, adds nightly backups, and explains where TeamSpeak 5 and the TeamSpeak 6 server beta fit in. Versions and licence terms below were read from teamspeak.com, TeamSpeak’s support articles and its GitHub repository in October 2026.

ItemValue
Stable serverTeamSpeak 3 server 3.13.8 (security release, 27 May 2026)
New serverTeamSpeak 6 server 6.0.0-beta13.1 (22 September 2026), a beta
VoiceUDP 9987
File transferTCP 30033
ServerQueryTCP 10011 (raw) and 10022 (SSH): keep them local
Free use1 virtual server, 32 slots, non-commercial use only
Datats3server.sqlitedb and the files folder

TeamSpeak 3, 5 or 6: which server do I run?

The names cover two different things: clients and servers. TeamSpeak 5 was the working name of the rebuilt client, which now ships as the TeamSpeak 6 client. TeamSpeak’s support pages say it connects to TeamSpeak 3 servers, with the TeamSpeak 3 feature set on them, so a TeamSpeak 3 server still serves every current client.

On the server side there are two programs:

  • TeamSpeak 3 server: the stable release, for Linux, Windows, macOS and FreeBSD, plus an official Docker image. 3.13.8 fixed three denial-of-service flaws, and TeamSpeak asked operators to update as soon as possible, so do not run anything older.
  • TeamSpeak 6 server: published as a beta in TeamSpeak’s GitHub repository. It comes with a 32-slot beta licence that is renewed every two months, TeamSpeak describes the beta as not intended for production use, TeamSpeak 3 licences do not work on it, and there is no migration path from a TeamSpeak 3 database.

For a community that should keep its channels and permissions, run the TeamSpeak 3 server; the rest of this guide sets it up. The TeamSpeak 6 beta is worth a look on the side, and the last section shows how.

How many slots can I use without paying?

Without a licence key, the TeamSpeak 3 server runs one virtual server with up to 32 slots, and TeamSpeak limits that unlicensed use to non-commercial groups and private users. A clan or a group of friends on its own VPS is exactly that case. More slots or more virtual servers need a licence bought from TeamSpeak, and selling TeamSpeak servers to others needs a hosting licence of its own. Licence names, slot steps and prices change, so check the licensing pages on teamspeak.com before you plan beyond 32.

How much server does TeamSpeak need?

Very little: the server is one small native process with an SQLite database. Two things grow with use:

  • Bandwidth. The server forwards each speaker’s voice to every listener in the channel, so traffic grows with speakers times listeners, and the codec quality you set per channel multiplies it.
  • Disk. Uploaded files, icons and avatars land in the files folder, and logs collect in logs.

After a busy evening, systemctl status teamspeak shows the service’s real memory on its Memory: line. That is the number to size by, and on most groups it leaves the smallest VPS mostly idle, which is why TeamSpeak often shares a machine with a game server or a Discord bot.

How do I install the TeamSpeak 3 server on Linux?

The server needs no root rights, so it gets its own unprivileged account. The commands below were written from TeamSpeak’s server quickstart; the unpacking step and the backup script further down were checked on Debian 12 (GNU tar 1.34) against a mock server folder.

  1. 1Create the user and install the tools
    Debian · Ubuntu
    sudo apt update
    sudo apt install -y bzip2 curl ca-certificates
    sudo useradd --system --create-home --home-dir /opt/teamspeak --shell /usr/sbin/nologin teamspeak
  2. 2Download and unpack the server

    Take the Linux 64-bit server from the downloads page on teamspeak.com. As of October 2026 the file follows this pattern; if the version has moved on, copy the new link instead:

    Debian · Ubuntu
    VERSION=3.13.8
    cd /tmp
    curl -fLO "https://files.teamspeak-services.com/releases/server/$VERSION/teamspeak3-server_linux_amd64-$VERSION.tar.bz2"
    sudo -u teamspeak mkdir -p /opt/teamspeak/server
    sudo -u teamspeak tar -xjf "teamspeak3-server_linux_amd64-$VERSION.tar.bz2" \
      --strip-components=1 -C /opt/teamspeak/server
    ls /opt/teamspeak/server     # ts3server, ts3server_minimal_runscript.sh, LICENSE, sql, ...
  3. 3Read and accept the licence

    Since version 3.1.0 the server refuses to start until you accept its licence. TeamSpeak documents three equivalent ways: an empty file named .ts3server_license_accepted in the working directory, the start parameter license_accepted=1, or the environment variable TS3SERVER_LICENSE=accept. Read the terms first:

    Debian · Ubuntu
    less /opt/teamspeak/server/LICENSE

    The service below passes license_accepted=1, so the acceptance sits visibly in one place.

  4. 4Create the systemd service

    The two query_*_ip parameters bind ServerQuery to localhost, so the admin interface never listens on the public address in the first place:

    /etc/systemd/system/teamspeak.service
    [Unit]
    Description=TeamSpeak 3 server
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=simple
    User=teamspeak
    Group=teamspeak
    WorkingDirectory=/opt/teamspeak/server
    ExecStart=/opt/teamspeak/server/ts3server_minimal_runscript.sh license_accepted=1 query_ip=127.0.0.1 query_ssh_ip=127.0.0.1
    Restart=on-failure
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target

    The systemd service guide explains each line if you want to adapt it.

  5. 5Start it and save the credentials
    Debian · Ubuntu
    sudo systemctl daemon-reload
    sudo systemctl enable --now teamspeak
    
    # the ServerQuery login, printed to the console once, on the very first start
    sudo journalctl -u teamspeak | grep -i -A2 'loginname'
    
    # the ServerAdmin privilege key, written to the server log
    sudo grep -h 'token=' /opt/teamspeak/server/logs/*.log

    The quickstart is blunt about it: the ServerQuery password for serveradmin is shown only once. Copy both into your password manager now.

Which ports does a TeamSpeak server need?

Two, per TeamSpeak’s own port list. Everything else is optional and should stay closed:

PortProtocolUsed forOpen it?
9987UDPVoice, the port clients connect toYes
30033TCPFile transfer: uploads, icons, avatarsYes
10011TCPServerQuery, raw textNo: localhost only
10022TCPServerQuery over SSHNo: localhost only
10080 / 10443TCPWebQuery over HTTP / HTTPS, off unless you enable itNo
41144TCPTSDNS, only if you run the separate tsdns serverOnly then
ufw · Debian · Ubuntu
sudo ufw allow 22/tcp                       # your SSH port, first
sudo ufw allow 9987/udp comment 'TeamSpeak voice'
sudo ufw allow 30033/tcp comment 'TeamSpeak files'
sudo ufw enable
sudo ss -tulpn | grep ts3server             # what the server really listens on

In the ss output, 9987 and 30033 should listen on 0.0.0.0 (or *), and 10011 and 10022 on 127.0.0.1 only. The UFW guide covers default-deny rules in depth. To test from outside, the open port checker confirms TCP 30033; it cannot test the voice port, because UDP has no handshake to answer. UFW lets outgoing traffic through by default, which the server needs to reach TeamSpeak’s licence servers.

How do I become admin with the privilege key?

Connect to YOUR_IP with any TeamSpeak client. On a fresh server the client normally asks for a privilege key right away; if it does not, open Permissions, Use Privilege Key in the TeamSpeak 3 client, or look for the same option in the newer client’s menus. Paste the value after token=, and your identity joins the Server Admin group. The key works once.

Lost it, or used it with an identity you no longer have? Make a new one over ServerQuery with the saved serveradmin password:

on the server
ssh -p 10022 serveradmin@127.0.0.1     # password: the ServerQuery one
use 1
privilegekeyadd tokentype=0 tokenid1=6 tokenid2=0
# token=...   (6 is the default Server Admin group; older guides use tokenadd, the deprecated alias)
quit

How do I back up a TeamSpeak server?

Everything that defines your server sits in the install folder: channels, groups, permissions and bans in ts3server.sqlitedb, uploads and icons in files, plus licensekey.dat if you bought a licence and the query allow and deny lists. SQLite should not be copied mid-write, so the job stops the service for the few seconds the archive takes:

/opt/teamspeak/backup.sh
sudo tee /opt/teamspeak/backup.sh >/dev/null <<'EOF'
#!/bin/sh
set -e
DEST=/opt/teamspeak/backups
mkdir -p "$DEST"
# licensekey.dat only exists with a paid licence; --ignore-failed-read skips what is missing
tar -czf "$DEST/teamspeak-$(date +%F-%H%M).tar.gz" --ignore-failed-read -C /opt/teamspeak/server \
  ts3server.sqlitedb files licensekey.dat query_ip_allowlist.txt query_ip_denylist.txt ssh_host_rsa_key
# keep the newest 14 archives
ls -1t "$DEST"/teamspeak-*.tar.gz | tail -n +15 | xargs -r rm --
EOF
sudo chmod 750 /opt/teamspeak/backup.sh
# every night at 04:30: stop, archive, start
(sudo crontab -l 2>/dev/null; echo "30 4 * * * systemctl stop teamspeak; /opt/teamspeak/backup.sh; systemctl start teamspeak") | sudo crontab -

A missing file only prints a warning, as the run on Debian 12 showed, and the archive still lands. Copy the archives off the machine now and then with rsync. To restore, stop the service, unpack an archive into /opt/teamspeak/server as the teamspeak user, and start it again.

How do I update the TeamSpeak 3 server?

Stop it, take a backup, and unpack the new archive over the old folder: the database and your files are not part of the archive, so they stay. On the next start the server upgrades its database itself:

Debian · Ubuntu
VERSION=3.13.8      # the new version from teamspeak.com
sudo systemctl stop teamspeak
sudo /opt/teamspeak/backup.sh
cd /tmp && curl -fLO "https://files.teamspeak-services.com/releases/server/$VERSION/teamspeak3-server_linux_amd64-$VERSION.tar.bz2"
sudo -u teamspeak tar -xjf "teamspeak3-server_linux_amd64-$VERSION.tar.bz2" --strip-components=1 -C /opt/teamspeak/server
sudo systemctl start teamspeak && sudo journalctl -u teamspeak -n 20

Why can’t clients connect?

SymptomCheckFix
Service exits right after startjournalctl -u teamspeak -n 30Licence not accepted: license_accepted=1 missing from ExecStart
Client times outss -ulpn | grep 9987Not listening: service down. Listening: open UDP 9987 in ufw
Connects, but uploads and avatars failPort checker on TCP 30033Open TCP 30033
Server full at 32Server info in the clientThe free limit; a licence raises it
Admin tool cannot reach ServerQueryIt runs on your PCUse an SSH tunnel to 127.0.0.1:10011 or 10022

How do I try the TeamSpeak 6 server beta?

TeamSpeak’s repository recommends Docker. The beta keeps the familiar voice and file ports; the licence is accepted with an environment variable:

Docker, from TeamSpeak's README
docker run -d --name teamspeak6 \
  -p 9987:9987/udp -p 30033:30033 \
  -e TSSERVER_LICENSE_ACCEPTED=accept \
  -v teamspeak6-data:/var/tsserver/ \
  teamspeaksystems/teamspeak6-server:latest
docker logs teamspeak6     # look for the ServerAdmin privilege key

The binary release works the same way: ./tsserver --accept-license, with persistent settings in tsserver.yaml. Run it on a second VPS or with other ports if your TeamSpeak 3 server already holds 9987 and 30033, and treat what you build there as a test: the beta licence expires unless TeamSpeak renews it, and nothing moves over from TeamSpeak 3. If Docker is new to you, start with installing Docker on Ubuntu or Debian.

Should I rent TeamSpeak slots or run my own server?

Rented TeamSpeak hosting sells you slots on someone else’s server: nothing to maintain, but you get only the admin rights the host passes on, and the price follows the slot count. Your own VPS costs the same each month whether 5 or 32 people talk, gives you ServerQuery, the database and the backups, and can run a game server or a bot next to TeamSpeak. Every VMHeaven server has its own IPv4 address and always-on DDoS mitigation at no extra cost, which voice servers need as much as game servers do, and the smallest plans are usually enough for a 32-slot TeamSpeak on its own. The gaming VPS page compares both lines if you want to put a game server on the same machine.

Frequently asked

Is a TeamSpeak 3 server free?

For non-commercial use, yes. Without a licence key the TeamSpeak 3 server runs one virtual server with up to 32 slots, which TeamSpeak allows for private users and non-commercial groups. More slots, more virtual servers or selling servers to others need a licence from TeamSpeak; check the current terms on teamspeak.com.

Which ports does a TeamSpeak server use?

UDP 9987 for voice and TCP 30033 for file transfers are the two to open. ServerQuery uses TCP 10011 (raw) and 10022 (SSH); keep those bound to localhost or firewalled, because the serveradmin login controls the whole server. WebQuery on 10080 and 10443 is off unless you enable it.

What is the difference between TeamSpeak 3, 5 and 6?

TeamSpeak 5 was the working name of the rebuilt client, which now ships as the TeamSpeak 6 client and also connects to TeamSpeak 3 servers. On the server side, the TeamSpeak 3 server is the stable release (3.13.8 as of October 2026), while the TeamSpeak 6 server is a beta with a 32-slot beta licence that TeamSpeak says is not meant for production use.

Where do I find the TeamSpeak privilege key?

On the first start the server writes a ServerAdmin privilege key to its log, on a line beginning with token=; search the logs folder for token=. Use it once in the client to join the Server Admin group. If it is lost, log in to ServerQuery as serveradmin and create a new one with privilegekeyadd tokentype=0 tokenid1=6 tokenid2=0.

Related articles

All guides