Skip to main content

如何创建您的 Counter-Strike 2 服务器

本指南介绍如何在您的 VPS 或专用 Linux 服务器上安装和配置 Counter-Strike 2(CS2)专用服务器。

订购服务器​

要托管您的 Counter-Strike 2 服务器,HostMyServers 提供多种游戏优化选择:

前提条件​

资源

以下列出的资源对应服务器本身的需求,未计入操作系统、已安装软件或机器上其他服务已占用的资源。 10 名或更多玩家时,请预留约 50 Mbps 带宽。

  • 以 root 或具有 sudo 权限的用户进行 SSH 访问
  • 64 位 Linux 系统(推荐 Debian 12/13 或 Ubuntu 22.04/24.04,需要 glibc 2.31 或更高版本)
  • 已启用的防火墙:nftables(推荐)、iptables 或 ufw(一次只使用一种防火墙工具)
  • 最少 4 GB 内存(推荐 8 GB)
  • 约 70 GB 可用磁盘空间(推荐 100 GB,SSD)
  • 端口 27015 UDP 可访问(以及用于 RCON 的端口 27015 TCP,仅限从您的固定 IP 地址访问)
  • 已绑定手机号的 Steam 账户(用于 GSLT 令牌)

配置要求​

组件最低推荐
内存4 GB8 GB
CPU2 核4 核,高主频
存储70 GB SSD100 GB SSD
网络100 Mbps1 Gbps
网络协议

Counter-Strike 2 使用端口 27015,游戏通信使用 UDP,RCON 访问(远程管理)使用 TCP。TCP 端口只能从您自己的 IP 地址访问(需要固定 IP 地址)。

Tickrate

Counter-Strike 2 使用“subtick”系统:不再有需要配置的 -tickrate 参数。

系统更新​

sudo apt update && sudo apt upgrade -y

安装依赖项​

SteamCMD 需要 32 位库 lib32gcc-s1。安装必需的软件包:

sudo apt install -y wget tar screen lib32gcc-s1

创建专用用户​

出于安全考虑,创建专用用户:

sudo adduser --disabled-password --gecos "" cs2

防火墙配置​

为玩家开放 UDP 端口 27015。TCP 端口 27015 对应 RCON:请将其限制为您的固定 IP 地址(替换 您的IP)。

使用 UFW​

sudo ufw allow 27015/udp
sudo ufw allow from 您的IP to any port 27015 proto tcp
sudo ufw reload

使用 iptables​

sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 您的IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

要在重启后保留规则,需要安装 iptables-persistent 软件包。

使用 nftables​

这些命令使用 inet filter 表和 input 链,它们在 Debian 的 /etc/nftables.conf 中默认存在。

sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr 您的IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
RCON 安全

切勿向所有人开放 TCP 端口 27015:它可访问 RCON。如果没有固定 IP 地址,请不要开放此端口,而是通过 SSH 隧道访问。

安装 SteamCMD​

以 cs2 用户身份连接:

sudo -u cs2 bash
cd ~

创建目录并下载 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

下载 CS2 服务器​

启动服务器安装(应用程序 ID 为 730):

./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
磁盘空间

磁盘空间不足时,SteamCMD 会因错误 state is 0x202 after update job 而中止(参见 FAQ)。

提示

下载可能需要较长时间。如果安装因网络错误而中断,只需重新运行相同的命令:SteamCMD 会从中断处继续。

完成后会显示消息 Success! App '730' fully installed.。检查服务器可执行文件是否存在:

ls ~/cs2-server/game/bin/linuxsteamrt64/cs2

链接 steamclient.so​

CS2 需要 steamclient.so 文件才能与 Steam 通信。创建指向 SteamCMD 64 位文件的链接:

mkdir -p ~/.steam/sdk64
ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

GSLT 令牌(必需)​

需要 GSLT 令牌

要让您的服务器出现在公共服务器列表中并接受来自互联网的连接,您需要一个 GSLT(Game Server Login Token)令牌。没有它,服务器只能在局域网内运行。

要生成令牌,请登录您的 Steam 账户并访问 Steam 游戏服务器账户管理。

创建令牌有以下前提条件:

  • 您的 Steam 账户不能被社区封禁或锁定
  • 您的 Steam 账户不能处于受限状态
  • 您的 Steam 账户必须已绑定手机号
  • 您的 Steam 账户必须拥有您要为其创建游戏服务器账户的游戏
  • 您的 Steam 账户最多可创建 1000 个游戏服务器账户

