Skip to main content

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

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

订购服务器​

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

前提条件​

资源

下列资源对应服务器自身的需求,未计入操作系统、已安装软件或机器上其他服务已占用的资源。 30 名玩家在 tickrate 66 且 sv_maxrate 30000 的情况下约需 10 Mbps,tickrate 100 时则为两倍。

  • 以 root 或具有 sudo 权限的用户进行 SSH 访问
  • 64 位 Linux 系统(推荐 Debian 12/13 或 Ubuntu 22.04/24.04)
  • 已启用防火墙:nftables(推荐)、iptables 或 ufw(一次只使用一种防火墙工具)
  • 最少 1 GB 内存(推荐 2 GB)
  • 约 5 GB 可用磁盘空间
  • 端口 27015 UDP 可访问(以及用于 RCON 的端口 27015 TCP,仅限从您的固定 IP 地址访问)

配置要求​

组件最低推荐
内存1 GB2 GB
CPU1 核2 核
存储5 GB10 GB SSD
网络100 Mbps1 Gbps
网络协议

Counter-Strike Source 使用端口 27015:游戏使用 UDP,RCON 访问(远程管理)使用 TCP,后者只能从您的 IP 地址访问(需要固定 IP 地址)。

系统更新​

sudo apt update && sudo apt upgrade -y

安装依赖项​

SteamCMD 和 CSS 服务器都是 32 位程序:需要 32 位库。请先检查 i386 架构是否已启用:

sudo dpkg --print-foreign-architectures

如果返回结果为空,请执行:

sudo dpkg --add-architecture i386
sudo apt update

然后安装所需的软件包:

sudo apt install -y wget tar screen lib32gcc-s1 lib32stdc++6

创建专用用户​

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

sudo adduser --disabled-password --gecos "" css

防火墙配置​

为玩家开放 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​

以 css 用户身份登录:

sudo -u css bash
cd ~

创建目录并下载 SteamCMD:

mkdir -p ~/steamcmd ~/css-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz

下载 CSS 服务器​

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

./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
提示

如果安装因错误而中断,只需再次运行同一命令:SteamCMD 会从中断处继续。

完成后,将显示消息 Success! App '232330' fully installed.。

服务器配置​

server.cfg 文件​

创建配置文件:

nano ~/css-server/cstrike/cfg/server.cfg

基本配置​

hostname "我的 CSS 服务器"
sv_password ""
rcon_password "ChangeMe"
sv_region 3
sv_lan 0
sv_cheats 0
mp_timelimit 30
mp_freezetime 6
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
sv_alltalk 0

自定义高级配置​

一个更完整的配置示例,请根据您的社区进行调整:

// Server.cfg 由 Let's Go 创建
// 面向 Free 4 Funs 社区
// 为 hostmyservers.fr 共享
// 版本 1.2
// -------------------------------------------------------------------------------------
// 服务器设置
// -------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------
// RCON 安全与密码
// -------------------------------------------------------------------------------------
// RCON 密码(请修改)
rcon_password "ChangeMe"

// 加入服务器的密码(公开服务器:请留空)
sv_password ""

// -------------------------------------------------------------------------------------
// 服务器标识
// -------------------------------------------------------------------------------------
// 服务器名称
hostname "我的 CSS 服务器"
sv_region 3
sv_lan 0
// RCON 访问失败后的封禁时长(分钟)
sv_rcon_banpenalty 60
// 封禁前 RCON 访问失败的最大次数
sv_rcon_maxfailures 10
// 封禁前 RCON 访问失败的最小次数
sv_rcon_minfailures 5
// 统计失败次数的时间窗口(秒)(参见 sv_rcon_minfailures)
sv_rcon_minfailuretime 900

// -------------------------------------------------------------------------------------
// 服务器配置
// -------------------------------------------------------------------------------------

mp_allowspectators 1
mp_autocrosshair 0
mp_autokick 0
mp_autoteambalance 0
mp_buytime 0.5
mp_c4timer 30
mp_chattime 8
mp_fadetoblack 0
mp_flashlight 1
mp_footsteps 1
mp_forcecamera 0
mp_forcerespawn 0
mp_fraglimit 0
mp_freezetime 4
mp_friendlyfire 1
mp_hostagepenalty 0
mp_limitteams 1
mp_maxrounds 0
mp_playerid 0
mp_roundtime 3
mp_spawnprotectiontime 5
mp_startmoney 16000
mp_timelimit 20
mp_tkpunish 0
mp_weaponstay 1
mp_winlimit 0
sv_accelerate 5
sv_gravity 800
sv_maxspeed 320
sv_pausable 0
sv_timeout 40

