TeamSpeak es un sistema de chat de voz muy extendido entre comunidades de juego y equipos de trabajo, con buena calidad de audio y un sistema de permisos muy detallado. El servidor de TeamSpeak 3 se distribuye como un binario para Linux que no está en los repositorios de Ubuntu. En este tutorial lo instalarás en Ubuntu 24.04 con un usuario sin privilegios, lo ejecutarás como servicio systemd, reclamarás los permisos de administrador y harás tareas básicas desde ServerQuery.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS de 64 bits (x86_64), por ejemplo un VPS de CubePath. Con 1 GB de RAM es suficiente.
- Un usuario no root con privilegios
sudo. - UFW activo con el acceso SSH permitido.
- El cliente de TeamSpeak instalado en tu ordenador.
TeamSpeak 3 Server usa estos puertos:
| Puerto | Protocolo | Uso | ¿Abrir en el firewall? |
|---|---|---|---|
| 9987 | UDP | Voz (servidor virtual por defecto) | Sí |
| 30033 | TCP | Transferencia de archivos | Sí |
| 10011 | TCP | ServerQuery en texto plano | No |
| 10022 | TCP | ServerQuery por SSH | Solo si lo necesitas |
Notasin archivo de licencia, TeamSpeak 3 Server funciona con la licencia integrada gratuita, que permite un servidor virtual con hasta 32 usuarios simultáneos.
Paso 1: Crear un usuario dedicado
El servidor no necesita privilegios de root, así que lo ejecutarás con un usuario de sistema propio, sin shell de login, cuyo directorio personal será /opt/teamspeak:
sudo adduser --system --group --home /opt/teamspeak --shell /usr/sbin/nologin teamspeak
Comprueba que el usuario existe:
id teamspeak
uid=112(teamspeak) gid=113(teamspeak) groups=113(teamspeak)
Paso 2: Descargar y verificar TeamSpeak 3 Server
Consulta la versión más reciente en la página de descargas de TeamSpeak. En el momento de escribir este tutorial es la 3.13.7. Descarga el archivo en tu directorio personal:
cd ~
wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2
Calcula su suma SHA256 y compárala con la que aparece en la página de descargas:
sha256sum teamspeak3-server_linux_amd64-3.13.7.tar.bz2
775a5731a9809801e4c8f9066cd9bc562a1b368553139c1249f2a0740d50041e teamspeak3-server_linux_amd64-3.13.7.tar.bz2
Extrae el contenido directamente en /opt/teamspeak y asigna la propiedad al usuario teamspeak:
sudo tar -xjf teamspeak3-server_linux_amd64-3.13.7.tar.bz2 -C /opt/teamspeak --strip-components=1
sudo chown -R teamspeak:teamspeak /opt/teamspeak
Comprueba que el binario y los scripts de arranque están en su sitio:
ls /opt/teamspeak/ts3server*
/opt/teamspeak/ts3server /opt/teamspeak/ts3server_minimal_runscript.sh /opt/teamspeak/ts3server_startscript.sh
Paso 3: Aceptar la licencia
TeamSpeak no arranca hasta que aceptas su licencia. Léela en /opt/teamspeak/LICENSE y, si estás de acuerdo, créala como aceptada con un archivo vacío:
sudo -u teamspeak touch /opt/teamspeak/.ts3server_license_accepted
Paso 4: Crear el servicio systemd
Un servicio systemd arranca TeamSpeak con el sistema, lo reinicia si falla y guarda su salida en el journal. Crea el archivo de la unidad:
sudo nano /etc/systemd/system/teamspeak.service
[Unit]
Description=TeamSpeak 3 Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=teamspeak
Group=teamspeak
WorkingDirectory=/opt/teamspeak
ExecStart=/opt/teamspeak/ts3server_minimal_runscript.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
ts3server_minimal_runscript.sh ejecuta el servidor en primer plano, que es lo que espera Type=simple. Recarga systemd y arranca el servicio:
sudo systemctl daemon-reload
sudo systemctl enable --now teamspeak
sudo systemctl status teamspeak
● teamspeak.service - TeamSpeak 3 Server
Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; preset: enabled)
Active: active (running) since ...
Paso 5: Guardar las credenciales de administrador
En el primer arranque, TeamSpeak crea la base de datos SQLite y muestra dos credenciales que no vuelve a enseñar: la contraseña de la cuenta de ServerQuery serveradmin y un token de privilegio para convertirte en administrador del servidor virtual. Como la salida va al journal, puedes recuperarlas así:
sudo journalctl -u teamspeak --no-pager | grep -E 'loginname|token='
... loginname= "serveradmin", password= "fR3kXz9q"
... token=AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcd
Copia ambos valores a tu gestor de contraseñas ahora. El token solo sirve una vez; la contraseña de serveradmin la usarás para ServerQuery.
Comprueba también que el servidor escucha en los puertos esperados:
sudo ss -tulpn | grep ts3server
udp UNCONN 0 0 0.0.0.0:9987 0.0.0.0:* users:(("ts3server",pid=3120,fd=12))
tcp LISTEN 0 128 0.0.0.0:30033 0.0.0.0:* users:(("ts3server",pid=3120,fd=20))
tcp LISTEN 0 128 0.0.0.0:10011 0.0.0.0:* users:(("ts3server",pid=3120,fd=18))
tcp LISTEN 0 128 0.0.0.0:10022 0.0.0.0:* users:(("ts3server",pid=3120,fd=19))
Paso 6: Abrir los puertos en el firewall
Abre solo los puertos que necesitan los clientes: la voz y la transferencia de archivos. ServerQuery se queda cerrado al exterior y lo usarás desde el propio servidor:
sudo ufw allow 9987/udp comment 'TeamSpeak voz'
sudo ufw allow 30033/tcp comment 'TeamSpeak archivos'
sudo ufw status
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
9987/udp ALLOW Anywhere # TeamSpeak voz
30033/tcp ALLOW Anywhere # TeamSpeak archivos
Paso 7: Conectarte y reclamar los permisos de administrador
En el cliente de TeamSpeak, conéctate a your_server_ip (o a tu dominio, si tiene un registro A apuntando al servidor) con el apodo que quieras. En la primera conexión como único usuario, el cliente suele pedir directamente la clave de privilegio. Si no lo hace, ve a Permisos > Usar clave de privilegio y pega el token del paso 5.
Tu usuario pasa a pertenecer al grupo Server Admin. Compruébalo en la ventana de información de tu cliente, o simplemente haz clic derecho en el servidor y verifica que puedes crear canales con Crear canal.
Desde aquí puedes crear la estructura de canales, asignar grupos a otros usuarios (clic derecho sobre el usuario > Establecer grupos de servidor) y ajustar permisos en Permisos > Grupos de servidor.
Paso 8: Administrar el servidor con ServerQuery
ServerQuery es la interfaz de comandos de TeamSpeak. Por defecto solo acepta conexiones sin límite de velocidad desde 127.0.0.1, así que conéctate desde el propio servidor con nc:
nc 127.0.0.1 10011
TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
Inicia sesión con la contraseña de serveradmin y selecciona el servidor virtual 1:
login serveradmin your_serveradmin_password
use sid=1
Cada comando correcto responde con error id=0 msg=ok. Algunos comandos útiles:
serverinfo
clientlist
channelcreate channel_name=General channel_flag_permanent=1
serveredit virtualserver_name=Mi\sservidor\sTeamSpeak
ServerQuery escapa los espacios como \s, por eso el nombre del servidor se escribe Mi\sservidor\sTeamSpeak. Para expulsar a un usuario, busca su clid en clientlist y ejecuta:
clientkick clid=5 reasonid=5 reasonmsg=Spam
Cierra la sesión con:
quit
Importanteno abras el puerto 10011 a internet. Viaja en texto plano, incluida la contraseña. Si necesitas administrar en remoto, usa un túnel SSH (
ssh -L 10011:127.0.0.1:10011 your_user@your_server_ip) o el ServerQuery por SSH del puerto 10022 limitado a tu IP con UFW.
Paso 9: Hacer copias de seguridad
Toda la configuración (canales, grupos, permisos, usuarios registrados) vive en la base de datos SQLite ts3server.sqlitedb, y los archivos subidos por los usuarios en el subdirectorio files. Para una copia consistente, detén el servicio, archiva el directorio completo de la instalación (ocupa pocos megas) y vuelve a arrancar:
sudo systemctl stop teamspeak
sudo tar -czf ~/teamspeak-backup-$(date +%F).tar.gz -C /opt teamspeak
sudo systemctl start teamspeak
Comprueba que la base de datos está dentro de la copia:
tar -tzf ~/teamspeak-backup-$(date +%F).tar.gz | grep sqlitedb
teamspeak/ts3server.sqlitedb
Guarda la copia fuera del servidor. Para restaurar, extráela en /opt con el servicio parado y revisa que la propiedad sigue siendo del usuario teamspeak.
Solución de problemas
El servicio se detiene nada más arrancar. Revisa el journal con sudo journalctl -u teamspeak -n 50. Si menciona la licencia, falta el archivo .ts3server_license_accepted o no pertenece al usuario teamspeak. Corrige la propiedad con sudo chown -R teamspeak:teamspeak /opt/teamspeak.
Perdiste la contraseña de serveradmin. Detén el servicio y arranca el servidor una vez a mano con el parámetro serveradmin_password:
sudo systemctl stop teamspeak
sudo -u teamspeak /opt/teamspeak/ts3server_minimal_runscript.sh serveradmin_password=your_new_password
Cuando veas que el servidor ha arrancado, deténlo con Ctrl+C y vuelve a iniciar el servicio con sudo systemctl start teamspeak.
Los clientes no conectan. Comprueba que el puerto 9987/udp está abierto en UFW y en cualquier firewall del panel de tu proveedor, y que ss -tulpn muestra ts3server escuchando en UDP 9987.
Las subidas de archivos fallan. Falta abrir el puerto 30033/tcp.
Conclusión
Tienes TeamSpeak 3 Server en Ubuntu 24.04 ejecutándose como servicio con un usuario sin privilegios, con permisos de administrador reclamados, ServerQuery accesible solo desde el propio servidor y un método de copia de seguridad. Como siguientes pasos puedes programar la copia con un timer de systemd, dar de alta un registro SRV _ts3._udp en tu DNS para conectar por nombre sin indicar el puerto, o solicitar una licencia si necesitas más de 32 usuarios.
