Counter-Strike 2 (CS2) incluye un servidor dedicado para Linux que se descarga de forma anónima con SteamCMD, el cliente de Steam para línea de comandos. Con tu propio servidor controlas el mapa, el modo de juego, la contraseña y la configuración de las partidas, algo útil para entrenar con tu equipo o montar partidas privadas. En este tutorial instalarás el servidor de CS2 en Ubuntu 24.04, lo registrarás con un token de Steam (GSLT), configurarás el modo competitivo y lo ejecutarás como servicio systemd.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS (x86_64), por ejemplo un VPS de CubePath, con al menos 2 núcleos de CPU y 4 GB de RAM para una partida de 10 jugadores. La frecuencia de la CPU importa más que el número de núcleos.
  • Unos 60 GB libres en disco: los archivos del servidor ocupan casi lo mismo que el juego completo.
  • Un usuario no root con privilegios sudo.
  • Una cuenta de Steam con CS2 para generar el token GSLT. La cuenta no puede estar limitada (debe haber gastado al menos 5 USD en Steam) y necesita un número de teléfono asociado.

Paso 1: Instalar SteamCMD

SteamCMD está en el repositorio multiverse de Ubuntu y necesita bibliotecas de 32 bits, así que activa ambos primero:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update

Instala el paquete. Durante la instalación se te pedirá aceptar la licencia de Steam; selecciona I AGREE para continuar:

sudo apt install steamcmd

El binario queda en /usr/games/steamcmd. Compruébalo:

ls -l /usr/games/steamcmd

Paso 2: Crear un usuario dedicado

Un servidor de juegos nunca debe ejecutarse como root. Crea un usuario normal llamado steam que será el propietario de los archivos del servidor:

sudo useradd -m -s /bin/bash steam

Cambia a ese usuario para los siguientes pasos:

sudo -iu steam

Paso 3: Descargar el servidor de CS2

El servidor dedicado de CS2 se descarga con el mismo ID de aplicación que el juego, 730, y no requiere iniciar sesión con una cuenta de Steam. Ten en cuenta que +force_install_dir debe ir antes de +login:

/usr/games/steamcmd +force_install_dir /home/steam/cs2 +login anonymous +app_update 730 validate +quit

La descarga es de varias decenas de GB, así que tardará un rato según la conexión. Termina con:

Success! App '730' fully installed.

El servidor necesita la biblioteca steamclient.so en ~/.steam/sdk64/, y si no la encuentra se detiene con el error failed to load steamclient.so. La forma más fiable de tenerla es instalar el paquete Steamworks SDK Redist (aplicación 1007) y enlazar su biblioteca:

/usr/games/steamcmd +force_install_dir /home/steam/steamworks-sdk +login anonymous +app_update 1007 +quit
mkdir -p ~/.steam/sdk64
ln -sf /home/steam/steamworks-sdk/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

Comprueba que el binario del servidor y el enlace existen:

ls -l /home/steam/cs2/game/bin/linuxsteamrt64/cs2 ~/.steam/sdk64/steamclient.so

Paso 4: Obtener un token GSLT

Un Game Server Login Token (GSLT) asocia el servidor a tu cuenta de Steam. Valve lo exige para que un servidor de CS2 sea accesible desde Internet y aparezca en el navegador de servidores; sin él, el servidor solo funciona en modo LAN.

  1. Abre https://steamcommunity.com/dev/managegameservers e inicia sesión.
  2. En App ID escribe 730, que es el ID de CS2.
  3. En Memo pon un nombre que identifique el servidor, por ejemplo cs2-cubepath.
  4. Pulsa Create y copia el valor de la columna Login Token.

Cada token solo puede usarlo un servidor a la vez. Trátalo como una contraseña: si se filtra, puedes regenerarlo desde la misma página.

Paso 5: Configurar server.cfg

Los ajustes del servidor van en server.cfg, dentro del directorio game/csgo/cfg. Créalo como usuario steam:

nano /home/steam/cs2/game/csgo/cfg/server.cfg
hostname "CubePath CS2"
sv_password "tu_contraseña_servidor"
rcon_password "tu_contraseña_rcon"
sv_lan 0
sv_cheats 0

Sustituye tu_contraseña_servidor y tu_contraseña_rcon por contraseñas propias y distintas. Qué hace cada línea:

  • hostname: el nombre que verán los jugadores en el navegador de servidores.
  • sv_password: la contraseña para entrar. Déjala vacía ("") para un servidor abierto.
  • rcon_password: la contraseña de la consola remota, que permite administrar el servidor desde el juego.
  • sv_lan 0: permite conexiones desde Internet.

Los ajustes propios de cada modo (duración de las rondas, dinero inicial, número de rondas) se definen en los archivos gamemode_*.cfg del mismo directorio. Para cambiar alguno sin tocar los archivos del juego, crea el archivo _server.cfg correspondiente, por ejemplo gamemode_competitive_server.cfg para el modo competitivo, y pon ahí solo las variables que quieras cambiar:

nano /home/steam/cs2/game/csgo/cfg/gamemode_competitive_server.cfg
mp_maxrounds 24
mp_overtime_enable 1

Vuelve a tu usuario con sudo:

exit

Paso 6: Crear el servicio systemd

El modo de juego se elige al arrancar con las variables game_type y game_mode:

Modogame_typegame_mode
Casual00
Competitivo01
Wingman02
Carrera armamentística10
Deathmatch12

Guarda el token GSLT en un archivo de entorno que solo pueda leer root, para no dejarlo en la unidad:

sudo install -m 600 /dev/null /etc/cs2-server.env
sudo nano /etc/cs2-server.env
CS2_GSLT=tu_token_gslt

Crea la unidad de systemd:

sudo nano /etc/systemd/system/cs2.service
[Unit]
Description=Counter-Strike 2 dedicated server
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/cs2
EnvironmentFile=/etc/cs2-server.env
ExecStartPre=-/usr/games/steamcmd +force_install_dir /home/steam/cs2 +login anonymous +app_update 730 +quit
ExecStart=/home/steam/cs2/game/bin/linuxsteamrt64/cs2 -dedicated -port 27015 -maxplayers 10 +game_type 0 +game_mode 1 +map de_dust2 +sv_setsteamaccount ${CS2_GSLT} +exec server.cfg
TimeoutStartSec=1800
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Algunos detalles de la unidad:

  • ExecStartPre busca actualizaciones del juego antes de cada arranque. Cuando Valve publica un parche, los clientes actualizados no pueden entrar en un servidor antiguo, así que basta con reiniciar el servicio. El - inicial permite arrancar aunque Steam no responda, y TimeoutStartSec deja margen para descargas grandes.
  • -maxplayers 10 es adecuado para partidas competitivas 5 contra 5. Súbelo para casual o deathmatch.
  • +map de_dust2 es el mapa inicial. Puedes usar cualquier mapa oficial, como de_mirage, de_inferno o de_nuke.

Recarga systemd y arranca el servidor:

sudo systemctl daemon-reload
sudo systemctl enable --now cs2

Paso 7: Comprobar que el servidor funciona

Sigue el log mientras arranca. Cuando se conecta a Steam con el token, verás una línea similar a esta:

sudo journalctl -u cs2 -f
... Connection to Steam servers successful.

Pulsa CTRL+C para salir del log. El servicio debe estar active (running) y escuchando en el puerto 27015:

sudo systemctl status cs2 --no-pager
sudo ss -ulpn | grep 27015
UNCONN 0 0 0.0.0.0:27015 0.0.0.0:* users:(("cs2",pid=5123,fd=...))

Paso 8: Abrir el cortafuegos

CS2 usa el puerto 27015 en UDP para el juego y en TCP para la consola remota (RCON). Si tienes UFW activado, permite ambos:

sudo ufw allow 27015/udp
sudo ufw allow 27015/tcp
sudo ufw status

Conéctate desde el juego: activa la consola de desarrollador en Ajustes > Juego > Activar consola de desarrollador, ábrela con la tecla º (o ~) y escribe:

connect ip_de_tu_servidor:27015; password tu_contraseña_servidor

Paso 9: Administrar el servidor con RCON

Con RCON puedes cambiar de mapa o expulsar jugadores desde la consola del juego, sin acceder al servidor. Una vez dentro de la partida, autentícate y lanza comandos con el prefijo rcon:

rcon_password tu_contraseña_rcon
rcon changelevel de_mirage
rcon status
rcon mp_restartgame 1
  • changelevel cambia el mapa sin desconectar a los jugadores.
  • status muestra los jugadores conectados y su ID de usuario.
  • mp_restartgame 1 reinicia la partida al cabo de un segundo.
  • kickid <id> expulsa a un jugador usando el ID que muestra status.

Para aplicar cambios de server.cfg o del modo de juego definido en la unidad, reinicia el servicio:

sudo systemctl restart cs2

Solución de problemas

  • failed to load steamclient.so en el log. Falta el enlace del paso 3 o apunta a una ruta que no existe. Revisa ls -l /home/steam/.steam/sdk64/steamclient.so como usuario steam.
  • El servidor arranca pero solo en modo LAN. El token GSLT falta, es incorrecto o está en uso por otro servidor. Revisa /etc/cs2-server.env y genera un token nuevo si hace falta.
  • Los jugadores ven un error de versión al conectar. El servidor no está actualizado. Ejecuta sudo systemctl restart cs2 para que ExecStartPre descargue el parche.
  • Nadie puede conectarse. Comprueba que el puerto 27015/udp está abierto en UFW y en cualquier cortafuegos externo, y que te conectas a la IP pública del servidor.

Conclusión

Ya tienes un servidor dedicado de Counter-Strike 2 en Ubuntu 24.04, registrado con tu token GSLT, en modo competitivo y gestionado por systemd, que se actualiza en cada reinicio. Como siguientes pasos puedes crear archivos _server.cfg para otros modos, programar un reinicio diario con un temporizador de systemd para aplicar parches automáticamente o añadir un segundo servidor con otro puerto y otro token.