// -------------------------------------------------------------------------------------
// 安全
// -------------------------------------------------------------------------------------
sv_cheats 0
sv_consistency "1"
sv_pure "2"
sv_pure_kick_clients "1"

// -------------------------------------------------------------------------------------
// 服务器日志
// -------------------------------------------------------------------------------------
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 1
sv_logsdir logs
mp_logdetail 3

// -------------------------------------------------------------------------------------
// 服务器带宽
// -------------------------------------------------------------------------------------

// 快速下载(FastDL):托管文件的 Web 服务器地址
//sv_downloadurl "https://xxxxxxxxxxxxxxxxxxx"
// 允许下载
sv_allowdownload 1
// 允许玩家上传文件(喷漆等)
sv_allowupload 1

// 针对 tickrate 100 优化的配置
// 需要 CS:Source 的 Tickrate Enabler 扩展以及启动参数 -tickrate 100
// 服务器端不限制 FPS(0 = 不限制,占用更多资源)
fps_max 0

// -------------------------------------------------------------------------------------
// 如果您不清楚自己在做什么,请不要修改这些值
// sv_maxrate 0:不限速
// sv_maxrate 30000:每名玩家 30,000 字节/秒(约 0.24 Mbps)
// -------------------------------------------------------------------------------------
net_queued_packet_thread 0
sv_mincmdrate 75
sv_maxcmdrate 101
sv_maxrate 0
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 75

// -------------------------------------------------------------------------------------
// 封禁管理
// -------------------------------------------------------------------------------------
// 加载按 SteamID 和 IP 地址封禁的玩家列表
// (文件需放置在 cstrike/cfg 中)
exec banned_user.cfg
exec banned_ip.cfg

// -------------------------------------------------------------------------------------
// 机器人管理
// -------------------------------------------------------------------------------------
// 要启用机器人,请删除下一行前面的 //
// (bot.cfg 文件必须位于 cstrike/cfg 中)
//exec bot.cfg

// -------------------------------------------------------------------------------------
// 服务器统计
// -------------------------------------------------------------------------------------
sv_stats 1
sv_filterban 1

echo ==============================
echo Server.cfg correctement charge
echo ==============================
echo ===============================
echo Visitez wiki.free4funs.ovh
echo Visitez hostmyservers.fr
echo ===============================
echo ===============================
echo Server.cfg Config By Lets'Go
echo ===============================
安全

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

主要参数​

参数描述
hostname服务器的公开名称
sv_password加入密码(空 = 公开)
rcon_password远程管理密码
sv_region区域:3 = 欧洲,0 = 美国东部,4 = 亚洲,255 = 全球
sv_lan0 = 服务器在互联网上可见,1 = 仅限局域网
mp_timelimit单张地图的时长(分钟)
mp_freezetime回合开始时的冻结时间,玩家在此期间购买装备(秒)
mp_friendlyfire友军伤害(0 = 禁用,1 = 启用)
sv_alltalk两支队伍之间的语音聊天(0 或 1)

GSLT 令牌(可选)​

GSLT 令牌

GSLT 令牌(Game Server Login Token)不是必需的,但推荐使用:它可让您的服务器出现在 Steam 的公开服务器列表中。

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

创建令牌有一些前提条件:

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

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

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

+sv_setsteamaccount 您的令牌
提示

请将该参数添加到您所有的启动命令行中:首次启动、systemd 服务的 ExecStart 行以及使用 screen 启动的命令。

首次启动​

cd ~/css-server
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

启动完成后,控制台将显示与 Steam 服务器的连接状态。要停止服务器,请输入 quit。

启动优化​

启动参数​

参数描述
-game cstrike要启动的游戏(必需)
+map启动地图
+maxplayers最大玩家数(最多 64)
-port服务器端口(默认 27015)
-ip要监听的 IP 地址
-tickrate 100模拟频率(默认 66)。会增加 CPU 负载,并且需要 Tickrate Enabler 扩展
-norestart防止脚本在服务器停止时重新启动它(配合 systemd 使用时很有用)
-console以控制台模式运行
-debuglog 文件名将调试信息记录到该文件
-high服务器进程的最高优先级
-nohltv禁用 SourceTV
-nobots禁用机器人
-insecure禁用 VAC 保护(参见下方警告)
+sv_setsteamaccountGSLT 令牌(可选,参见专门章节)
-insecure 参数

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

更改端口​

./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27016

