21 10 月 2026

饥荒联机版(Don't Starve Together)是 Klei 出品的长青联机神作,但它的服务端架构和别的游戏都不一样:"集群(Cluster)"概念——一个集群 = 一个地面世界(Master)+ 一个洞穴世界(Caves)两个独立进程,靠一个配置文件目录组织。新手常被 cluster_token、shard、server.ini 这几个概念绕晕。

这篇教程把集群结构讲清楚:从 SteamCMD 安装、token 申请、cluster.ini 到双世界(洞穴)配置、MOD 管理和备份,全部命令可抄。Linux 原生支持,不折腾。

本文由财富云计算整理,我们主营 NAT 型云服务器(无独立公网 IP),价格比独立 IP 机型省一半以上,跑饥荒这种轻中负载联机服完全够用。更多开服教程见端口速查表。

一、先理解集群结构

一个饥荒服务器(集群)长这样:

~/.klei/DoNotStarveTogether/MyCluster/     ← 集群目录,名字随便起
├── cluster_token.txt                      ← 服务器令牌(必须)
├── cluster.ini                            ← 集群级设置(人数、密码、模式)
├── Master/                                ← 地面世界
│   ├── server.ini                         ← 世界级设置(端口、房间)
│   └── leveldataoverride.lua              ← 世界生成覆盖(可选)
└── Caves/                                 ← 洞穴世界
    ├── server.ini
    └── leveldataoverride.lua
  • Master:地面世界,玩家主活动区。
  • Caves:地下世界,独立进程、独立存档、独立端口。不开洞穴也能玩,但饥荒的完整体验(猴子、兔人、发光浆果、远古科技)全在洞里,推荐开。
  • 两个进程是一台服务器上的两个程序,各占各的内存。

二、配置需求

规模CPU内存磁盘带宽
单世界(不开洞)1–4 人2 核2 GB3 GB5 Mbps
单世界 5–8 人2 核3 GB5 GB10 Mbps
双世界(开洞)1–4 人2–4 核4 GB10 GB10 Mbps
双世界 5–8 人4 核6–8 GB15 GB15 Mbps
  • 洞穴进程大约再吃 1.5–2GB 内存,开洞按 +2G 估。
  • NAT 型可跑,单世界只需 UDP 10999;双世界再加 UDP 10998,映射两条(NAT 型能力指南)。

三、安装:Linux 原生服务端

sudo adduser --disabled-password --gecos "" dst
sudo mkdir -p /opt/dst && sudo chown dst:dst /opt/dst

sudo -u dst -s
cd ~/steamcmd
./steamcmd.sh +force_install_dir /opt/dst/server +login anonymous +app_update 343050 validate +quit

服务端程序在 /opt/dst/server/bin64/:

ls /opt/dst/server/bin64/
# dontstarve_dedicated_server_nullrenderer_x64  ← 无渲染服务端(服务器用这个)

四、申请 cluster_token(最容易卡住的一步)

没有 token,服务端起不来。申请方式:

  1. 用玩游戏的 Steam 账号启动饥荒联机版客户端
  2. 主菜单 → 账户 → 「管理服务器」/「Create Server Token」
  3. 创建一个令牌,下载得到 cluster_token.txt
  4. 上传到服务器的集群目录:
sudo -u dst mkdir -p ~/.klei/DoNotStarveTogether/MyCluster
# 把本地 cluster_token.txt 传到:
# ~/.klei/DoNotStarveTogether/MyCluster/cluster_token.txt

token 和账号绑定:谁能创建令牌谁就是这个服的"服主",令牌泄露别人就能蹭你的服。别把它提交到公开仓库(泄露案例见Git 仓库与代码泄露防范),也不要在网页前端展示它。

五、cluster.ini 集群配置

[GAMEPLAY]
game_mode = survival          # survival生存 wilderness荒野 endless轻松
max_players = 8
pvp = false                   # true=可以互殴
pause_when_empty = true       # 无人时暂停,省资源
vote_kick_enabled = false     # 投票踢人,公共服可开

[NETWORK]
cluster_name = 我们的饥荒小队
cluster_description = 新人友好,长期经营
cluster_password = your_password
lan_only_cluster = false
offline_cluster = false
cluster_intention = cooperative   # cooperative社交 competitive竞技 madless轻松 social友好

[MISC]
console_enabled = true        # 允许游戏内控制台
max_snapshots = 6             # 自动快照数量
配置说明
game_modesurvival 最主流;wildless 死了不删档适合新手
pvp好友服建议 false,开了容易友尽
cluster_password进服密码,好友服必填
cluster_intention影响匹配推荐,好友服填 cooperative 即可
pause_when_empty无人时世界暂停,好友服神器(不用怕挂机被猎狗咬死)

六、Master 与 Caves 的 server.ini

Master/server.ini(地面世界):

[NETWORK]
server_port = 10999          # UDP
[SHARD]
is_master = true
[STEAM]
master_server_port = 27018   # Steam 通信端口
authentication_port = 8768
[ACCOUNT]
encode_user_path = true

Caves/server.ini(洞穴世界):

[NETWORK]
server_port = 10998          # UDP,必须与 Master 不同
[SHARD]
is_master = false
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
shard_enabled = true
[STEAM]
master_server_port = 27019
authentication_port = 8769
[ACCOUNT]
encode_user_path = true

要点:

  • Master 的 is_master = true,Caves 的 is_master = false。
  • 两个进程通过 127.0.0.1 内部通信,bind_ip/master_ip 都填 127.0.0.1 就行(同机部署)。
  • 端口别撞:游戏端口 10999/10998,Steam 端口 27018/27019,认证端口 8768/8769。
  • 防火墙放行 UDP 10999(地面);开了洞穴再加 UDP 10998。Steam 查询端口默认与游戏端口相邻(10997/10996),不确定就放行 UDP 10990–11000 区间,图个省心。

七、启动:两个进程 + systemd

写一个统一启动脚本:

cat > /opt/dst/start.sh <<'EOF'
#!/bin/bash
cd /opt/dst/server/bin64
exec ./dontstarve_dedicated_server_nullrenderer_x64 \
  -cluster MyCluster \
  -persistent_storage_root /home/dst/.klei \
  -console
EOF
chmod +x /opt/dst/start.sh

注意:一个 -cluster MyCluster 启动的是整个集群——如果 Caves 目录存在且配置正确,服务端会自动拉起洞穴进程,不需要启动两次。

sudo tee /etc/systemd/system/dst.service <<'EOF'
[Unit]
Description=Don't Starve Together Dedicated Server
After=network.target

[Service]
Type=simple
User=dst
ExecStart=/opt/dst/start.sh
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/dst/server/bin64

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now dst
journalctl -u dst -f

日志里出现 Master 和 Caves 两个世界的加载信息 = 集群起来了。systemd 细节见systemd 服务管理指南。

不开洞穴:把 Caves 目录改名(比如 Caves.disabled),集群就只跑地面世界,内存立省 2G。新手资源紧可以这么干。

八、MOD 管理

饥荒 MOD 全走 Steam 创意工坊。服务端强制 MOD 的方式:

  1. 在服务端集群目录建 mods/ 子目录(Master 和 Caves 各有一个)
  2. 创建 mods/dedicated_server_mods_override.lua:
return {
  ["workshop-378160973"] = { enabled = true },   -- 例如:全局地图显示
  ["workshop-1201557287"] = { enabled = true },
}
  1. MOD 文件本身:客户端订阅后,把 .klei 或 Steam 工坊缓存里的 MOD 拷到服务端 mods/ 目录(路径 ugc_mods/MyCluster/Master/ 等,以 Klei 文档为准)
  2. 玩家必须订阅同样的 MOD,版本不一致进不去

MOD 更新后服务端要重启才生效。改 MOD 前备份存档——某些 MOD 会往世界数据里写东西,卸载后世界可能残留异常。

九、管理员与存档

管理员在集群目录放 adminlist.txt(每行一个 KleiID,格式 KU_xxxx):

echo "KU_你的ID" > ~/.klei/DoNotStarveTogether/MyCluster/adminlist.txt

游戏内按 ~ 开控制台,管理员可用 c_gonext() 传送、c_spawn() 刷物品等调试命令(别滥用,好友服乐趣在经营)。

存档位置:

~/.klei/DoNotStarveTogether/MyCluster/Master/save/    ← 地面世界
~/.klei/DoNotStarveTogether/MyCluster/Caves/save/     ← 洞穴世界

备份脚本(整个集群目录打包,两个世界 + 配置一起走):

cat > /opt/dst/backup.sh <<'EOF'
#!/bin/bash
SRC="/home/dst/.klei/DoNotStarveTogether"
DST="/opt/dst/backups"
mkdir -p "$DST"
tar -czf "$DST/dst-$(date +%F-%H%M).tar.gz" -C "$SRC" MyCluster
ls -t "$DST"/dst-*.tar.gz | tail -n +21 | xargs -r rm
EOF
chmod +x /opt/dst/backup.sh
(crontab -l 2>/dev/null; echo "0 4 * * * /opt/dst/backup.sh") | crontab -

备份策略体系化见服务器备份策略;换服搬家见游戏服迁移指南。

十、更新

sudo systemctl stop dst
/opt/dst/backup.sh
sudo -u dst -s
cd ~/steamcmd
./steamcmd.sh +force_install_dir /opt/dst/server +login anonymous +app_update 343050 validate +quit
exit
sudo systemctl start dst

饥荒大版本更新偶尔改存档格式,更新前备份是铁律。自动化更新见游戏服自动更新实战。

十一、性能与常见问题

性能要点:世界天数越多(尤其中后期地表被玩家改造 + 洞里猴子兔人房一堆)内存持续涨;凌晨定时重启:0 5 * * * systemctl restart dst。swap 兜底见swap 优化。定位瓶颈见资源排查。

Q1:服务端启动就退出,日志刷 token 错误?
cluster_token.txt 不在集群目录、名字打错、或内容不完整。重新从游戏客户端下载令牌,文件名必须精确为 cluster_token.txt。

Q2:有 Master 日志没有 Caves 日志?
Caves 目录缺失、server.ini 端口和 Master 撞了、或 shard_enabled 没开。两个端口 10998/10999 不能一样。

Q3:玩家能进地面但进不了洞(洞口黑屏/掉线)?
UDP 10998 没放行,或 NAT 只映射了 10999。洞穴是独立端口独立进程。

Q4:加 MOD 后玩家进不去?
玩家没订阅同一个 MOD,或 MOD 版本和服务端不一致。让所有人从工坊更新,服务端重启。

Q5:世界越来越卡?
天数太长了。饥荒没有"删档重来"的温和选项,开新集群是终极解法;中期缓解靠重启和升内存。

Q6:一台机器开几个饥荒服?
每个集群独立目录 + 独立端口组(10999/10998 → 10997/10996…)+ 独立 systemd 服务,2 核 4G 带一个 8 人双世界服,两个服建议 4 核 8G。多开方案见一台服务器开多个游戏服。

十二、小结

饥荒开服的复杂度全在"集群"概念上:一个目录、两个世界、两个进程、两组端口。理清 Master/Caves 关系和 cluster_token 的位置,剩下的就是常规运维。好友服最佳实践:game_mode=wilderness(死了不删档)、pause_when_empty=true、pvp=false——这份配方能让你的群三年不散。

需要服务器,可以看看财富云计算的 NAT 型云服务器——无独立公网 IP,价格比独立 IP 机型省一半以上,UDP 双端口映射清晰可控。更多联机游戏开服教程持续更新在游戏配置与开服教程总索引。


相关阅读:英灵神殿开服 · 泰拉瑞亚开服 · 七日杀开服 · 僵尸毁灭工程开服 · 游戏服运营完全手册

延伸阅读
  1. 高防误区与避坑清单:25 个坑+下单前必问 14 问+到货验货流程
  2. DNS 攻击防护专题:劫持、隧道、投毒、放大四类攻击与 DNSSEC
  3. 电商大促防攻击预案:T-14 到当天的分级响应与降级开关
  4. 源站真实 IP 隐藏完全指南:六大暴露面排查+NAT 型终极方案
  5. 日志分析找攻击源:Nginx 日志三维度分析法与证据固定
  6. 攻击应急响应手册:六阶段响应流程,从确认到复盘的照做清单
  7. iptables 抗 DDoS 配置模板:状态过滤+SYN 防护+防扫描+游戏服版
  8. OpenResty Lua 自研 WAF:动态限流+攻击特征检测+Redis 黑名单
更多阅读
  1. 上一篇:7 Days to Die 七日杀开服完全指南:Linux 原生+Telnet 管理+世界生成
  2. 下一篇:Rust 腐蚀开服完全指南:Linux 原生+RCON 管理+清档与 Oxide 插件
发表评论 4