如何创建您的 Counter-Strike 2 服务器
本指南介绍如何在您的 VPS 或专用 Linux 服务器上安装和配置 Counter-Strike 2(CS2)专用服务器。
订购服务器
要托管您的 Counter-Strike 2 服务器,HostMyServers 提供多种游戏优化选择:
- Performance VPS - 适合 CS2 服务器(高速处理器和充足存储)
- NVMe VPS - 极佳性价比
- 经济型专用服务器 - 适合托管多个游戏服务器
- 性能专用服务器 - 最佳性能
前提条件
以下列出的资源对应服务器本身的需求,未计入操作系统、已安装软件或机器上其他服务已占用的资源。 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 GB | 8 GB |
| CPU | 2 核 | 4 核,高主频 |
| 存储 | 70 GB SSD | 100 GB SSD |
| 网络 | 100 Mbps | 1 Gbps |
Counter-Strike 2 使用端口 27015,游戏通信使用 UDP,RCON 访问(远程管理)使用 TCP。TCP 端口只能从您自己的 IP 地址访问(需要固定 IP 地址)。
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
切勿向所有人开放 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(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_lan | 0 = 服务器在互联网上可见,1 = 仅限局域网 |
sv_cheats | 作弊命令(0 = 禁用) |
mp_friendlyfire | 友军伤害(0 = 禁用,1 = 启用) |
mp_autoteambalance | 自动平衡队伍(0 或 1) |
游戏模式
游戏模式在启动时通过 +game_type 和 +game_mode 选择:
| 模式 | game_type | game_mode |
|---|---|---|
| 休闲(Casual) | 0 | 0 |
| 竞技 | 0 | 1 |
| Wingman | 0 | 2 |
| 军备竞赛(Arms Race) | 1 | 0 |
| 爆破 | 1 | 1 |
| Deathmatch | 1 | 2 |
首次启动
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_setsteamaccount | GSLT 令牌(必需,参见相关章节) |
-insecure | 禁用 VAC 保护(参见下方警告) |
-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
连接到服务器
玩家可以通过以下方式连接:
- 启动 Counter-Strike 2
- 打开游戏控制台(在游戏选项中启用)
- 输入:
connect 服务器IP:27015 - 如果设置了密码:连接前输入
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 statussudo iptables -L INPUT -n --line-numbers | grep 27015sudo 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