请不要忘记在防火墙中开放新端口。

文件结构​

路径描述
cstrike/cfg/配置文件
cstrike/cfg/server.cfg主配置
cstrike/cfg/banned_user.cfg被封禁的玩家(SteamID)
cstrike/cfg/banned_ip.cfg被封禁的 IP 地址
cstrike/maps/已安装的地图
cstrike/addons/扩展(Metamod、SourceMod)
cstrike/logs/日志文件

配置为 systemd 服务​

创建服务文件​

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

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

文件内容:

[Unit]
Description=Counter-Strike Source Server
After=network.target

[Service]
Type=simple
User=css
Group=css
WorkingDirectory=/home/css/css-server
Environment=TERM=xterm
ExecStart=/home/css/css-server/srcds_run -game cstrike -console -norestart +map de_dust2 +maxplayers 24 -port 27015
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

启用并启动服务​

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

管理命令​

# 检查状态
sudo systemctl status css.service

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

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

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

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

使用 screen 启动(替代方案)​

只能使用一种启动方式

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

sudo -u css bash
cd ~/css-server
screen -S css
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

分离:Ctrl+A 然后 D

返回:screen -r css

在后台启动并记录日志​

sudo -u css bash
cd ~/css-server
screen -AdmSL css ./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
选项描述
-A使窗口适应终端大小
-d -m以分离模式在后台启动会话
-S css会话名称
-L将服务器输出记录到日志文件

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

tail -f ~/css-server/screenlog.0

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

提示

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

服务器更新​

停止服务器​

sudo systemctl stop css.service

下载新版本​

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

重启服务器​

sudo systemctl start css.service

控制台命令​

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

命令描述
status显示已连接的玩家及其标识符
changelevel <map>更换地图
kick <玩家>踢出玩家
kickid <userid>通过标识符踢出玩家
banid <minutes> <steamid> kick封禁玩家(0 = 永久)
writeid将封禁列表保存到 banned_user.cfg
say <message>向所有玩家发送消息
exec server.cfg重新加载配置
quit停止服务器

在游戏中使用 RCON​

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

在游戏控制台中(² 或 ~ 键):

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

自动备份​

备份脚本​

sudo nano /home/css/backup.sh
#!/bin/bash
BACKUP_DIR="/home/css/backups"
SERVER_DIR="/home/css/css-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)

mkdir -p $BACKUP_DIR

# 备份配置
tar -czf $BACKUP_DIR/css_$DATE.tar.gz -C $SERVER_DIR cstrike/cfg

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

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

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

计划备份​

sudo crontab -u css -e

添加:

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

连接到服务器​

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

  1. 启动 Counter-Strike Source
  2. 打开游戏控制台
  3. 输入:connect 服务器IP:27015
  4. 如果已配置密码:在连接之前输入 password 您的密码

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

故障排除​

服务器无法启动​

  • 检查日志:sudo journalctl -u css.service -n 100
  • 检查安装是否完整(重新运行 app_update 命令)
  • 查找缺失的库:ldd ~/css-server/srcds_linux | grep "not found",然后安装对应的 32 位软件包

libtinfo.so.5 或 libncurses.so.5 警告​

如果尽管已安装依赖项,启动时仍显示消息 WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5,请创建指向版本 6 的符号链接:

sudo ln -sf /usr/lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.5
sudo ln -sf /usr/lib/i386-linux-gnu/libncurses.so.6 /usr/lib/i386-linux-gnu/libncurses.so.5

如果 .so.6 文件不存在,请先安装 libncurses6:i386 软件包。

steamclient.so 和 steamerrorreporter 错误​

以 css 用户身份登录,然后创建指向 SteamCMD 文件的链接:

sudo -u css bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/css-server/bin/steamerrorreporter
exit

玩家无法连接​

  • 检查端口 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
  • 启动后请等待几分钟
  • 检查服务器是否可以访问互联网
  • 使用 +sv_setsteamaccount 添加 GSLT 令牌,以便出现在公开服务器列表中

性能问题​

  • 如果服务器过载,请降低 +maxplayers
  • 禁用 cstrike/addons 中不必要的扩展
  • 安排定期重启

FAQ​

需要开放哪些端口?​

除服务器端口(UDP 27015)外,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 时出现"权限不够"​

请执行 chmod:

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

我的服务器卡在 "Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL"​

请检查该端口是否已被其他进程占用:

sudo lsof -i :27015

如果端口空闲,请检查第一个问题中的 Steam 规则是否已正确应用。

我收到消息 "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 css.service