Skip to main content

如何创建您自己的 Rust 服务器

本指南介绍如何在您的 VPS 或专用 Linux 服务器上安装和配置 Rust 专用服务器,并可通过 Oxide(uMod)添加插件。

订购服务器​

要托管您的 Rust 服务器,HostMyServers 提供多种适合游戏的选择。Rust 对资源要求很高:请优先选择高速处理器和大容量内存(至少 8 GB,公共服务器需要更多)。

前提条件​

资源

下列资源对应服务器本身的需求,未计入操作系统、已安装软件或机器上其他服务已占用的资源。 tickrate 30 下每 100 名玩家按 200 Mbps 估算(社区估计值)。所需配置基于原版服务器(不含扩展或插件)。

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

配置要求​

组件最低推荐
内存8 GB32 GB 及以上
CPU2 核4 核或更多,高主频
存储20 GB SSD40 GB NVMe SSD
网络300 Mbps1 Gbps
性能

Rust 引擎主要依赖单核性能:高主频处理器比大量核心更重要。

系统更新​

sudo apt update && sudo apt upgrade -y

安装依赖项​

安装所需软件包:

sudo apt install -y wget tar unzip screen lib32gcc-s1

创建专用用户​

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

sudo adduser --disabled-password --gecos "" rust

使用的端口​

端口协议用途
28015UDP游戏
28017UDP查询(服务器列表)
28016TCPRCON(远程管理),应限制为您的 IP 地址
28082TCPRust+(手机应用)

防火墙配置​

开放所需端口。RCON 端口(TCP 28016)必须限制为您的固定 IP 地址:请替换 您的IP。

使用 UFW​

sudo ufw allow 28015/udp
sudo ufw allow 28017/udp
sudo ufw allow from 您的IP to any port 28016 proto tcp
sudo ufw allow 28082/tcp
sudo ufw reload

使用 iptables​

sudo iptables -A INPUT -p udp --dport 28015 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 28017 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 您的IP --dport 28016 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 28082 -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 28015 accept
sudo nft add rule inet filter input udp dport 28017 accept
sudo nft add rule inet filter input ip saddr 您的IP tcp dport 28016 accept
sudo nft add rule inet filter input tcp dport 28082 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
RCON 安全

RCON 端口(28016)可用于管理服务器:切勿向所有人开放。如果没有固定 IP 地址,请不要开放此端口,改用 SSH 隧道。

安装 SteamCMD​

以 rust 用户身份登录:

sudo -u rust bash
cd ~

创建目录并下载 SteamCMD:

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

下载 Rust 服务器​

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

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

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

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

启动脚本​

启动脚本取决于地图类型。请选择下面两个版本之一。

生成地图(默认)​

创建启动脚本:

nano ~/rust-server/start.sh
#!/bin/bash
cd /home/rust/rust-server
export LD_LIBRARY_PATH="/home/rust/rust-server/RustDedicated_Data/Plugins/x86_64:$LD_LIBRARY_PATH"

exec ./RustDedicated -batchmode \
+server.ip 0.0.0.0 \
+server.port 28015 \
+server.queryport 28017 \
+server.identity "server1" \
+server.level "Procedural Map" \
+server.seed 12345 \
+server.worldsize 3500 \
+server.maxplayers 100 \
+server.hostname "我的 Rust 服务器" \
+server.description "欢迎来到我的 Rust 服务器" \
+server.saveinterval 300 \
+rcon.port 28016 \
+rcon.password "ChangeMe" \
+rcon.web 1 \
+app.port 28082

自定义地图​

要使用托管在线上的自定义地图,请将地图生成参数替换为 +server.levelurl:

nano ~/rust-server/start.sh
#!/bin/bash
cd /home/rust/rust-server
export LD_LIBRARY_PATH="/home/rust/rust-server/RustDedicated_Data/Plugins/x86_64:$LD_LIBRARY_PATH"

exec ./RustDedicated -batchmode \
+server.ip 0.0.0.0 \
+server.port 28015 \
+server.queryport 28017 \
+server.identity "server1" \
+server.levelurl "https://您的域名.com/我的地图.map" \
+server.maxplayers 100 \
+server.hostname "我的 Rust 服务器" \
+server.description "欢迎来到我的 Rust 服务器" \
+server.saveinterval 300 \
+rcon.port 28016 \
+rcon.password "ChangeMe" \
+rcon.web 1 \
+app.port 28082

使脚本可执行​

无论选择哪个版本,都需要使脚本可执行:

chmod +x ~/rust-server/start.sh
安全