在 基础游戏的 App ID 框中输入 730。您可以添加备注,提醒自己这是哪台服务器,然后点击 创建 按钮完成。

要使用令牌,请将其添加到启动命令行中:

+sv_setsteamaccount 您的令牌
提示

每台服务器使用一个令牌,切勿与他人分享。请将该参数添加到所有启动命令中:首次启动、systemd 服务的 ExecStart 行,以及通过 screen 运行的命令。

服务器配置​

server.cfg 文件​

创建配置文件:

nano ~/cs2-server/game/csgo/cfg/server.cfg

基本配置​

hostname "我的 CS2 服务器"
sv_password ""
rcon_password "ChangeMe"
sv_region 3
sv_lan 0
sv_cheats 0
mp_friendlyfire 0
mp_autoteambalance 1
安全

请为 rcon_password 选择一个足够长且唯一的密码。任何知道该密码的人都可以管理您的服务器。

主要参数​

参数描述
hostname服务器公开名称
sv_password加入密码(空 = 公开)
rcon_password远程管理密码
sv_region区域:3 = 欧洲,0 = 美国东部,4 = 亚洲,255 = 全球
sv_lan0 = 服务器在互联网上可见,1 = 仅限局域网
sv_cheats作弊命令(0 = 禁用)
mp_friendlyfire友军伤害(0 = 禁用,1 = 启用)
mp_autoteambalance自动平衡队伍(0 或 1)

游戏模式​

游戏模式在启动时通过 +game_type 和 +game_mode 选择:

模式game_typegame_mode
休闲(Casual)00
竞技01
Wingman02
军备竞赛(Arms Race)10
爆破11
Deathmatch12

首次启动​

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 您的令牌

启动完成后,控制台会显示服务器已连接到 Steam 服务器。要停止服务器,请输入 quit。

启动优化​

启动参数​

参数描述
-dedicated以专用模式启动服务器(必需)
-console以控制台模式运行
-usercon启用 RCON
-port服务器端口(默认 27015)
-ip监听的 IP 地址
-maxplayers最大玩家数量
+game_type 和 +game_mode游戏模式(见上表)
+mapgroup地图组(mg_active 表示当前活跃的官方地图)
+map启动地图
+sv_setsteamaccountGSLT 令牌(必需,参见相关章节)
-insecure禁用 VAC 保护(参见下方警告)
-insecure 参数

-insecure 会禁用 VAC 保护:仅在测试时使用此参数,它会给作弊者留下可乘之机。

提示

请始终为操作系统保留 1 到 2 GB 的可用内存。

更改端口​

./cs2 -dedicated -console -usercon -port 27016 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount 您的令牌

别忘了在防火墙中开放新端口。

文件结构​

路径描述
game/bin/linuxsteamrt64/cs2服务器可执行文件
game/csgo/cfg/配置文件
game/csgo/cfg/server.cfg主配置
game/csgo/addons/扩展(Metamod、CounterStrikeSharp)

配置为 systemd 服务​

创建服务文件​

退出 cs2 用户会话(exit)以返回到您的管理员账户,然后创建服务文件:

sudo nano /etc/systemd/system/cs2.service

文件内容:

