Skip to main content

如何创建您的 Left 4 Dead 2 服务器

本指南介绍如何在您的 VPS 或专用 Linux 服务器上安装和配置 Left 4 Dead 2(L4D2)专用服务器。

订购服务器​

要托管您的 Left 4 Dead 2 服务器,HostMyServers 提供多种游戏优化选择:

前提条件​

资源

下列资源对应服务器自身的需求,未计入操作系统、已安装软件或机器上其他服务已占用的资源。 10 名玩家在 tickrate 30 下约需 3 至 5 Mbps,在 tickrate 100 下约为其三倍(需要 L4D2 的 Tickrate Enabler 扩展)。

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

配置要求​

组件最低推荐
内存2 GB4 GB
CPU1 核2 核
存储10 GB10 GB SSD
网络100 Mbps500 Mbps
网络协议

Left 4 Dead 2 使用端口 27015,游戏通信使用 UDP,RCON 访问(远程管理)使用 TCP。TCP 端口只能从您的 IP 地址访问。

系统更新​

sudo apt update && sudo apt upgrade -y

安装依赖项​

SteamCMD 和 L4D2 服务器是 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 lib32z1

创建专用用户​

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

sudo adduser --disabled-password --gecos "" l4d2

防火墙配置​

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

以 l4d2 用户身份登录:

sudo -u l4d2 bash
cd ~

创建目录并下载 SteamCMD:

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

下载 L4D2 服务器​

启动服务器安装(应用程序 ID 222860)。仅使用 app_update 命令已不足以在 Linux 上获得可正常运行的 L4D2 服务器:必须先强制安装 Windows 平台,再安装 Linux 平台,且安装到同一个文件夹:

./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
提示

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

完成后,将显示消息 Success! App '222860' fully installed.。请检查服务器启动脚本是否存在:

ls ~/l4d2-server/srcds_run

服务器配置​

server.cfg 文件​

创建配置文件:

nano ~/l4d2-server/left4dead2/cfg/server.cfg

基本配置​

// 服务器名称
hostname "我的 L4D2 服务器"

// 服务器密码(留空 = 公开)
sv_password ""

// RCON 密码
rcon_password "ChangeMe"

// 服务器区域
// 0:美国(东部)
// 1:美国(西部)
// 2:南美洲
// 3:欧洲
// 4:亚洲
// 5:澳大利亚
// 6:中东
// 7:非洲
// 255:全球(默认)
sv_region 3

// 0:服务器在互联网上可见,1:仅限局域网
sv_lan 0

// 作弊命令(0 = 禁用)
sv_cheats 0

// 允许直接连接服务器(无需经过大厅)
sv_allow_lobby_connect_only 0

// 服务器标签,以逗号分隔(示例:"fr,coop")
//sv_tags "fr,coop"

// 将服务器限定为 Steam 组成员使用
// 1:只有组成员可以看到并加入服务器
// 0:公开服务器
// 要使用此功能,请通过 sv_steamgroup 填写您的 Steam 组 ID
sv_steamgroup_exclusive 0
//sv_steamgroup 组ID

// 服务器列表中显示的槽位数(-1 = 实际槽位数)
sv_visiblemaxplayers -1

// 僵尸难度:Easy、Normal、Hard、Impossible
z_difficulty normal

// 允许的游戏模式
// 如果此行未生效,则必须安装 SourceMod:
// 此时请在命令前加上 sm_cvar(sm_cvar sv_gametypes ...)
sv_gametypes "coop,realism,survival,versus,teamversus,scavenge,teamscavenge,mutation12,right2live"

// 启用服务器上的语音通信
sv_voiceenable 1

// 允许两个队伍的玩家互相交谈(0 = 否,1 = 是)
// 如果该值为 1,请确认 sv_voiceenable 也为 1
sv_alltalk 0

// RCON 安全
// RCON 访问失败后的封禁时长(分钟)
sv_rcon_banpenalty 3600

// 封禁前允许的 RCON 访问失败最大次数
sv_rcon_maxfailures 3

// 封禁前允许的 RCON 访问失败最小次数
sv_rcon_minfailures 1

// 统计 RCON 访问失败次数的时间窗口(秒)
sv_rcon_minfailuretime 10

// 玩家文件校验
// 注意:使用自定义扩展或战役时,
// 这些值会踢出文件不一致的玩家(请将其设为 0)
sv_pure 2
sv_consistency 1

// 踢出没有游戏原始文件的玩家
sv_pure_kick_clients 1

// 允许(1)或禁止(0)玩家 cfg 文件中的 wait 命令
sv_allow_wait_command 0

// 启用(1)或禁用(0)每日消息(MOTD)的显示
motd_enabled 1

// 日志
log on
sv_logecho 0
sv_logfile 1
sv_log_onefile 0
sv_logbans 1
sv_logflush 0
sv_logsdir logs

