ioquake3《雷神之锤3》 专用服务器搭建教程:Linux 上运行 Quake III Arena 多人对战
Quake III Arena 发布于 1999 年,至今仍是竞技射击游戏的经典之作。2005 年 id Software 将其源码以 GPL 协议开源,ioquake3 项目在此基础上持续维护和改进引擎,修复了大量原版 bug,添加了现代操作系统支持、IPv6、VoIP 等新特性。对于复古游戏爱好者、LAN Party 组织者,或希望搭建私人对战服务器的玩家来说,ioquake3 服务端是完美选择。
ioquake3 专用服务器的资源占用极低,一个 8 人同时在线的服务器通常只需不到 50MB 内存和 1% 的 CPU 占用。服务器支持多种游戏模式,包括 Free For All(全员对战)、Team Deathmatch(团队死斗)、Capture The Flag(夺旗)和 Tournament(锦标赛)等,通过修改配置文件即可灵活切换。此外,ioquake3 完全兼容原版 Quake III Arena 的地图和 MOD,你可以从合法渠道获取的原版游戏文件中提取资源文件来使用。
本教程将介绍如何在 Ubuntu/Debian 上通过 apt 安装 ioquake3,配置专用服务器,以及使用 systemd 实现开机自启和后台运行管理。
服务器配置
Quake III Arena 服务端对资源需求极小,是最省资源的游戏服务器之一。
推荐使用雨云服务器 rainyun-com ,注册填优惠码 2026off 领 5 折优惠券。1 核 2GB 机型完全满足 ioquake3 专用服务器的运行需求,支持同时容纳 16-32 名玩家在线对战而不出现卡顿。操作系统推荐 Ubuntu 22.04 LTS 或 Debian 12。服务器需开放 UDP 27960 端口(Quake3 默认端口)。
安装准备工作
更新系统并安装依赖
bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget unzip screen
安装 ioquake3
Ubuntu 和 Debian 官方仓库中包含 ioquake3:
bash
sudo apt install -y ioquake3-server
安装完成后,服务端二进制文件位于 /usr/lib/ioquake3/ioq3ded(不同发行版路径可能略有差异):
bash
which ioq3ded
# 或查找二进制位置
find /usr /lib -name "ioq3ded" 2>/dev/null
获取游戏数据文件(PAK 文件)
ioquake3 服务端需要原版 Quake III Arena 的 .pk3 数据文件。这些文件受版权保护,你需要拥有合法授权的游戏副本(Steam 版本或原版光盘):
bash
# 创建游戏数据目录
sudo mkdir -p /var/games/quake3/baseq3
# 将原版游戏的 pak0.pk3 到 pak8.pk3 复制到该目录
# (从 Steam 版游戏目录或光盘提取)
sudo cp /path/to/quake3/baseq3/pak*.pk3 /var/games/quake3/baseq3/
# 设置正确权限
sudo chmod 644 /var/games/quake3/baseq3/*.pk3
注意: 如果你只想运行服务器测试,部分地图(如 q3dm17.bsp)可以从社区自由分发的免费包中获取。
防火墙配置
bash
# 开放 Quake3 默认 UDP 端口
sudo ufw allow 27960/udp
# 如果需要多个游戏实例,开放端口范围
sudo ufw allow 27960:27970/udp
sudo ufw status
详细配置
创建服务器配置文件
创建专用配置目录和主配置文件:
bash
sudo mkdir -p /etc/quake3
sudo nano /etc/quake3/server.cfg
cfg
// =============================================
// ioquake3 专用服务器配置文件
// =============================================
// 服务器基本信息
sv_hostname "My ioquake3 Server" // 服务器名称(显示在服务器列表)
sv_maxclients 16 // 最大玩家数量
sv_pure 1 // 纯净模式(防止客户端 MOD 作弊)
sv_password "" // 服务器密码(留空=公开)
rconpassword "your_rcon_password" // 远程控制密码(请修改!)
// 游戏模式设置
g_gametype 0 // 0=FFA, 1=竞技, 3=TDM, 4=夺旗
fraglimit 50 // 击杀上限(达到后自动换图)
timelimit 20 // 时间上限(分钟,0=无限制)
capturelimit 8 // 旗帜上限(仅夺旗模式)
// 网络设置
net_port 27960 // 游戏端口
sv_lanForceRate 0 // 不强制局域网速率限制
sv_maxRate 25000 // 每个客户端最大带宽(字节/秒)
sv_minRate 0
sv_fps 20 // 服务器帧率(通常 20 足够)
// 机器人配置(可选,在玩家不足时补充 AI)
bot_enable 1 // 启用机器人
bot_minplayers 4 // 最少保持的玩家数(不足时加入机器人)
g_spskill 2 // 机器人难度(1-5)
// 地图轮换配置
// 使用 map 命令加载初始地图,配合 nextmap 实现地图轮换
map q3dm17
// 注意:地图轮换通过 mapcycle 文件实现(见下方)
// 日志
g_log "server.log" // 日志文件名
g_logSync 0 // 异步写入日志(性能更好)
// 服务器规则显示
sets ".location" "CN"
sets ".admin" "admin@example.com"
sets ".URL" "https://example.com"
创建地图轮换文件
bash
sudo nano /var/games/quake3/baseq3/mapcycle.cfg
cfg
// 地图轮换配置
// 格式:map <地图名> <可选参数>
map q3dm17
{
fraglimit 50
timelimit 20
g_gametype 0
}
map q3dm7
{
fraglimit 50
timelimit 20
}
map q3dm1
{
fraglimit 50
timelimit 20
}
map q3tourney2
{
fraglimit 30
timelimit 15
g_gametype 0
}
将地图轮换引用加入主配置:
bash
# 在 server.cfg 中添加:
echo "g_mapcycle mapcycle.cfg" | sudo tee -a /etc/quake3/server.cfg
创建启动脚本
bash
sudo nano /usr/local/bin/quake3-server.sh
bash
#!/bin/bash
IOQ3_BIN="/usr/lib/ioquake3/ioq3ded"
BASEDIR="/var/games/quake3"
CONFIG="/etc/quake3/server.cfg"
LOGDIR="/var/log/quake3"
mkdir -p "$LOGDIR"
exec "$IOQ3_BIN" \
+set fs_game baseq3 \
+set fs_basepath "$BASEDIR" \
+set dedicated 2 \
+exec server.cfg \
+set g_log "$LOGDIR/game.log" \
"$@"
bash
sudo chmod +x /usr/local/bin/quake3-server.sh
systemd 服务配置
使用 systemd 管理 ioquake3 服务,实现自动启动和故障恢复:
bash
sudo nano /etc/systemd/system/quake3.service
ini
[Unit]
Description=ioquake3 Dedicated Game Server
After=network.target
Documentation=https://ioquake3.org/
[Service]
Type=simple
User=nobody
Group=nogroup
# 执行命令
ExecStart=/usr/local/bin/quake3-server.sh
# 故障自动重启
Restart=on-failure
RestartSec=5s
# 资源限制
LimitNOFILE=65536
# 标准输出日志
StandardOutput=journal
StandardError=journal
SyslogIdentifier=quake3
# 安全加固
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/var/log/quake3 /var/games/quake3
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
bash
sudo systemctl daemon-reload
sudo systemctl enable quake3
sudo systemctl start quake3
sudo systemctl status quake3
查看实时日志:
bash
sudo journalctl -u quake3 -f
进阶用法
使用 RCON 远程管理
RCON(Remote Console)允许你通过网络远程管理服务器,无需 SSH 登录:
从服务器命令行连接:
bash
# 安装客户端工具(quake3 也可充当 rcon 客户端)
# 在游戏客户端控制台中:
/rconpassword your_rcon_password
/rcon status
/rcon map q3dm17
/rcon kick playerName
使用 qstat 查询服务器状态:
bash
sudo apt install -y qstat
qstat -q3s your_server_ip:27960
运行多个游戏实例
在同一服务器上运行多个模式(FFA + CTF):
bash
# 复制配置文件
sudo cp /etc/quake3/server.cfg /etc/quake3/ctf-server.cfg
sudo nano /etc/quake3/ctf-server.cfg
修改 CTF 配置:
cfg
sv_hostname "My CTF Server"
g_gametype 4 // 4 = 夺旗模式
capturelimit 8
net_port 27961 // 使用不同端口
map q3ctf1
复制 systemd 服务文件:
bash
sudo cp /etc/systemd/system/quake3.service \
/etc/systemd/system/quake3-ctf.service
sudo nano /etc/systemd/system/quake3-ctf.service
# 修改 ExecStart 指向 ctf-server.cfg
安装自定义地图和 MOD
bash
# 将自定义地图 .pk3 文件放入 baseq3 目录
sudo cp custom_map.pk3 /var/games/quake3/baseq3/
# 安装 MOD(以 Rocket Arena 3 为例)
sudo mkdir -p /var/games/quake3/ra3
sudo cp ra3_*.pk3 /var/games/quake3/ra3/
# 启动时指定 MOD
exec "$IOQ3_BIN" +set fs_game ra3 +exec server.cfg
实战示例
快速查看服务器信息
bash
# 检查服务状态
sudo systemctl status quake3
# 查看当前在线玩家(通过日志)
sudo journalctl -u quake3 --since "1 hour ago" | grep "ClientConnect"
# 查看端口监听
sudo ss -ulnp | grep 27960
设置定时换图脚本
bash
sudo nano /usr/local/bin/quake3-map-rotate.sh
bash
#!/bin/bash
# 每小时随机换一张地图
MAPS=("q3dm17" "q3dm7" "q3dm1" "q3tourney2" "q3dm14")
RANDOM_MAP=${MAPS[$RANDOM % ${#MAPS[@]}]}
RCON_PASS="your_rcon_password"
SERVER="127.0.0.1:27960"
# 通过 UDP 发送 RCON 命令(需要 hping3 或自定义脚本)
echo "Rotating map to: $RANDOM_MAP"
常见问题
Q:服务器无法启动,提示 "Unable to load pk3 files"
A:确认 .pk3 文件已正确放置在 /var/games/quake3/baseq3/ 目录,且 ioquake3 进程对该目录有读取权限。检查 fs_basepath 配置是否与实际路径匹配。
Q:玩家连接后立即断线
A:检查 sv_pure 1 模式下客户端的 pk3 文件是否与服务端一致。临时将 sv_pure 改为 0 测试,如问题消失则说明是文件不匹配问题。
Q:服务器不出现在公共服务器列表中
A:确认 +set dedicated 2 参数(2=向主服务器注册,1=仅局域网)。检查服务器 UDP 27960 端口是否对外可达:nmap -sU -p 27960 your_server_ip。
Q:机器人不加入游戏
A:确认 bot_enable 1 和 bot_minplayers 已正确设置,且 pak0.pk3 中包含机器人数据。部分免费地图包不含机器人 AI 文件。
Q:如何修改欢迎信息(MOTD)
A:在 server.cfg 中添加:
cfg
sv_motd "Welcome to my server! Rules: no cheating."
搭建一台自己的 ioquake3 服务器不仅能重温经典,还能为朋友提供低延迟的私人对战环境。得益于 ioquake3 极低的资源消耗,一台入门级 VPS 就能轻松胜任。推荐选用雨云服务器 rainyun-com 的 1 核 2GB 机型 ,注册时填入优惠码 2026off 可领取 5 折优惠券,以最低的成本搭建属于自己的 Quake III 专属服务器,随时召集老友开战,找回那个电竞黄金时代的热血感觉。