[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 您的令牌
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

启用并启动服务​

sudo systemctl daemon-reload
sudo systemctl enable cs2.service
sudo systemctl start cs2.service

管理命令​

# 检查状态
sudo systemctl status cs2.service

# 停止服务器
sudo systemctl stop cs2.service

# 重启服务器
sudo systemctl restart cs2.service

# 查看日志
sudo journalctl -u cs2.service -f
服务器控制台

使用 systemd 时,服务器控制台不可交互。要发送命令,请在游戏中使用 RCON,或使用 screen 启动服务器(见下文)。

使用 screen 运行(替代方案)​

只使用一种启动方式

如果 systemd 服务已启动,请先停止它(sudo systemctl stop cs2.service):两个服务器不能使用同一个端口。

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 您的令牌

分离:Ctrl+A 然后 D

返回:screen -r cs2

在后台运行并记录日志​

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 您的令牌
选项描述
-A使窗口适应终端大小
-d -m以分离模式在后台启动会话
-S cs2会话名称
-L将服务器输出记录到日志文件中

screenlog.0 文件会创建在运行该命令的目录中(~/cs2-server/game/bin/linuxsteamrt64),包含服务器端的全部输出。要实时查看:

tail -f ~/cs2-server/game/bin/linuxsteamrt64/screenlog.0

如果启动时出错,这是首先要查看的文件。要返回服务器控制台:screen -r cs2

提示

screenlog.0 文件会随每次启动而增大。请记得定期清空或删除它。

服务器更新​

停止服务器​

sudo systemctl stop cs2.service

下载新版本​

sudo -u cs2 bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
exit

重启服务器​

sudo systemctl start cs2.service

控制台命令​

这些命令可在服务器控制台中使用,或通过 RCON 使用。

命令描述
status显示在线玩家及其 ID
map <地图>更换地图
kick <玩家>踢出玩家
banid <分钟> <steamid>封禁玩家(0 = 永久)
mp_restartgame 1重新开始游戏
say <消息>向所有玩家发送消息
exec server.cfg重新加载配置
quit停止服务器

在游戏中使用 RCON​

您的 IP 地址必须在防火墙中被允许访问 TCP 端口 27015。

在游戏控制台中:

rcon_address 服务器IP:27015
rcon_password 您的密码
rcon status

自动备份​

备份脚本​

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

# 备份配置
tar -czf $BACKUP_DIR/cs2_$DATE.tar.gz -C $SERVER_DIR game/csgo/cfg

# 删除超过7天的备份
find $BACKUP_DIR -name "cs2_*.tar.gz" -mtime +7 -delete

echo "备份完成:cs2_$DATE.tar.gz"
sudo chown cs2:cs2 /home/cs2/backup.sh
sudo chmod +x /home/cs2/backup.sh
提示

如果您安装了扩展,请将 game/csgo/addons 添加到 tar 命令中。

计划备份​

sudo crontab -u cs2 -e

添加:

# 每天凌晨4点备份
0 4 * * * /home/cs2/backup.sh

连接到服务器​

玩家可以通过以下方式连接:

  1. 启动 Counter-Strike 2
  2. 打开游戏控制台(在游戏选项中启用)
  3. 输入:connect 服务器IP:27015
  4. 如果设置了密码:连接前输入 password 您的密码

您也可以将服务器添加到 Steam 收藏夹中(“查看”菜单、“服务器”、“收藏夹”选项卡)。

故障排除​

服务器无法启动​

  • 检查日志:sudo journalctl -u cs2.service -n 100
  • 检查可用磁盘空间:df -h
  • 确认安装已完成(重新运行 app_update 命令)
  • 确认可执行文件存在:ls ~/cs2-server/game/bin/linuxsteamrt64/cs2(否则,安装不完整)
  • 确认 steamclient.so 链接存在:ls -l ~/.steam/sdk64/steamclient.so

玩家无法连接​

  • 确认启动命令行中存在有效的 GSLT 令牌

  • 确认端口 27015 已通过 UDP 开放:

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 27015
    sudo nft list ruleset | grep 27015
  • 确认服务器正在监听:ss -ulnp | grep 27015

  • 从另一台机器使用 nc -zvu 服务器IP 27015 进行测试

服务器未出现在列表中​

  • 确认 server.cfg 中已设置 sv_lan 0
  • 确认 GSLT 令牌有效:如有疑问,请重新生成一个
  • 启动后请等待几分钟
  • 确认服务器可以访问互联网

性能问题​

  • 如果服务器负载过高,请降低 -maxplayers
  • 禁用 game/csgo/addons 中不需要的扩展
  • 安排定期重启

FAQ​

出现错误“Error! App '730' state is 0x202 after update job”​

此错误通常是由于磁盘空间不足造成的:CS2 的安装约占用 69 GB,而在仅有 50 GB 可用空间时就出现过该错误。请使用 df -h 检查可用空间,释放空间或添加存储卷,然后重新运行 app_update 命令。

需要开放哪些端口?​

除服务器端口(27015 UDP)外,Steam 还需要以下端口。当您的防火墙默认阻止入站流量时,这些端口可让服务器接收来自 Steam 服务器的响应:

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

运行 ./steamcmd.sh 时出现“Permission denied”​

执行 chmod:

chmod +x /home/cs2/steamcmd/linux32/steamcmd && chmod +x /home/cs2/steamcmd/steamcmd.sh

出现消息“WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'”​

这不是真正的问题:只是某些国际字符可能无法正确显示。要修复它:

sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

如果找不到 locale-gen 命令,请先使用 sudo apt install -y locales 安装 locales 软件包。

出现 ulimit 错误(no permission / can not open file)​

将打开文件数限制设置为 2048,这是 Valve 推荐的值。对于当前会话,请在启动服务器之前执行:

ulimit -n 2048

使用 systemd 时,请将此行添加到服务文件的 [Service] 段中,然后重新加载并重启:

LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart cs2.service