1. 项目概述:为什么需要一个本地饥荒服务器?
如果你和朋友们是《饥荒联机版》(Don‘t Starve Together, 简称DST)的忠实玩家,一定经历过这样的场景:房主一掉线,所有人的游戏进度瞬间归零;或者想开个长期档慢慢玩,但每次都得等房主上线才能继续。公共服务器虽然方便,但延迟、规则限制和潜在的陌生人干扰,总让体验打折扣。这时候,搭建一个属于自己的本地专用服务器,就成了最理想的解决方案。
简单来说,一个本地专用服务器就是一台7x24小时不间断运行的“主机”。它独立于任何玩家的游戏客户端,将游戏世界和所有数据都托管在一台专门的电脑上。这意味着,只要服务器开着,你和你的朋友们随时可以加入这个世界,房主下线也不会影响其他人,存档进度完全由服务器掌控,自由度极高。对于想体验纯净生存、或是想安装大量模组(Mod)打造专属玩法的硬核小团体而言,这是提升游戏体验质的飞跃。
听起来很复杂?别担心,整个过程其实就像搭积木,步骤清晰,工具现成。核心就是利用Steam官方提供的Don‘t Starve Together Dedicated Server工具,配合SteamCMD这个命令行工具来部署。你不需要是网络专家,甚至不需要有公网IP(通过内网穿透或第三方平台也能实现远程联机),只需要有一台性能尚可、能稳定开机的电脑(甚至是一台闲置的旧笔记本或小型主机),再跟着下面的步骤一步步操作,就能拥有一个完全受自己控制的饥荒世界。
2. 核心思路与准备工作
搭建DST专用服务器的核心逻辑,可以理解为在目标机器上安装并运行一个“无头”版本的饥荒游戏。这个版本没有图形界面,只负责模拟游戏世界、处理逻辑和与客户端通信。我们的工作就是准备好环境,获取服务器文件,进行配置,然后启动它。
2.1 硬件与网络环境评估
在开始之前,先评估一下你的“服务器”是否够格。
硬件要求:
- CPU:对于一个小型私人服务器(2-8人),近十年的英特尔i5或AMD同级别处理器完全足够。DST服务器更吃单核性能,所以主频比核心数更重要。
- 内存:这是最关键的部分。官方推荐至少4GB,但那是非常基础的配置。我的经验是,预留6-8GB给服务器进程是更稳妥的选择。尤其是当你计划添加大量模组、开启更多世界选项(如大量资源)时,内存消耗会急剧上升。一个满载模组的8人服务器,吃到10GB以上内存并不稀奇。
- 存储:需要至少5GB的可用空间用于安装服务器文件和存储存档。强烈建议使用固态硬盘(SSD),能显著减少世界加载和存档读取的时间。
- 系统:Windows 10/11 64位,或主流的Linux发行版(如Ubuntu Server)。本文将以Windows环境为例进行讲解,因为对大多数个人用户而言图形界面操作更直观。
网络环境:
- 带宽:上行带宽是关键。每个玩家连接大约需要50-100Kbps的稳定上行速度。对于4-6人的小团队,家庭宽带的上行带宽(通常为20-50Mbps)完全足够。你可以用
speedtest.net测试你的实际上行速度。 - 网络类型:大多数家庭网络处于运营商的大内网(NAT)后,没有独立的公网IPv4地址。这意味着从外部互联网直接访问你家里的服务器会非常困难。
- 解决方案选择:
- 纯局域网联机:最简单,所有玩家和服务器在同一路由器下。无需任何额外配置,延迟极低。
- 拥有公网IP:向你的网络运营商(电信、联通等)申请,通常可以获取动态公网IP。然后需要在路由器上设置端口转发,将外部请求转发到你的服务器内网IP上。这是最稳定、延迟最低的远程联机方式。
- 无公网IP(主流情况):使用内网穿透工具。例如
SakuraFrp、NATAPP等免费/付费服务,它们会提供一个公网域名和端口,将流量中转至你的本地服务器。这是目前最通用的解决方案,配置稍复杂但一劳永逸。 - 第三方服务器托管平台:如
Railway、腾讯云/阿里云轻量应用服务器。这相当于在云端租用了一台虚拟电脑来运行服务器,完全省去了本地硬件的维护和网络配置,但需要付费,且对模组管理和文件操作不如本地灵活。
注意:无论选择哪种远程联机方式,服务器端都需要在防火墙中放行指定的端口(默认是10999和27018),否则外部连接会被阻断。
2.2 核心工具与文件准备
我们需要两个核心工具:
- SteamCMD:Valve官方的Steam命令行客户端。用于以非图形化的方式登录Steam账户、下载和更新游戏(服务器)文件。它体积小,适合自动化脚本调用。
- Don‘t Starve Together Dedicated Server:这是一个在Steam上免费的“游戏”。它包含了运行DST服务器所需的所有核心文件。你需要用一个Steam账号(无需拥有DST游戏本体)将其添加到库中。
准备工作步骤:
- 准备一个Steam账号:建议专门注册一个新的、纯净的Steam小号用于服务器管理。避免使用大号,因为频繁的登录、下载可能触发Steam的安全机制。
- 在Steam客户端获取服务器工具:
- 用你的小号登录Steam客户端。
- 在商店搜索 “Don‘t Starve Together Dedicated Server”。
- 点击“安装”。它会出现在你的游戏库中。这一步非常重要,它建立了账号与该工具的许可关联,后续SteamCMD才能以此账号身份下载文件。
- (可选)在库中找到它,右键“属性”->“本地文件”->“浏览”,可以看看它的安装位置,但通常我们不用从这里直接操作。
- 下载并配置SteamCMD:
- 访问 Valve 的官方开发者页面(搜索 “SteamCMD” 即可找到),下载适用于Windows的压缩包。
- 在你想放置服务器的磁盘(如
D:\)下,新建一个文件夹,例如D:\SteamCMD,将下载的steamcmd.zip解压到此文件夹。 - 你会得到一个
steamcmd.exe文件。双击运行它,它会自动更新自身并打开一个命令行窗口。首次运行会下载一些必要组件,完成后窗口会显示Steam>提示符。 - 输入
quit回车退出。至此,SteamCMD就准备好了。
3. 服务器部署与核心配置详解
现在进入核心环节:部署服务器文件并进行详细配置。
3.1 使用SteamCMD部署服务器文件
我们不通过Steam客户端直接复制文件,而是用SteamCMD下载,这样更干净,也便于未来编写脚本自动更新。
- 在
D:\SteamCMD文件夹中,新建一个文本文档,命名为update_dst_server.bat(批处理文件)。右键编辑,输入以下内容:
@echo off D:\SteamCMD\steamcmd.exe +login anonymous +force_install_dir "D:\DST_Dedicated_Server" +app_update 343050 validate +quit pause+login anonymous: 以匿名方式登录。对于免费工具,这通常可行。但如果下载失败,请替换为+login your_steam_account your_password(你的专用小号账号密码),不过这样密码会明文保存,安全性差。更推荐先匿名尝试。+force_install_dir “D:\DST_Dedicated_Server”: 指定服务器文件的安装目录。你可以修改D:\DST_Dedicated_Server为你想要的任何路径。+app_update 343050:343050正是 “Don‘t Starve Together Dedicated Server” 的App ID。这条命令是下载核心。validate: 验证文件完整性,确保下载完整。+quit: 下载完成后退出SteamCMD。pause: 执行完后暂停,方便你看是否有错误信息。
保存并双击运行这个
.bat文件。命令行窗口会开始工作,从Steam服务器拉取文件。首次下载可能需要几分钟到十几分钟,取决于你的网速。看到 “Success! App ‘343050’ fully installed.” 之类的提示,即表示成功。完成后,进入你指定的目录(如
D:\DST_Dedicated_Server),你会看到bin,mods等文件夹,这就是我们的服务器根目录了。
3.2 生成服务器配置文件与令牌
DST服务器的行为几乎完全由配置文件控制。我们需要生成两个核心文件:cluster.ini(集群配置)和server.ini(单个世界配置),以及一个安全令牌。
第一步:生成服务器令牌(Cluster Token)这是服务器在Klei官方服务器列表中进行“身份认证”的钥匙,没有它,服务器可能无法正常启动或无法使用某些在线功能(如游戏内服务器列表)。
- 用你的主Steam账号(拥有DST游戏的账号)登录游戏。
- 点击“账户”按钮。
- 在“游戏”选项卡下,找到“Don‘t Starve Together”,点击“游戏服务器”。
- 点击“添加新服务器”,给你的服务器随便起个名,然后点击“创建”。
- 页面会生成一长串由字母数字组成的令牌,复制它。
- 在你的服务器根目录下,新建一个文件夹
D:\DST_Dedicated_Server\cluster。在cluster文件夹内,新建一个文本文档,命名为cluster_token.txt,将刚才复制的令牌粘贴进去,保存。
第二步:创建集群与服务器配置文件
- 在
cluster文件夹内,新建文本文档,命名为cluster.ini。这是整个服务器集群(可以包含多个世界,如地面世界和洞穴)的总配置。 - 用记事本编辑
cluster.ini,填入基础配置:
[GAMEPLAY] game_mode = survival max_players = 6 pvp = false pause_when_empty = true [NETWORK] cluster_description = 我们的小窝 cluster_name = My DST Server cluster_password = 123456 cluster_intention = cooperative [MISC] console_enabled = true [SHARD] shard_enabled = true bind_ip = 127.0.0.1 master_ip = 127.0.0.1 master_port = 10889 cluster_key = supersecretkeygame_mode: 游戏模式,survival(生存),endless(无尽),wilderness(荒野)。max_players: 最大玩家数。cluster_password: 服务器密码,不设密码则删掉此行。cluster_intention: 意图,cooperative(合作),competitive(竞争),social(社交),madness(疯狂)。影响游戏内匹配推荐。console_enabled: 启用控制台,方便管理员操作。shard_enabled: 是否启用分片(多世界)。true为启用。master_port: 主世界(地面)的通信端口。cluster_key: 集群内部通信密钥,任意设置一个复杂的字符串即可,确保地面和洞穴配置一致。
- 在
cluster文件夹内,新建一个文件夹Master(代表地面世界)。再新建一个文件夹Caves(代表洞穴世界,如果不需要洞穴可以跳过)。 - 在
Master文件夹内,新建文本文档server.ini:
[NETWORK] server_port = 10999 [SHARD] is_master = true name = Master [STEAM] master_server_port = 27018 authentication_port = 8768server_port: 该世界对客户端开放的UDP端口。这是需要在路由器或防火墙中放行的主要端口之一。is_master:true表示这是主世界。master_server_port: Steam通信端口,也需要放行。
- (可选)在
Caves文件夹内,创建server.ini:
[NETWORK] server_port = 10998 [SHARD] is_master = false name = Caves id = 1000 [STEAM] master_server_port = 27019 authentication_port = 8769- 注意端口号要与
Master错开,id可以设置为任意数字。
3.3 世界生成配置与模组管理
世界生成配置:每个世界的具体地貌、资源分布等,由worldgenoverride.lua文件控制。最简单的方法是:
- 用你的主账号在本地游戏客户端中,创建一个新世界,精心调整所有你想要的设置:季节长短、资源多少、BOSS频率、地形布局等等。
- 创建并进入世界后,退出。
- 在本地客户端存档位置(通常为
C:\Users\[你的用户名]\Documents\Klei\DoNotStarveTogether\[一串数字]\Cluster_[数字])找到对应的Master或Caves文件夹,复制里面的leveldataoverride.lua文件。 - 将这个文件重命名为
worldgenoverride.lua,然后放置到服务器目录的对应位置(D:\DST_Dedicated_Server\cluster\Master\)。
模组管理:服务器模组配置在cluster文件夹下的modoverrides.lua文件中。同样,最方便的方法是在本地客户端配置好模组并生成此文件。
- 在游戏客户端中,创建服务器时,在“模组”页面精心挑选并配置好所有模组(启用、设置参数)。
- 创建世界并进入后退出。
- 从上述本地客户端存档的
Master文件夹中,找到modoverrides.lua文件,复制到服务器目录的D:\DST_Dedicated_Server\cluster\下。 - 关键一步:你需要将客户端订阅的模组,也在服务器端“订阅”。打开服务器根目录的
mods文件夹,编辑dedicated_server_mods_setup.lua文件。按照里面的示例格式,为每个模组添加一行:ServerModSetup(“模组ID”)。模组ID可以在创意工坊该模组的页面地址中找到(一串数字)。例如:ServerModSetup(“378160973”)。 - 服务器首次启动时,会根据这个列表自动下载并安装模组。
4. 启动脚本编写与服务器运行
一切配置就绪,我们需要一个脚本来启动服务器。由于可能包含主世界和洞穴两个进程,手动启动很麻烦。
在服务器根目录D:\DST_Dedicated_Server\bin下,创建start_server.bat文件,编辑内容:
@echo off cd /d “D:\DST_Dedicated_Server\bin” echo Starting Master Shard... start “DST Master” dontstarve_dedicated_server_nullrenderer.exe -console -cluster MyDstCluster -shard Master timeout /t 5 /nobreak >nul echo Starting Caves Shard... start “DST Caves” dontstarve_dedicated_server_nullrenderer.exe -console -cluster MyDstCluster -shard Caves echo Servers are starting... pause-cluster MyDstCluster: 指定集群存档文件夹的名字,对应cluster目录下的MyDstCluster文件夹。你需要根据自己cluster文件夹的实际名称修改。-shard Master/Caves: 指定启动的是哪个世界。timeout: 等待5秒,让主世界先启动完毕再启动洞穴,避免启动顺序问题。
双击运行这个批处理文件,会弹出两个命令行窗口,分别显示地面和洞穴服务器的日志。当看到[Shard] Shard server started on port: 10999和Sim paused之类的信息,并且没有红色错误提示时,说明服务器启动成功。
如何连接?
- 局域网内:其他玩家在游戏内点击“浏览游戏”,在“局域网”标签页下应该就能看到你的服务器。
- 远程连接(无公网IP,使用内网穿透):以内网穿透工具
SakuraFrp为例,你需要创建一个隧道,将本地IP(如192.168.1.100)的10999端口映射到SakuraFrp提供的一个公网地址和端口上。你的朋友在游戏内通过“连接”标签,输入公网地址:端口即可连接。注意:如果开了洞穴,洞穴端口(如10998)也需要映射。
5. 高级管理、维护与故障排查
服务器跑起来只是开始,日常管理和问题排查才是持久运营的关键。
5.1 服务器控制台与管理员命令
服务器运行时的命令行窗口就是控制台。你可以直接在里面输入指令(需在cluster.ini中启用console_enabled)。
- 常用管理命令:
c_regenerateworld(): 重置当前世界(慎用!)。c_save(): 手动立即保存。c_shutdown(): 安全关闭服务器。c_announce(“消息”): 向所有在线玩家广播消息。TheNet:SetAllowIncomingConnections(true/false): 允许/禁止新玩家加入。
- 授予管理员权限:
- 在服务器
cluster文件夹下,创建adminlist.txt文件。 - 每行放入一个玩家的Klei User ID(KU_ID)。玩家在游戏主菜单点击“账户”,就能看到自己的KU_ID。
- 管理员玩家在游戏内按
~键可以打开本地控制台,输入远程管理命令。
- 在服务器
5.2 自动化与更新维护
- 自动更新脚本:可以将之前的
update_dst_server.bat脚本改进,并加入到启动脚本之前执行,实现启动前自动检查更新。 - 计划任务重启:服务器长期运行可能会内存泄漏。可以通过Windows的“任务计划程序”,设置每天在凌晨玩家少的时候,自动执行一个“关闭-更新-启动”的脚本,实现定时重启更新。
- 日志监控:服务器日志保存在
cluster\Master\server_log.txt和Caves对应位置。遇到玩家无法连接、服务器崩溃等问题,首先查看这里的错误信息。
5.3 常见问题与排查实录
问题1:服务器启动失败,提示 “Failed to start the server” 或 “Could not bind to port…”
- 排查:端口被占用。检查是否有其他程序(如另一个DST服务器、其他游戏)占用了
10999,27018等端口。可以用netstat -ano | findstr :10999命令查看。修改server.ini中的端口号,并确保防火墙和路由器(如果需要)也放行了新端口。
问题2:朋友在游戏列表里看不到服务器,或者连接超时。
- 排查:
- 局域网:确认所有电脑在同一网络下;关闭服务器和客户端的防火墙试一下。
- 远程(端口转发):检查路由器端口转发规则是否设置正确(协议选UDP或Both,IP地址填服务器的内网IP);确认服务器本机防火墙已放行端口。
- 远程(内网穿透):检查内网穿透客户端是否正常运行,隧道状态是否在线;确认连接地址和端口是穿透工具提供的公网地址和远程端口,而不是本地端口。
问题3:玩家能连接但卡在“正在加入服务器”或频繁断开。
- 排查:
- 服务器性能不足,尤其是内存。观察服务器进程的内存占用,如果接近或超过物理内存,会导致频繁使用虚拟内存而卡顿。增加物理内存或减少模组、降低世界资源规模。
- 网络延迟或丢包。让玩家使用网络加速器试试。
- 模组冲突。尝试禁用所有模组,看是否能正常连接,然后分批启用模组排查。
问题4:模组不生效或报错。
- 排查:
- 确认
dedicated_server_mods_setup.lua中已添加模组ID。 - 确认
modoverrides.lua文件已正确放置,并且格式正确(可以从客户端生成)。 - 查看服务器日志,模组加载错误通常会有明确提示,例如缺少依赖模组。按照提示订阅并启用所有依赖模组。
- 确认
问题5:服务器运行一段时间后突然崩溃。
- 排查:
- 首要查看日志:
server_log.txt末尾的崩溃信息是最直接的线索。 - 内存溢出:这是最常见原因。DST服务器(尤其是带洞穴和模组)是32位进程,有内存使用上限(约2-3GB)。使用大量模组或长期运行后容易崩溃。解决方案是定期重启服务器,或使用第三方工具监控并自动重启。
- 特定模组Bug:某个模组在特定情况下引发崩溃。通过二分法(禁用一半模组测试)来定位问题模组,并检查其创意工坊页面是否有已知问题或更新。
- 首要查看日志:
搭建和维护一个DST专用服务器,就像经营一个小型线上社区。初期配置会有些繁琐,但一旦稳定运行,它所提供的稳定、私密、高度自定义的游戏体验,是官方服务器或临时主机无法比拟的。从硬件选择、网络配置,到脚本编写、故障排查,整个过程本身就是一次极佳的技术实践。当看到朋友们顺利进入你搭建的世界,并享受其中时,所有的折腾都变得值得了。最后一个小建议:做好存档的定期备份(整个cluster文件夹),这是对你和朋友们游戏成果最基础的保障。