// 封禁管理
exec banned_user.cfg
exec banned_ip.cfg

// 如果上述封禁文件不存在,则生成它们
writeid
writeip
直接连接

默认情况下,L4D2 专用服务器仅接受通过大厅的连接。如果没有 sv_allow_lobby_connect_only 0 这一行,玩家将既无法直接加入您的服务器,也无法通过服务器列表加入。

安全

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

游戏模式和地图​

游戏模式​

模式在启动时通过 +mp_gamemode 选择:

模式描述玩家数
coop合作战役4
realism无轮廓光晕和提示的合作模式4
versus幸存者对抗感染者8
survival抵御成波的感染者4
scavenge收集汽油桶8

每个战役的第一张地图​

战役起始地图
Dead Centerc1m1_hotel
Dark Carnivalc2m1_highway
Swamp Feverc3m1_plankcountry
Hard Rainc4m1_milltown_a
The Parishc5m1_waterfront
The Passingc6m1_riverbank
The Sacrificec7m1_docks
No Mercyc8m1_apartment
Crash Coursec9m1_alleys
Death Tollc10m1_caves
Dead Airc11m1_greenhouse
Blood Harvestc12m1_hilltop
Cold Streamc13m1_alleys
The Last Standc14m1_junkyard

GSLT 令牌(可选)​

GSLT 令牌

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

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

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

  • 您的 Steam 账户不得被社区封禁或锁定
  • 您的 Steam 账户不得受到限制
  • 您的 Steam 账户必须已登记电话号码
  • 您的 Steam 账户必须拥有您为其创建游戏服务器账户的游戏
  • 您的 Steam 账户最多可创建 1000 个游戏服务器账户

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

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

+sv_setsteamaccount 您的令牌
提示

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

首次启动​

cd ~/l4d2-server
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015

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

启动优化​

启动参数​

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

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

提示

请务必为操作系统和已安装的软件留出空闲资源。

更改端口​

./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27016

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

文件结构​

路径描述
left4dead2/cfg/配置文件
left4dead2/cfg/server.cfg主配置
left4dead2/cfg/banned_user.cfg被封禁的玩家(SteamID)
left4dead2/cfg/banned_ip.cfg被封禁的 IP 地址
left4dead2/addons/扩展和自定义战役
left4dead2/logs/日志文件

配置为 systemd 服务​

创建服务文件​

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

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

文件内容:

[Unit]
Description=Left 4 Dead 2 Server
After=network.target

[Service]
Type=simple
User=l4d2
Group=l4d2
WorkingDirectory=/home/l4d2/l4d2-server
Environment=TERM=xterm
ExecStart=/home/l4d2/l4d2-server/srcds_run -game left4dead2 -console -norestart +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

启用并启动服务​

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

管理命令​

# 检查状态
sudo systemctl status l4d2.service

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

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

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

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

使用 screen 启动(备选)​

仅使用一种启动方式

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

sudo -u l4d2 bash
cd ~/l4d2-server
screen -S l4d2
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015

分离:Ctrl+A 然后 D

返回:screen -r l4d2

在后台启动并记录日志​

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

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

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

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

提示

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

服务器更新​

停止服务器​

sudo systemctl stop l4d2.service

下载新版本​

与安装时一样,先更新 Windows 平台,再更新 Linux 平台:

sudo -u l4d2 bash
cd ~/steamcmd
./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
exit

重启服务器​

sudo systemctl start l4d2.service

控制台命令​

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

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

在游戏中使用 RCON​

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

在游戏控制台中:

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

自动备份​

备份脚本​

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

mkdir -p $BACKUP_DIR

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

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

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

如果您安装了扩展或自定义战役,请将 left4dead2/addons 添加到 tar 命令中。

计划备份​

sudo crontab -u l4d2 -e

添加:

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

连接到服务器​

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

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

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

故障排除​

服务器无法启动​

  • 检查日志:sudo journalctl -u l4d2.service -n 100
  • 验证安装是否完整(重新运行两条 app_update 命令)以及 ~/l4d2-server/srcds_run 文件是否存在
  • 查找缺失的库:ldd ~/l4d2-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 错误​

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

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

玩家无法连接​

  • 验证 server.cfg 中已设置 sv_allow_lobby_connect_only 0

  • 验证端口 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_steamgroup_exclusive 为 0(设为 1 时,服务器仅限 Steam 组成员使用)
  • 启动后请等待几分钟
  • 验证服务器可以访问互联网
  • 使用 +sv_setsteamaccount 添加 GSLT 令牌,以便出现在公共服务器列表中

性能问题​

  • 如果您增大了 -tickrate,请移除该选项
  • 禁用 left4dead2/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 时出现"Permission denied"​

执行 chmod:

chmod +x /home/l4d2/steamcmd/linux32/steamcmd && chmod +x /home/l4d2/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 l4d2.service