请为 rcon.password 设置一个足够长且唯一的密码。任何知道该密码的人都可以管理您的服务器。

主要参数​

参数描述
server.identity服务器存档文件夹的名称(位于 server/ 内)
server.level地图类型(生成地图使用 Procedural Map)
server.seed地图生成种子
server.worldsize地图大小(1000 至 6000)
server.levelurl自定义地图的下载地址(如已设置,必须删除 server.worldsize 和 server.seed)
server.maxplayers最大玩家数
server.hostname服务器的公开名称
server.description在服务器列表中显示的描述
server.saveinterval自动保存间隔(秒)
rcon.portRCON 端口
rcon.passwordRCON 密码
rcon.web1 = WebSocket RCON(供管理工具使用)
app.portRust+ 端口
首次启动

首次启动时,生成地图需要几分钟。当日志显示 Server startup complete 时,服务器即已就绪。

首次启动​

~/rust-server/start.sh

要停止服务器,请使用 Ctrl+C,或通过 RCON 执行 quit 命令。

安装 Oxide(uMod)​

Oxide 可让您为服务器添加插件。请先停止服务器,然后执行:

cd ~/rust-server
wget https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip
unzip -o Oxide.Rust-linux.zip

下次启动时将创建 oxide/ 文件夹。插件放置在 oxide/plugins/ 中。

更新

每次 Rust 更新都会覆盖 Oxide 的文件。每次更新服务器后,请使用上面的 unzip -o 命令重新安装 Oxide。

服务器规模配置​

推荐内存​

服务器规模玩家数地图大小推荐内存
小型1-502500-30008 GB
中型50-100350012-16 GB
大型100-2004000 及以上16-32 GB

这些数值仅供参考:实际消耗会随插件数量和清档周期的增长而增加。

文件结构​

路径描述
RustDedicated服务器可执行文件
server/server1/服务器数据(地图、存档、配置)
server/server1/cfg/server.cfg服务器配置
oxide/plugins/Oxide 插件
oxide/config/插件配置
oxide/data/插件数据
oxide/logs/Oxide 日志

添加自定义表情​

在服务器文件夹中创建 serveremoji 文件夹(名称 server1 对应 server.identity):

mkdir -p /home/rust/rust-server/server/server1/serveremoji

然后将您的图片放入其中。

图片要求​

  • 图片不得超过 256x256 像素。
  • 仅支持 .jpg 或 .png 格式(8 位或 16 位 PNG 无法使用)。
  • 图片大小必须小于 250 KB。
  • 文件名即为表情名称:poop.png 通过 :poop: 使用。

可以使用以下命令刷新表情,需通过 RCON 执行:

server.resetserveremoji

玩家需要重新连接才能看到新的表情。

内容

Facepunch 可能会将使用冒犯性或不当表情的服务器从服务器列表中移除。

配置为 systemd 服务​

创建服务文件​

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

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

文件内容:

[Unit]
Description=Rust Dedicated Server
After=network.target

[Service]
Type=simple
User=rust
Group=rust
WorkingDirectory=/home/rust/rust-server
ExecStart=/home/rust/rust-server/start.sh
Restart=on-failure
RestartSec=20
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

启用并启动服务​

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

管理命令​

# 检查状态
sudo systemctl status rust.service

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

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

# 查看日志
sudo journalctl -u rust.service -f
提示

在停止或重启服务器之前,请通过 RCON 发送 server.save 命令,以确保玩家进度已保存。

使用 screen 启动(备选)​

仅使用一种启动方式

如果 systemd 服务已启动,请先停止它(sudo systemctl stop rust.service):两个服务器无法使用相同的端口。

sudo -u rust bash
screen -S rust
~/rust-server/start.sh

分离:Ctrl+A 然后 D

返回:screen -r rust

在后台运行并记录日志​

sudo -u rust bash
cd ~/rust-server
screen -AdmSL rust ./start.sh
选项描述
-A使窗口适应终端大小
-d -m以分离方式在后台启动会话
-S rust会话名称
-L将服务器输出记录到日志文件中

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

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

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

提示

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

服务器更新​

停止服务器​

sudo systemctl stop rust.service

下载新版本​

sudo -u rust bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/rust/rust-server +login anonymous +app_update 258550 validate +quit

更新 / 重新安装 Oxide​

如果您使用 Oxide,请重新安装(仍使用 rust 用户),然后退出会话:

cd ~/rust-server
wget -O Oxide.Rust-linux.zip https://github.com/OxideMod/Oxide.Rust/releases/latest/download/Oxide.Rust-linux.zip
unzip -o Oxide.Rust-linux.zip
exit

