朋友联机开的世界只有房主在线时才存在,而专属服务器解决了这个问题:世界一直在线,小队成员随时都能上线;1.0 之后,PC、Xbox、PlayStation 5 和 Switch 2 玩家可以进入同一个世界。本篇讲怎么选、怎么搭、怎么长期维护一台服务器,包括 1.0 存档格式变化这个最容易让回归房主踩坑的地方。
先定玩法:你们小队适合哪种联机方式
一个 Valheim 世界最多支持 10 名玩家同时在线,联机方式有三种。游戏内直接开房免费又快,但房主一下线世界就关闭,而且主机玩家进不来。专属服务器跑在独立机器或租用的主机上,全天在线,是唯一能给主机玩家一个固定家园的方案。租服务器省去了网络配置的麻烦;自己搭几乎不花钱(如果你已有闲置机器),但半夜出问题时修服务器的人就是你。
表格可左右滑动,查看完整内容。
| 方式 | 适合人群 | 代价 |
|---|---|---|
游戏内联机开房 | 只玩一晚上、纯 PC 小队 | 房主下线世界就关闭 |
租用专属服务器 | PC 与主机混合小队、怕折腾的人 | 按月付费,用面板而不是直接改文件 |
自己搭建专属服务器 | 有闲置电脑、想要完全控制权的人 | 端口、更新、备份都得自己管 |
只问一个问题就能定:小队里有没有主机玩家,或者有没有人会在你不玩的时间上线?只要有一个答案是肯定的,就选专属服务器。如果全是 PC 玩家且总是同时玩,游戏内开房就够了——而以后想迁移世界时,本篇的存档章节同样用得上。
Windows 自建服务器,一步一步来
专属服务器是一个独立的 Steam 工具,应用编号 896660,可以匿名下载,不需要再买一份游戏。通过 Steam 客户端的工具库或 SteamCMD 都能安装。安装文件夹里有 start_headless_server.bat,先把它复制一份再改你那份——因为每次服务器更新都会覆盖原文件,你的设置会跟着丢掉。
安装 Valheim Dedicated Server 工具,应用编号 896660。
把 start_headless_server.bat 复制一份,例如改名为 start-my-server.bat。
编辑你那份启动文件:设置服务器名、世界名和密码,密码至少 5 个字符,且不能包含服务器名或世界名,否则服务器会拒绝启动。
现在就决定是否开跨平台:如果小队里有主机或 Game Pass 玩家,启动参数里就要加 -crossplay。以后再切换联机后端,等于让所有人换一种连接方式。
启动服务器,看日志确认世界已激活,再自己先连进去试一遍,没问题后再邀请其他人。
Linux 上用 SteamCMD 自建
Linux 上用 SteamCMD 匿名登录安装同一个服务器应用。把安装目录单独指定,验证一次,然后用与 Windows 启动行相同的参数运行 valheim_server.x86_64。如果要开跨平台,先装好 libpulse-dev、libatomic1 和 libc6:缺了它们服务器能启动,但 PlayFab 注册会失败,日志里永远不会出现加入码。日志里没有加入码,基本就是 Linux 依赖库没装全。
安装命令:steamcmd +force_install_dir /path/to/valheim +login anonymous +app_update 896660 validate +quit
要开跨平台,首次启动前先通过系统包管理器装好 libpulse-dev、libatomic1 和 libc6。
建议配一个 systemd 服务或计划任务,让服务器在重启或崩溃后自己恢复运行。
启动参数逐个讲清楚
Valheim 没有服务器配置文件。服务器的一切设置都在启动行里,外加下面要讲的三个小文本文件。一条完整的启动行是这样的:valheim_server.exe -nographics -batchmode -name My Server -port 2456 -world Midgard -password vikings -public 1 -crossplay。下表里除了服务器名、世界名和密码,其他参数都是可选的。
表格可左右滑动,查看完整内容。
| 参数 | 作用 | 默认值或说明 |
|---|---|---|
-name | 服务器浏览器里显示的名字 | 必填 |
-port 2456 | 游戏端口;服务器还会用端口号加 1 做查询 | 2456,UDP 协议 |
-world | 要加载的世界;不存在时首次运行自动创建 | 必填 |
-password | 加入密码 | 至少 5 个字符 |
-public 1 或 0 | 是否在社区浏览器里公开显示 | 1 公开,0 隐藏 |
-crossplay | PlayFab 中继后端:主机玩家用加入码进入 | 不加即关闭 |
-savedir | 世界与权限文件的存放位置 | 游戏默认存档目录 |
-saveinterval | 自动保存世界的时间间隔(秒) | 1800 秒 |
-backups | 保留几份滚动世界备份 | 4 份 |
-preset | 世界规则预设:Normal、Casual、Easy、Hard、Hardcore、Immersive 或 Hammer | 不设即默认 |
-modifier 与 -setkey | 逐项调整世界规则,例如突袭或传送门规则 | 可重复添加 |
跨平台:各平台到底怎么进来
加了 -crossplay 后,服务器走 PlayFab 中继而不是直连。这就是 PlayStation
5、Switch
2、Xbox 和 Game Pass 玩家能与 Steam 玩家进入同一个世界的原因,也是跨平台服务器不需要做端口转发的原因:玩家凭日志里打印的 6 位加入码进入,而加入码每次重启服务器都会变。主机玩家只能用加入码进入,PC 玩家可以用加入码,也可以用浏览器。
不加 -crossplay 时,服务器走 Steam 后端。只有 Steam 客户端能加入,方式是 IP 加端口或浏览器直连,而且直连需要在路由器上把 UDP 2456 和 2457 转发到服务器机器,并放行服务器防火墙。Steam 后端也是唯一能用局域网或本机回环地址的方式:PlayFab 中继连不上本地或回环 IP,所以纯离线局域网之夜不该用跨平台服务器。
开了跨平台:把 6 位加入码和密码一起发给队友,每次重启后都要重新发码。
没开跨平台:发 IP 和端口,例如 203.0.113.10:2456,并转发 UDP 2456 和 2457。
公开服务器会出现在社区浏览器里;设为私密的服务器用加入码或直连 IP 照样能进。
1.0 存档:怎么迁移世界、怎么正确备份
这是回归房主最容易搞错的一节。1.0 之后,每个世界是一个文件夹,不再是两个文件。在 worlds_local 下面会有一个以世界名命名的文件夹,里面是 _main.db2 和 _main.fwl2 一对文件加一组 chunk 文件。整个文件夹就是这个世界:要拷就全拷,绝不要只抽其中几个文件出来。1.0 之前最后保存的世界则是两个文件,WorldName.db 和 WorldName.fwl,而且必须成对移动。老世界可以直接带进 1.0,极北深境的地形会在地图上尚未探索过的区域生成,所以想看终章并不需要开新世界。
复制之前先停掉游戏或旧服务器。正在保存时复制的世界可能是写了一半的。
Windows 上玩家世界在 %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local;Linux 和 Mac 在 ~/.config/unity3d/IronGate/Valheim/worlds_local。专属服务器则用它 -savedir 指定的文件夹。
把服务器的 -world 参数指向这个世界名,启动一次确认能正常加载,再告诉小队迁移完成了。
备份要备整个世界文件夹,不只是两个主文件,并且至少留一份在服务器机器之外的地方。
管理员、许可和封禁名单不会跟着世界走。它们是世界文件夹旁边的独立文本文件,新服务器上的这几份一开始都是空的。
管理员、封禁与白名单陷阱
存档目录里的三个纯文本文件控制着权限,每行一个玩家 ID,格式是 Platform_ID,例如 Steam_76561197960287930。管理员能用控制台命令,包括踢人、封禁、解封和强制保存。白名单就是那个陷阱:permittedlist.txt 里只要有任何一条记录,没在名单上的人就全被挡在外面。除非你真的想做纯邀请制服务器,否则让这个文件保持为空;改完三个文件中的任何一个都要重启服务器。
adminlist.txt:谁能用管理员命令。
bannedlist.txt:谁被禁止加入。
permittedlist.txt:白名单。只要有记录,其他人就全进不来。
管理员按 F5 打开游戏内控制台,但客户端要先在 Steam 启动选项里加 -console。
玩家 ID 从服务器日志或游戏内 F2 面板查看。ID 区分大小写。
世界规则存在世界里,不在服务器上
世界规则会改变一个世界的玩法,而且规则存在世界本身里,世界搬到哪规则就跟到哪。可以在游戏内的世界设置界面改,也可以在启动行用 -preset、-modifier 和 -setkey 改,或者在运行中的服务器上用管理员命令实时改。这对经常搬世界的团体很重要:休闲规则的世界搬到新服务器还是休闲,硬核规则的世界搬过去还是硬核。最好在打第一个 Boss 之前就把规则定下来,战役中途改规则等于预定一场队内争吵。
先排查这十个常见问题
加入时版本不一致:先更新服务器,再让玩家更新游戏。1.0 的客户端进不了还停留在旧版本的服务器。
服务器拒绝启动:先查密码。密码至少 5 个字符,且不能包含服务器名或世界名。
朋友进不了非跨平台服务器:在路由器上转发 UDP 2456 和 2457,并放行服务器防火墙。
Linux 日志里没有加入码:装好 libpulse-dev、libatomic1 和 libc6,再重启。
加入码无效:每次重启都会换码。发最新的码,别发昨天的。
主机玩家进不来:服务器必须加 -crossplay。Steam 后端的服务器只接受 Steam 客户端。
局域网地址在跨平台下连不上:PlayFab 中继不支持本地或回环 IP。纯局域网服务器就不要加 -crossplay。
谁都进不来:查 permittedlist.txt。里面只要有一条记录,服务器就变成纯邀请制。
迁移后世界不见了:-world 参数必须与世界文件夹名完全一致,而且 1.0 世界的整个文件夹都得到位。
进度回档了:确认备份确实存在,并且 -savedir 指向的正是你以为的那个位置。服务器往意料之外的位置写存档,是自建服务器的经典失误。
让服务器成为大家愿意留下的地方
技术搭建只是简单的一半。服务器真正的死因往往是社交问题:有人冲 Boss 而其他人还在草甸、战利品争吵,或者世界在不知不觉中没了备份。开服前先把三条规矩写下来:谁能在哪建造、Boss 战要不要等全员、世界多久在机器之外备一次。密码别发到公开频道,再设一位管理员免得一人缺席全队被晾着,更新也要按小队都知道的时间表来,别在开黑中途搞。
最后说一句 MOD。1.0 的引擎升级让大多数 MOD 需要重新编译,MOD 兼容性眼下是个移动靶。本篇刻意只讲原版:今天能用的 MOD 列表可能在下次服务器更新后就失效,而且 MOD 服务器要求每个玩家都装同一套 MOD。如果小队想要 MOD,那就把它当作一个单独的决定,届时再核对兼容性,并且加任何东西之前先给世界留一份原版备份。

