想和朋友开一张长期运行的 Rust 地图,真正困难的通常不是下载服务端,而是选对 VPS、开放正确的 UDP 端口、保护 RCON、安排更新与 wipe,并确保世界存档真的能恢复。Rust 对内存、CPU 单核性能、磁盘和网络都比普通网站敏感,低价小内存 VPS 即使能启动,也可能在生成地图或多人建造后频繁卡顿。
本文以 Ubuntu 24.04 LTS 和 LinuxGSM 为例部署 Rust Dedicated Server。LinuxGSM 底层使用 SteamCMD 下载 App ID 258550,同时提供启动、更新、监控、日志、备份、地图 wipe 和 Oxide/uMod 管理命令,适合不想自己维护一套脆弱启动脚本的服主。
Rust 服务端不需要 GPU,但很吃内存和单核性能。地图越大、在线玩家越多、建筑与实体越密集,资源需求越高。下面是用于购买 VPS 的保守起点,不是保证并发的硬指标:
| 使用规模 | 建议 VPS 起点 | 地图大小 | 适用场景 |
|---|---|---|---|
| 5-10 人私人服 | 4 个高性能 vCPU、12GB 内存、80GB NVMe | 2500-3000 | Vanilla、少量建筑 |
| 10-30 人社区服 | 6-8 个高性能 vCPU、16-24GB 内存、120GB NVMe | 3000-3500 | 活跃玩家、少量插件 |
| 30 人以上或 Modded | 8 核以上、32GB+ 内存、160GB+ NVMe | 先从 3000 压测 | 插件、较多实体、公开服 |
LinuxGSM 的 Rust 页面给出的最低内存是 9GB,并说明地图增大会继续增加需求。因此不要用 4GB 或 8GB VPS 硬撑生产服,也不要把 swap 当成内存替代品。CPU 要优先看稳定单核性能,而不是只比较 vCPU 数量。
机房应靠近主要玩家,并确认提供商允许游戏服务器、具备 UDP 防护和足够流量。公开服还要关注 DDoS 清洗策略、被攻击后的封禁规则和换 IP 成本。购买前可参考游戏服务器 VPS 推荐与配置指南。
| 方案 | 优点 | 代价 | 推荐场景 |
|---|---|---|---|
| LinuxGSM | 安装、更新、监控、备份和控制台命令完整 | 主要通过 SSH 管理 | 单台 VPS、一个或少量 Rust 实例 |
| Docker 镜像 | 目录和依赖隔离清晰 | 镜像变量、更新逻辑和存档路径依赖维护者 | 已有成熟容器规范的团队 |
| Pterodactyl | Web 面板、用户、配额和多实例管理 | Panel、Wings、数据库和网络配置更多 | 托管多个游戏服或多人管理 |
本文选择 LinuxGSM,因为它直接贴合 Rust 的 SteamCMD 更新、RCON、wipe 和备份流程。如果你需要把 Rust、Minecraft、Palworld 和 CS2 放在同一套面板中管理,更适合使用VPS 搭建 Pterodactyl 游戏服务器面板。
本文显式使用以下端口,避免依赖自动推导:
| 端口 | 协议 | 用途 | 是否公开 |
|---|---|---|---|
| 28015 | UDP | 玩家连接游戏 | 是 |
| 28017 | UDP | Steam 查询与服务器列表 | 公开服需要 |
| 28016 | TCP | WebRCON 管理 | 只允许管理员 IP 或 VPN |
| 28082 | TCP | Rust+ Companion | 使用 Rust+ 时开放 |
Facepunch 文档说明 server.port 与 server.queryport 都是 UDP,且不能相同;若没有显式设置 query port,它会根据游戏端口或 RCON 端口推导。RCON 是管理入口,绝不能对整个互联网裸开放。
准备一条独立域名(例如 rust.example.com)时,只需要添加 A 记录指向 VPS 公网 IPv4。普通 Cloudflare 橙云代理不转发 Rust UDP 流量,应设置为 DNS only。
先更新系统并安装基础工具:
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl ca-certificates ufw tmux unzip tar bzip2
创建专用用户,不要让 Rust 服务端长期以 root 身份运行:
sudo adduser rustserver
sudo usermod -aG sudo rustserver
sudo -iu rustserver
安装期间 LinuxGSM 可能需要 sudo 补齐系统依赖。安装完成并确认服务能运行后,可以从另一个管理员账号移除其 sudo 权限:
sudo deluser rustserver sudo
执行这一步前要确认你仍有另一个可用的 sudo 管理员账号,避免把自己锁在系统外。
以下命令都以 rustserver 用户执行:
cd /home/rustserver
curl -Lo linuxgsm.sh https://linuxgsm.sh
chmod +x linuxgsm.sh
bash linuxgsm.sh rustserver
./rustserver install
安装器会检查依赖,并通过 SteamCMD 匿名登录下载 Rust Dedicated Server。安装完成后先查看详细信息:
./rustserver details
./rustserver validate
details 会显示配置目录、端口、日志和服务状态;validate 会用 SteamCMD 校验文件。不要在每次正常启动时都强制 validate,它会增加启动时间和磁盘读写,更适合安装失败或文件损坏时使用。
先生成随机 RCON 密码并保存到密码管理器:
openssl rand -hex 24
编辑实例配置:
nano /home/rustserver/lgsm/config-lgsm/rustserver/rustserver.cfg
写入需要覆盖的参数:
ip="0.0.0.0"
port="28015"
queryport="28017"
rconport="28016"
appport="28082"
rconpassword="替换为刚生成的随机密码"
rconweb="1"
servername="My Private Rust Server"
gamemode="vanilla"
serverlevel="Procedural Map"
seed="20260815"
worldsize="3000"
maxplayers="20"
saveinterval="300"
tickrate="30"
tags="monthly,vanilla"
maxbackups="8"
maxbackupdays="14"
stoponbackup="on"
不要直接修改 _default.cfg。LinuxGSM 明确说明默认文件会在更新时被覆盖,应把自定义项写入 common.cfg 或当前实例的 rustserver.cfg。
限制配置文件读取权限:
chmod 600 /home/rustserver/lgsm/config-lgsm/rustserver/rustserver.cfg
地图大小允许 1000-6000,但大地图会消耗更多内存、磁盘和生成时间。小型私人服从 3000 起步更容易稳定。seed 决定程序生成地图;更改 seed 或地图大小前必须备份,并按一次新 wipe 对待。
启动服务器:
cd /home/rustserver
./rustserver start
./rustserver details
./rustserver monitor
进入控制台观察首次地图生成:
./rustserver console
看到服务启动完成后,按 Ctrl+B,再按 D 脱离 tmux。不要按 Ctrl+C,那会终止服务端进程。
查看日志:
tail -n 200 /home/rustserver/log/console/rustserver-console.log
tail -f /home/rustserver/log/console/rustserver-console.log
如果具体日志文件名发生变化,以 ./rustserver details 输出的路径为准。
先保持当前 SSH 会话不关闭,并放行 SSH:
sudo ufw allow OpenSSH
sudo ufw allow 28015/udp
sudo ufw allow 28017/udp
把下面的文档示例地址替换成你管理员电脑的固定公网 IP,只允许该地址连接 RCON:
sudo ufw allow from 203.0.113.10 to any port 28016 proto tcp
需要 Rust+ 时再开放:
sudo ufw allow 28082/tcp
确认规则后启用防火墙:
sudo ufw status numbered
sudo ufw enable
sudo ss -lunp | grep -E ':28015|:28017'
sudo ss -lntp | grep -E ':28016|:28082'
云厂商安全组也要配置相同协议。最常见错误是把 28015 只开成 TCP,或者开放游戏端口却漏掉 28017/UDP,导致玩家能直连但服务器列表搜不到。
Rust 客户端按 F1 打开控制台,输入:
connect rust.example.com:28015
也可以直接使用公网 IP。首次连接前先进入服务端控制台添加 Owner:
ownerid 76561198000000000 "AdminName" "Server owner"
server.writecfg
save
将示例 SteamID64 替换为自己的真实 ID。Facepunch 文档说明添加管理员后要执行 server.writecfg,玩家重新连接后权限才会生效。
日常管理常用命令:
status
players
save
say Server will restart in 5 minutes
kick SteamID64 "reason"
ban SteamID64 "reason"
能通过 SSH 控制台完成的操作,不必额外暴露 RCON。确实需要远程面板时,应把 28016/TCP 限制到管理员固定 IP,或只允许 WireGuard/Tailscale 私网访问。
Vanilla 服不需要插件。只有明确需要白名单、权限、队列、传送或管理功能时才安装 Oxide/uMod:
cd /home/rustserver
./rustserver mods-install
./rustserver restart
LinuxGSM 的 Rust 文档说明,插件文件位于:
/home/rustserver/serverfiles/oxide/plugins/
配置通常位于:
/home/rustserver/serverfiles/oxide/config/
Rust 更新后,Oxide/uMod 可能需要同步更新:
./rustserver mods-update
./rustserver restart
每次只安装一个插件,记录来源和版本,并先备份存档。插件要从 uMod 官方页面或项目仓库获取;不要把论坛转载的 DLL、脚本或压缩包直接放进生产服务器。
LinuxGSM 提供三个关键命令:
./rustserver monitor
./rustserver update
./rustserver backup
以 rustserver 用户编辑 crontab:
crontab -e
加入:
*/5 * * * * /home/rustserver/rustserver monitor > /dev/null 2>&1
*/30 * * * * /home/rustserver/rustserver update > /dev/null 2>&1
30 5 * * * /home/rustserver/rustserver backup > /dev/null 2>&1
0 6 * * 0 /home/rustserver/rustserver update-lgsm > /dev/null 2>&1
monitor 在进程离线时尝试恢复,update 检查 SteamCMD 更新并只在需要时更新重启。备份配置中的 stoponbackup="on" 会优先保证文件一致性,因此每日 05:30 可能产生短暂停服,应根据玩家活跃时间调整并提前公告。
LinuxGSM 本机归档默认不能抵御 VPS 磁盘损坏、账号封禁或机房事故。定期把备份目录加密同步到另一家对象存储或异地服务器,并实际做恢复演练。异地策略可参考VPS 备份恢复演练指南。
Rust 的 wipe 不是“删几个文件再试试”。先公告停服、保存世界并创建额外备份:
cd /home/rustserver
./rustserver backup
只重置地图、保留玩家蓝图:
./rustserver map-wipe
重置地图和所有玩家蓝图:
./rustserver full-wipe
LinuxGSM 文档明确区分两者;Facepunch 也指出,强行给旧存档改名来绕过协议变化是危险做法。执行 wipe 前应记录 seed、world size、插件列表和当前备份文件,不要把未经验证的 wipe 命令放进无人值守 cron。
Rust 通常按月发布较大更新,也可能发布热修复。安全升级顺序如下:
- 提前通知玩家;
- 在控制台执行
save; - 运行
./rustserver backup; - 运行
./rustserver update; - 使用插件时再运行
./rustserver mods-update; - 启动后检查日志、地图、玩家数据和插件;
- 从外部网络重新测试 28015/UDP 与服务器列表。
遇到文件损坏或 SteamCMD 状态异常时再使用:
./rustserver validate
不要在没有备份的情况下手工删除 serverfiles/server/rustserver/。该身份目录包含地图、存档、蓝图、管理员、封禁和 Rust+ 配对数据。
先看真实资源,不要一上来就重装:
free -h
vmstat 1 10
top
df -h
df -i
iostat -xz 1 10
./rustserver details
./rustserver monitor
常见判断顺序:
- 内存接近耗尽并持续 swap:减小地图、减少插件或升级内存;
- 单核长期跑满:降低实体与插件负载,换更高单核性能 VPS;
- 磁盘延迟高:确认使用 NVMe,检查备份与日志是否同时抢 I/O;
- 服务器列表找不到:检查 28017/UDP、云安全组和 query port;
- 玩家直连超时:检查 28015/UDP、监听地址和 DDoS 清洗状态;
- 更新后插件报错:更新 Oxide/uMod 与插件,必要时先以 Vanilla 验证;
- Rust+ 离线:检查 28082/TCP 和服务器能否出站访问 Facepunch Companion 服务。
地图从 3000 扩大到 4500 不是免费的“内容升级”,会直接增加生成时间、内存、磁盘和实体规模。先用高峰期数据验证,再逐步调整。
./rustserver debug
tail -n 300 /home/rustserver/log/console/rustserver-console.log
df -h
free -h
常见原因包括依赖缺失、内存不足、磁盘满、配置引号错误或 SteamCMD 文件损坏。先读第一条真实错误,再决定是否 validate。
确认配置中 queryport="28017",并且云防火墙和 UFW 都允许 28017/UDP。游戏端口与查询端口不能使用同一个端口。
sudo ss -lntp | grep ':28016'
sudo ufw status numbered
确认客户端来源 IP 与防火墙白名单一致,密码没有被 shell 或配置文件错误转义。不要为了测试把 RCON 永久改成对所有来源开放。
先停止写入,不要连续重启或执行新的 wipe。核对 server.identity、seed、world size 与存档文件名,再从升级前备份恢复到隔离测试目录。地图 wipe 与完整 wipe 的数据范围不同,恢复前必须确认执行过哪一种。
同时检查 CPU steal、单核占用、磁盘延迟、UDP 丢包和 DDoS 清洗状态。Rust 服务端正常运行不代表线路正常;如果多个地区玩家同时出现丢包,优先查看机房网络和攻击告警。
- VPS 至少满足当前地图和人数的内存需求,使用 NVMe
- Rust 以独立
rustserver用户运行,不以 root 运行 - 28015/UDP 和 28017/UDP 从外部网络可达
- 28016/TCP 仅允许管理员固定 IP 或 VPN
- Rust+ 未使用时不开放 28082/TCP
- RCON 使用随机强密码,配置文件权限为 600
- 管理员 SteamID64 已写入并执行
server.writecfg -
monitor、update和backup定时任务能实际执行 - 本机备份已有异地副本,并完成过一次恢复演练
- wipe 前有公告、存档、备份和明确的 map/full 选择
- 插件来源可信,Rust 更新后同步检查 Oxide/uMod
- 高峰期已检查单核、内存、swap、磁盘延迟和 UDP 丢包
如果只是 3-10 人和朋友游玩,先用 3000 地图、12-16GB 内存和尽量少的插件,通常比一开始追求大地图和复杂玩法更稳定。若你刚部署完 Minecraft Java 服,也可以对照VPS 搭建 Minecraft Java 服务器教程,比较两类游戏服在内存、端口和备份上的差异。