如果不使用 Oxide,只需输入 exit 退出 rust 用户的会话。

重启服务器​

sudo systemctl start rust.service

服务器清档(Wipe)​

清档会将地图重置为初始状态。请先停止服务器,然后使用 rust 用户删除地图文件:

sudo systemctl stop rust.service
sudo -u rust bash
cd ~/rust-server/server/server1
rm -f *.*.map *.*.sav*

如需包括玩家蓝图在内的完整清档,还需删除:

rm -f clans.*.db
rm -f player.blueprints*.db
rm -f player.deaths*.db
rm -f player.identities*.db
rm -f player.states*.db
rm -f player.tokens*
rm -f relationship*
rm -f sv.files*

然后退出 rust 用户的会话:

exit
文件内容删除后的效果
clans.*.db氏族(成员、角色)氏族消失
player.blueprints*.db玩家已学习的蓝图蓝图重置
player.deaths*.db死亡记录记录被清除
player.identities*.db玩家身份(名称、角色外观)玩家以全新角色重新开始
player.states*.db玩家的持久状态进度重置
player.tokens*每位玩家的专属数据(地图标记、计时器)数据重置
relationship*玩家之间的关系关系被清除
sv.files*服务器存储的文件(告示牌图像、绘画)告示牌图像和绘画被删除

然后修改 start.sh 中的 +server.seed(自定义地图则修改 +server.levelurl 地址)以生成新地图,再重启服务器。

强制清档

Facepunch 会在每月第一个星期四随游戏更新强制执行地图清档。

控制台命令​

这些命令通过 RCON(管理工具或游戏控制台)使用。

命令描述
status显示在线玩家
server.save保存世界
say <消息>向所有玩家发送消息
kick <玩家>踢出玩家
ban <玩家>封禁玩家
unban <steamid>解封玩家
ownerid <steamid> "名称" "原因"授予所有者权限
moderatorid <steamid> "名称" "原因"授予协管员权限
server.writecfg保存配置和权限
oxide.plugins列出已加载的插件
oxide.reload <插件>重新加载插件
quit停止服务器

自动备份​

备份脚本​

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

mkdir -p $BACKUP_DIR

# 备份服务器和 Oxide 数据
# (如果不使用 Oxide,请删除 oxide/... 文件夹)
tar -czf $BACKUP_DIR/rust_$DATE.tar.gz -C $SERVER_DIR server/server1 oxide/data oxide/config oxide/plugins

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

echo "备份完成:rust_$DATE.tar.gz"
sudo chown rust:rust /home/rust/backup.sh
sudo chmod +x /home/rust/backup.sh

计划备份​

sudo crontab -u rust -e

添加:

# 每6小时备份
0 */6 * * * /home/rust/backup.sh

连接到服务器​

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

  1. 启动 Rust
  2. 按 F1 键打开控制台
  3. 输入:client.connect 服务器IP:28015

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

故障排除​

服务器无法启动​

  • 检查日志:sudo journalctl -u rust.service -n 100
  • 检查脚本是否可执行:ls -l ~/rust-server/start.sh
  • 检查可用磁盘空间:df -h
  • 检查可用内存:free -h

steamclient.so 错误​

如果日志报告与 steamclient.so 相关的错误,请以 rust 用户身份登录,然后创建指向 SteamCMD 64 位文件的链接:

sudo -u rust bash
mkdir -p ~/.steam/sdk64
ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
exit

玩家无法连接​

  • 检查 UDP 端口 28015 是否已开放:

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 28015
    sudo nft list ruleset | grep 28015
  • 检查服务器是否正在监听:ss -ulnp | grep 28015

  • 等待启动完成(日志中出现 Server startup complete)

服务器未出现在列表中​

  • 检查 UDP 端口 28017 是否已开放
  • 启动后请等待几分钟
  • 检查服务器是否可以访问互联网

Oxide 无法加载插件​

  • 每次 Rust 更新后重新安装 Oxide
  • 使用 oxide.version 命令检查 Oxide 版本
  • 查看 oxide/logs/ 中的日志

性能问题​

  • 减小 server.worldsize 和 server.maxplayers
  • 禁用最消耗资源的插件
  • 增加实例的内存
  • 安排每天一到两次重启
  • 作为最后手段,升级到更高配置的方案

FAQ​

需要开放哪些端口?​

除服务器端口(见"使用的端口"表)外,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/rust/steamcmd/linux32/steamcmd && chmod +x /home/rust/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 软件包。