Comment créer son serveur Counter-Strike 2
Ce guide vous explique comment installer et configurer un serveur dédié Counter-Strike 2 (CS2) sur votre VPS ou serveur dédié Linux.
Commander un serveur
Pour héberger votre serveur Counter-Strike 2, HostMyServers propose plusieurs offres adaptées au gaming :
- VPS Performance - Idéal pour un serveur CS2 (processeur rapide et stockage suffisant)
- VPS NVMe - Excellent rapport qualité/prix
- Serveurs dédiés Eco - Pour héberger plusieurs serveurs de jeux
- Serveurs dédiés Performance - Performance maximale
Prérequis
Les ressources indiquées ci-dessous correspondent aux besoins du serveur et ne tiennent pas compte des ressources déjà utilisées par le système d'exploitation, les logiciels installés ou les autres services présents sur la machine. Comptez environ 50 Mbps pour 10 joueurs ou plus.
- Accès SSH root ou utilisateur avec sudo
- Système Linux 64 bits (Debian 12/13 ou Ubuntu 22.04/24.04 recommandé, glibc 2.31 ou supérieure requise)
- Pare-feu actif : nftables (recommandé), iptables ou ufw (n'utilisez qu'un seul outil de pare-feu à la fois)
- Minimum 4 Go de RAM (8 Go recommandés)
- Environ 70 Go d'espace disque libre (100 Go recommandés, SSD)
- Port 27015 UDP accessible (et port 27015 TCP pour le RCON, depuis votre adresse IP fixe uniquement)
- Un compte Steam possédant un numéro de téléphone enregistré (pour le token GSLT)
Configuration requise
| Composant | Minimum | Recommandé |
|---|---|---|
| RAM | 4 Go | 8 Go |
| CPU | 2 cœurs | 4 cœurs, fréquence élevée |
| Stockage | 70 Go SSD | 100 Go SSD |
| Réseau | 100 Mbps | 1 Gbps |
Counter-Strike 2 utilise le port 27015 en UDP pour le jeu et en TCP pour l'accès RCON (administration à distance). Le port TCP ne doit être accessible que depuis vos adresses IP (nécessite une adresse IP fixe).
Counter-Strike 2 utilise le système « subtick » : il n'existe plus de paramètre -tickrate à configurer.
Mise à jour du système
sudo apt update && sudo apt upgrade -y
Installation des dépendances
SteamCMD nécessite la bibliothèque 32 bits lib32gcc-s1. Installez les paquets nécessaires :
sudo apt install -y wget tar screen lib32gcc-s1
Création d'un utilisateur dédié
Pour des raisons de sécurité, créez un utilisateur dédié :
sudo adduser --disabled-password --gecos "" cs2
Configuration du pare-feu
Ouvrez le port 27015 en UDP pour les joueurs. Le port 27015 en TCP correspond au RCON : limitez-le à votre adresse IP fixe (remplacez VOTRE_IP).
Avec UFW
sudo ufw allow 27015/udp
sudo ufw allow from VOTRE_IP to any port 27015 proto tcp
sudo ufw reload
Avec iptables
sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s VOTRE_IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
La sauvegarde des règles au redémarrage nécessite le paquet iptables-persistent.
Avec nftables
Ces commandes utilisent la table inet filter et la chaîne input, présentes par défaut dans /etc/nftables.conf sous Debian.
sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr VOTRE_IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
N'ouvrez jamais le port TCP 27015 à tout le monde : il donne accès au RCON. Sans adresse IP fixe, n'ouvrez pas ce port et passez par un tunnel SSH.
Installation de SteamCMD
Connectez-vous en tant qu'utilisateur cs2 :
sudo -u cs2 bash
cd ~
Créez les répertoires et téléchargez SteamCMD :
mkdir -p ~/steamcmd ~/cs2-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
Téléchargement du serveur CS2
Lancez l'installation du serveur (identifiant d'application 730) :
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
Avec un espace disque insuffisant, SteamCMD s'arrête avec l'erreur state is 0x202 after update job (voir la FAQ).
Le téléchargement peut être long. Si l'installation s'arrête avec une erreur réseau, relancez simplement la même commande : SteamCMD reprend où il s'est arrêté.
À la fin, le message Success! App '730' fully installed. s'affiche. Vérifiez que l'exécutable du serveur est bien présent :
ls ~/cs2-server/game/bin/linuxsteamrt64/cs2
Lier steamclient.so
CS2 a besoin du fichier steamclient.so pour communiquer avec Steam. Créez le lien vers le fichier 64 bits de SteamCMD :
mkdir -p ~/.steam/sdk64
ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
Token GSLT (requis)
Pour que votre serveur soit listé dans les serveurs publics et accepte les connexions depuis Internet, il vous faut un token GSLT (Game Server Login Token). Sans lui, le serveur ne fonctionne qu'en réseau local.
Pour le générer, connectez-vous à votre compte Steam et accédez à la Gestion des comptes de serveur de jeu Steam.
La création du token a quelques prérequis :
- Votre compte Steam ne doit pas être banni de la communauté ou verrouillé
- Votre compte Steam ne doit pas être limité
- Votre compte Steam doit avoir un numéro de téléphone enregistré
- Votre compte Steam doit posséder le jeu pour lequel vous créez un compte de serveur de jeu
- Votre compte Steam peut créer jusqu'à 1000 comptes de serveur de jeu
Dans la case App ID du jeu de base, saisissez 730. Vous pouvez ajouter un mémo pour vous rappeler de quel serveur il s'agit, puis finalisez en cliquant sur le bouton Créer.
Pour utiliser le token, ajoutez-le à la ligne de lancement :
+sv_setsteamaccount VOTRETOKEN
Utilisez un token par serveur et ne le partagez jamais. Ajoutez le paramètre à toutes vos lignes de lancement : le premier lancement, la ligne ExecStart du service systemd et la commande lancée avec screen.
Configuration du serveur
Fichier server.cfg
Créez le fichier de configuration :
nano ~/cs2-server/game/csgo/cfg/server.cfg
Configuration de base
hostname "Mon Serveur CS2"
sv_password ""
rcon_password "ChangezMoi"
sv_region 3
sv_lan 0
sv_cheats 0
mp_friendlyfire 0
mp_autoteambalance 1
Choisissez un mot de passe rcon_password long et unique. Toute personne qui le connaît peut administrer votre serveur.
Paramètres principaux
| Paramètre | Description |
|---|---|
hostname | Nom public du serveur |
sv_password | Mot de passe pour rejoindre (vide = public) |
rcon_password | Mot de passe d'administration à distance |
sv_region | Région : 3 = Europe, 0 = Est des USA, 4 = Asie, 255 = monde entier |
sv_lan | 0 = serveur visible sur Internet, 1 = réseau local uniquement |
sv_cheats | Commandes de triche (0 = désactivé) |
mp_friendlyfire | Tirs alliés (0 = désactivé, 1 = activé) |
mp_autoteambalance | Équilibrage automatique des équipes (0 ou 1) |
Modes de jeu
Le mode se choisit au lancement avec +game_type et +game_mode :
| Mode | game_type | game_mode |
|---|---|---|
| Occasionnel (Casual) | 0 | 0 |
| Compétitif | 0 | 1 |
| Wingman | 0 | 2 |
| Course à l'armement (Arms Race) | 1 | 0 |
| Démolition | 1 | 1 |
| Deathmatch | 1 | 2 |
Premier lancement
cd ~/cs2-server/game/bin/linuxsteamrt64
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount VOTRETOKEN
Une fois le démarrage terminé, la console affiche la connexion du serveur aux serveurs Steam. Pour arrêter le serveur, tapez quit.
Optimisation du lancement
Paramètres de lancement
| Paramètre | Description |
|---|---|
-dedicated | Lance le serveur en mode dédié (obligatoire) |
-console | S'exécute en mode console |
-usercon | Active le RCON |
-port | Port du serveur (27015 par défaut) |
-ip | Adresse IP sur laquelle écouter |
-maxplayers | Nombre maximum de joueurs |
+game_type et +game_mode | Mode de jeu (voir le tableau ci-dessus) |
+mapgroup | Groupe de maps (mg_active pour les maps officielles actives) |
+map | Map de démarrage |
+sv_setsteamaccount | Token GSLT (requis, voir la section dédiée) |
-insecure | Désactive la protection VAC (voir l'avertissement ci-dessous) |
-insecure désactive la protection VAC : n'utilisez ce paramètre que pour des tests, il laisse la porte ouverte aux tricheurs.
Laissez toujours 1 à 2 Go de RAM libre pour le système d'exploitation.
Changer le port
./cs2 -dedicated -console -usercon -port 27016 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount VOTRETOKEN
N'oubliez pas d'ouvrir le nouveau port dans le pare-feu.
Structure des fichiers
| Chemin | Description |
|---|---|
game/bin/linuxsteamrt64/cs2 | Exécutable du serveur |
game/csgo/cfg/ | Fichiers de configuration |
game/csgo/cfg/server.cfg | Configuration principale |
game/csgo/addons/ | Extensions (Metamod, CounterStrikeSharp) |
Configuration en tant que service systemd
Créer le fichier de service
Quittez la session de l'utilisateur cs2 (exit) pour revenir à votre compte administrateur, puis créez le fichier de service :
sudo nano /etc/systemd/system/cs2.service
Contenu du fichier :
[Unit]
Description=Counter-Strike 2 Server
After=network.target
[Service]
Type=simple
User=cs2
Group=cs2
WorkingDirectory=/home/cs2/cs2-server/game/bin/linuxsteamrt64
ExecStart=/home/cs2/cs2-server/game/bin/linuxsteamrt64/cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount VOTRETOKEN
Restart=on-failure
RestartSec=20
[Install]
WantedBy=multi-user.target
Activer et démarrer le service
sudo systemctl daemon-reload
sudo systemctl enable cs2.service
sudo systemctl start cs2.service
Commandes de gestion
# Vérifier le statut
sudo systemctl status cs2.service
# Arrêter le serveur
sudo systemctl stop cs2.service
# Redémarrer le serveur
sudo systemctl restart cs2.service
# Voir les logs
sudo journalctl -u cs2.service -f
Avec systemd, la console du serveur n'est pas interactive. Pour envoyer des commandes, utilisez le RCON depuis le jeu ou lancez le serveur avec screen (voir ci-dessous).
Lancement avec screen (alternative)
Si le service systemd est démarré, arrêtez-le avant (sudo systemctl stop cs2.service) : deux serveurs ne peuvent pas utiliser le même port.
sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -S cs2
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount VOTRETOKEN
Pour détacher : Ctrl+A puis D
Pour revenir : screen -r cs2
Lancer en arrière-plan avec un journal
sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -AdmSL cs2 ./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount VOTRETOKEN
| Option | Description |
|---|---|
-A | Adapte la fenêtre à la taille du terminal |
-d -m | Démarre la session détachée, en arrière-plan |
-S cs2 | Nom de la session |
-L | Enregistre la sortie du serveur dans un fichier journal |
Le fichier screenlog.0 est créé dans le dossier où la commande est lancée (~/cs2-server/game/bin/linuxsteamrt64) et contient toute la sortie côté serveur. Pour le suivre en direct :
tail -f ~/cs2-server/game/bin/linuxsteamrt64/screenlog.0
En cas d'erreur au démarrage, c'est le premier fichier à consulter. Pour revenir à la console du serveur : screen -r cs2
Le fichier screenlog.0 grossit à chaque lancement. Pensez à le purger ou à le supprimer régulièrement.
Mise à jour du serveur
Arrêter le serveur
sudo systemctl stop cs2.service
Télécharger la nouvelle version
sudo -u cs2 bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
exit
Redémarrer le serveur
sudo systemctl start cs2.service
Commandes console
Ces commandes s'utilisent dans la console du serveur ou via le RCON.
| Commande | Description |
|---|---|
status | Affiche les joueurs connectés et leur identifiant |
map <map> | Changer de map |
kick <joueur> | Expulser un joueur |
banid <minutes> <steamid> | Bannir un joueur (0 = définitif) |
mp_restartgame 1 | Redémarrer la partie |
say <message> | Envoyer un message à tous les joueurs |
exec server.cfg | Recharger la configuration |
quit | Arrêter le serveur |
Utiliser le RCON depuis le jeu
Votre adresse IP doit être autorisée sur le port TCP 27015 dans le pare-feu.
Dans la console du jeu :
rcon_address IP_DU_SERVEUR:27015
rcon_password VotreMotDePasse
rcon status
Sauvegarde automatique
Script de sauvegarde
sudo nano /home/cs2/backup.sh
#!/bin/bash
BACKUP_DIR="/home/cs2/backups"
SERVER_DIR="/home/cs2/cs2-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p $BACKUP_DIR
# Sauvegarde de la configuration
tar -czf $BACKUP_DIR/cs2_$DATE.tar.gz -C $SERVER_DIR game/csgo/cfg
# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR -name "cs2_*.tar.gz" -mtime +7 -delete
echo "Sauvegarde terminée : cs2_$DATE.tar.gz"
sudo chown cs2:cs2 /home/cs2/backup.sh
sudo chmod +x /home/cs2/backup.sh
Si vous installez des extensions, ajoutez game/csgo/addons à la commande tar.
Planifier la sauvegarde
sudo crontab -u cs2 -e
Ajoutez :
# Sauvegarde tous les jours à 4h
0 4 * * * /home/cs2/backup.sh
Connexion au serveur
Les joueurs peuvent se connecter via :
- Lancer Counter-Strike 2
- Ouvrir la console du jeu (activée dans les options du jeu)
- Taper :
connect IP_DU_SERVEUR:27015 - Si un mot de passe est configuré :
password VotreMotDePasseavant de se connecter
Vous pouvez aussi ajouter le serveur dans les favoris de Steam (menu Affichage, Serveurs, onglet Favoris).
En cas de problème
Le serveur ne démarre pas
- Vérifiez les logs :
sudo journalctl -u cs2.service -n 100 - Vérifiez l'espace disque disponible :
df -h - Vérifiez que l'installation est complète (relancez la commande
app_update) - Vérifiez que l'exécutable existe :
ls ~/cs2-server/game/bin/linuxsteamrt64/cs2(sinon, l'installation est incomplète) - Vérifiez que le lien
steamclient.soexiste :ls -l ~/.steam/sdk64/steamclient.so
Les joueurs ne peuvent pas se connecter
-
Vérifiez que le token GSLT est présent et valide dans la ligne de lancement
-
Vérifiez que le port 27015 est ouvert en UDP :
sudo ufw statussudo iptables -L INPUT -n --line-numbers | grep 27015sudo nft list ruleset | grep 27015 -
Vérifiez que le serveur écoute :
ss -ulnp | grep 27015 -
Testez depuis une autre machine avec
nc -zvu IP_SERVEUR 27015
Le serveur n'apparaît pas dans la liste
- Vérifiez que
sv_lan 0est bien défini dans server.cfg - Vérifiez que le token GSLT est valide : en cas de doute, générez-en un nouveau
- Patientez quelques minutes après le démarrage
- Vérifiez que le serveur a accès à Internet
Problèmes de performance
- Réduisez
-maxplayerssi le serveur sature - Désactivez les extensions inutiles dans
game/csgo/addons - Planifiez des redémarrages réguliers
FAQ
J'obtiens l'erreur « Error! App '730' state is 0x202 after update job »
Cette erreur est généralement due à un manque d'espace disque : l'installation de CS2 occupe environ 69 Go, et l'erreur a été constatée avec seulement 50 Go disponibles. Vérifiez l'espace libre avec df -h, libérez de l'espace ou ajoutez un volume, puis relancez la commande app_update.
Quels sont les ports à ouvrir ?
En plus du port du serveur (27015 en UDP), ces ports sont nécessaires à Steam. Ils permettent au serveur de recevoir les réponses des serveurs Steam lorsque votre pare-feu bloque le trafic entrant par défaut :
UFW :
sudo ufw allow proto udp from any port 27000:27030 to any port 1025:65535
sudo ufw allow proto udp from any port 4380 to any port 1025:65535
sudo ufw reload
iptables :
sudo iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65535 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
nftables :
sudo nft add rule inet filter input udp sport 27000-27030 udp dport 1025-65535 accept
sudo nft add rule inet filter input udp sport 4380 udp dport 1025-65535 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
J'obtiens « Permission non accordée » en exécutant ./steamcmd.sh
Appliquez un chmod :
chmod +x /home/cs2/steamcmd/linux32/steamcmd && chmod +x /home/cs2/steamcmd/steamcmd.sh
J'ai le message « WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C' »
Ce n'est pas un réel problème : seuls certains caractères internationaux peuvent mal s'afficher. Pour le corriger :
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
Si la commande locale-gen est introuvable, installez d'abord le paquet locales avec sudo apt install -y locales.
J'obtiens une erreur ulimit (no permission / can not open file)
Définissez la limite de fichiers ouverts à 2048, valeur recommandée par Valve. Pour la session en cours, avant de lancer le serveur :
ulimit -n 2048
Avec systemd, ajoutez cette ligne dans la section [Service] du fichier de service, puis rechargez et redémarrez :
LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart cs2.service