
本指南基于我在2015年左右发布的一篇论坛帖子。随着我的方舟服务器逐渐完善和复杂化,我对其进行了更新、编辑和改进,最新版本还包含了如何让模组正确下载和解压的方法。本指南假设你具备Linux的使用知识,已经搭建了自己的系统(无论何种发行版,我使用的是Debian),并且所有防火墙/端口转发命令和规则都基于“iptables”。 步骤1:如何在你的Linux设备上获取方舟专用服务器文件 Linux专用服务器系统要求 由于服务器不需要处理图形渲染,所以配置要求不高,但这毕竟是一款大型游戏,因此无法在树莓派上运行。多年来,我一直在一台惠普康柏6200 Pro SFF电脑上运行我的《方舟:生存进化》Linux专用服务器。这台电脑搭载了英特尔酷睿i3-2120四核处理器,确实相当老旧。如果你有意购买,在网上花不到100美元就能买到翻新的同款机型。不过不用担心,这套系统运行现代64位Linux发行版完全没有问题。 我将这台小型机箱的内存升级到了16GB(该机箱支持的最大内存),因为虽然专用服务器仅使用约6GB内存,但我希望有额外的内存余量,这样就无需担心内存交换导致服务器运行缓慢。 我还将机械硬盘更换成了2.5英寸的固态硬盘。-A INPUT -i eth0 -p udp -m udp --dport 4242 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 4380 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 7777:7790 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 25147 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 25147 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 27000:27040 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 27000:27040 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 27215 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 27217 -j ACCEPT 如果你有独立的网关(比如我使用的VPN系统,或者专用的防火墙设备/服务器),你需要将这些端口设置为既接受又转发。以下是将流量从我的托管VPN系统传输到游戏服务器/VPN客户端的规则。IP地址【10.89.0.200】和网络【10.89.0.0/24】是我的方舟:生存进化服务器及网络,你可根据自身环境替换为合适的地址。 -A FORWARD -i eth0 -p udp --destination-port 4242 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 4380 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7777 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7778 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7779 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7780 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7781 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 7782 -d 10.89.0.200 -j ACCEPT -A FORWARD -i eth0 -p udp --destination-port 27000:27040 -d 10.89.0.200 -j 接受 -A 转发 -i eth0 -p tcp --目标端口 27000:27040 -d 10.89.0.200 -j 接受 -A 转发 -i eth0 -p udp --目标端口 27215 -d 10.89.0.200 -j 接受 -A 转发 -i eth0 -p udp --目标端口 27217 -d 10.89.0.200 -j 接受 -A 转发 -i eth0 -p udp --目标端口 27219 -d 10.89.0.200 -j 接受 -A 转发 -i tun0 -j 接受 -A 转发 -s 10.89.0.0/24 -i tun0 -o eth0 -j 接受 -A 转发 -m 状态 --状态 相关,已建立 -j 接受 注意事项: 1 - 出于某种原因,我必须拆分77XX端口转发,无法解释原因,但在拆分之前无法正常工作。 2 - 带有'tun0'的行用于允许来自外部的流量发送到游戏服务器,并允许来自该网络的流量从游戏服务器返回。将“tun0”替换为您的防火墙/网关系统上适用的任何接口。 3 - “RELATED,ESTABLISHED”规则行表示防火墙可以全面接受与成功且正常的数据流相关的连接数据包。 最后是NAT规则,因为转发数据包固然重要,但这只是其中一部分。这些规则会对已允许并转发的传入流量进行源/目标地址转换,以确保路由合理,从而使流量能够正常进出。与之前相同,根据需要更改IP和网络段字段。 #ARK的NAT规则 -A PREROUTING -p udp -d YOUR-PUBLIC-IP-HERE --dport 4242 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 4380 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 7777:7790 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 27000:27040 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p tcp -d 你的公网IP --dport 27000:27040 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 27215 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 27217 -j DNAT --to-destination 10.89.0.200 -A PREROUTING -p udp -d 你的公网IP --dport 27219 -j DNAT --to-destination 10.89.0.200 -A POSTROUTING -d 10.89.0.200 -j SNAT --to-source 10.89.0.1 -A POSTROUTING -s 10.89.0.0/24 -o eth0 -j MASQUERADE 注意:SNAT行表示来自外部网络到游戏服务器的流量会被修改为来自10.89.0.1,而MASQUERADE行表示来自游戏服务器到外部网络的流量会被修改为来自VPN服务器的地址。 步骤3 - 游戏服务器配置:ini文件 游戏首次运行后,可根据需要调整GameUserSettings.ini和Game.ini文件。这些文件位于: Steam/steamapps/common/ARK Survival Evolved Dedicated Server/ShooterGame/Saved/Config/LinuxServer ARK Gamepedia网站是我获取配置信息的来源。我们将在下面的MODS部分再次提及相关内容。启动游戏,登录并检查一切是否如你所愿运行,退出,调整设置……如此反复操作。 现在你终于可以启动游戏并开始邀请他人加入,或者你也可以为了好玩进一步调整设置。 步骤4 - 模组!! 我终于弄明白这部分了。当我切换到使用LinuxGSM游戏管理器时(因为我现在运行着3个《方舟:生存进化》服务器集群,这样管理起来更方便),大部分内容都得到了澄清。这个工具有助于填补一些特定的知识空白,但对于独立的、非工具支持的Linux专用服务器来说,模组也能完美运行。 1 - 找到你想在服务器上安装的模组,并记下它们的ID号。 2 - 在你的GameUserSettings中。在你的ini文件中,[ServerSettings]部分会有一行条目,内容为ActiveMods=mod1number,mod2number,mod3number等。 3 - 在你的Game.ini中,会有一个新的名为ModInstaller的部分,在该部分中,每个模组都有如下条目: [ModInstaller] ModIDS=mod1number ModIDS=mod2number ModIDS=mod3number (根据需要重复) 4 - 在游戏服务器的启动命令行中,你需要在已有的选项基础上添加以下选项:-automanagedmods 5 - ARK使用steamcmd来下载模组并解压,但默认情况下它的功能并不完善(在Windows系统上可以运行,但Linux系统的这部分功能被遗漏了)。要使其正常工作,你需要安装steamcmd。sh文件(如果尚未存在)以及指向Steam安装目录中基础“steamapps”目录的符号链接,该链接位于以下Linux二进制文件路径下:Steam/steamapps/common/ARK Survival Evolved Dedicated Server/Engine/Binaries/ThirdParty/SteamCMD/Linux。目录内容应如下所示:steam@lurker:~/Steam/steamapps/common/ARK Survival Evolved Dedicated Server/Engine/Binaries/ThirdParty/SteamCMD/Linux$ ls -l 总计24 drwxr-xr-x 2 steam steam 4096 6月22日 18:32 linux32 drwxr-xr-x 2 steam steam 4096 6月22日 18:32 linux64 drwxr-xr-x 2 steam steam 4096 6月22日 18:32 package drwxr-xr-x 2 steam steam 4096 6月22日 18:32 public drwxr-xr-x 3 steam steam 4096 6月22日 18:32 siteserverui lrwxrwxrwx 1 steam steam 27 6月23日 15:00 steamapps -> /home/steam/Steam/steamapps -rwxr-xr-x6 - 完成上述步骤后,当你使用脚本启动服务器时,你应该会看到类似以下内容: 4.5.1-0+UE4 7038 3077 404 10 [S_API 失败] SteamAPI_Init() 失败;SteamAPI_IsSteamRunning() 失败。 设置崩溃报告迷你转储 AppID = 346110 将标准错误输出重定向到 '/game/arkserver/.local/share/Steam/logs/stderr.txt' [ 0%] 正在检查可用更新... [----] 正在验证安装... Steam 控制台客户端 (c) Valve Corporation -- 输入 'quit' 退出 -- 正在加载 Steam API...成功。 正在匿名连接至 Steam 公共服务器...登录成功 正在等待用户信息...成功 正在下载项目 797686039 ... 成功。已将项目 797686039 下载至 "/game/arkserver/."没什么特别的,如今256G固态硬盘很便宜,而且你也不需要它有多么强大的性能,但老式的5400/7200转机械硬盘与即使是普通的固态硬盘相比也糟糕透顶。 用这种配置,我多年来一直运行着《方舟:生存进化》的单个地图实例,服务器可以连续几个月不宕机,最多时有5个人各自拥有基地和宠物收藏,却没有任何延迟或性能问题。 (编辑:我说谎了……)下载项目2082530026成功,保存至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/2082530026"(15530656字节) 下载项目1609138312成功,保存至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1609138312"(42362216字节) 下载项目1967741708成功,保存至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1967741708"(682798字节) 下载项目697357957成功,保存至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/697357957"(332654字节) 下载项目761535755成功已将项目761535755下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/761535755"(1063942字节)。正在下载项目1281094173... 成功。已将项目1281094173下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1281094173"(28459797字节)。正在下载项目1591643730... 成功。已将项目1591643730下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1591643730"(2350612字节)。正在下载项目731604991... 成功。已将项目731604991下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/731604991"(64844766字节)。正在下载项目821530042... 成功。已将项目821530042下载至"/game/arkserver/."正在下载项目609380111... 成功。已将项目609380111下载至本地(200103202字节) 正在下载项目722649005... 成功。已将项目722649005下载至本地(18771144字节) 正在下载项目801082391... 成功。已将项目801082391下载至本地(655367字节) 正在下载项目1891446920... 成功。已将项目1891446920下载至本地(690989字节) 正在下载项目2112166911... 成功。已将项目2112166911下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/2112166911"(1901737字节)。正在下载项目679529026... 成功。已将项目679529026下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/679529026"(1348594848字节)。正在下载项目1631378184... 成功。已将项目1631378184下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1631378184"(8930033字节)。正在下载项目1787443195... 成功。已将项目1787443195下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1787443195"(107033886字节)。正在下载项目736236773... 成功。已将项目736236773下载至"/game/arkserver/."正在下载项目884033872...成功。已将项目884033872下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/884033872"(2896642字节)。正在下载项目1135465954...成功。已将项目1135465954下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1135465954"(86432841字节)。正在下载项目751991809...成功。已将项目751991809下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/751991809"(1258853字节)。正在下载项目640022028...成功。已将项目640022028下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/640022028"(56585131字节)。正在下载项目1847004749...成功。已将项目1847004749下载至"/game/arkserver/.local/share/Steam/steamapps/workshop/content/346110/1847004749"(369986字节)。正在下载项目1264988068...成功。已将项目1264988068下载至"/game/arkserver/."7 - 当游戏完成所有模组加载后,你需要使用“top”或类似工具监控CPU资源。ShooterGame进程会在几分钟内大量占用处理器资源(某个线程会短暂显示100%占用),待其稳定后,需确认模组已成功解压并处理至以下模组目录:Steam/steamapps/common/ARK Survival Evolved Dedicated Server/ShooterGame/Content/Mods 8 - 假设上述所有步骤均正常。现在你可以启动游戏,并测试通过客户端系统连接到服务器。当你点击“加入服务器”时,在离开“会话列表”界面并进入实际游戏加载界面之前,应该会出现“正在加载模组 x/y”的计数器。 步骤5 - 连接到你的服务器 对于你自己和其他局域网用户,只需启动游戏客户端,选择“加入方舟”,然后在左下角找到“会话筛选器”下拉菜单(官方、非官方等),选择“局域网”即可加入。对于互联网连接,情况会稍微复杂一些,因为公共服务器列表很难搜索。方法1 向你的朋友提供类似这样的链接,让他们在网络浏览器中打开,这应该会启动Steam客户端(或提示他们允许启动Steam客户端引导程序——这完全没问题),并直接连接到服务器启动游戏。如果你想让本地/LAN客户端跳过搜索部分,也可以使用LAN IP——只需将链接发给他们,他们就能在游戏启动前直接连接。 方法2 让他们打开Steam界面,通过顶部的菜单(Steam、视图、好友、游戏、帮助)操作。打开“视图”菜单,找到并点击“服务器”。点击“添加服务器”按钮,让他们输入方法1中链接里的IP:端口信息并保存。然后启动《方舟:生存进化》并点击“加入”,从左下角的“会话筛选器”选项中选择“收藏夹”。 步骤6 - 更新 最终不可避免的情况会发生。某些模组或游戏本身会更新,当你尝试连接时,服务器列表可能会变为空白(游戏更新),或者你会收到“服务器模组不匹配”之类的错误提示。 要更新服务器,你需要回到Linux系统并停止游戏服务器。如果你使用“screen”,只需重新附加到会话;或者如果在Linux桌面有打开的终端会话,选中该终端窗口并按两次CTRL-C来关闭游戏。 如果你使用“nohup”启动服务器,则需要找到ShooterGame进程的PID,然后对该PID编号运行kill命令。当我的一名玩家用雷龙采集浆果,且采集倍率被调得很高时,我遇到了性能问题——服务器在雷龙每次甩尾都要计算成千上万的浆果数量,这会导致系统卡顿片刻。 多亏了上述那位玩家因高强度雷龙采集导致的卡顿问题,我换用了一台之前闲置在壁橱里的旧游戏主机。所以目前《方舟:生存进化》服务器的配置是英特尔i5-6600处理器和32GB内存。得益于性能和内存的大幅提升,现在可以同时运行3张《方舟:生存进化》地图。不过这有点偏离主题了,主要是想说明运行《方舟:生存进化》服务器并不需要最尖端的硬件。言归正传。一个简单的“kill ####”命令应该就足够了,我认为你不需要使用“kill -9 ####”,不过我是用nohup运行游戏的,所以从未尝试过这种方式。 现在你的服务器已停止,运行我们最开始创建的“ark-update.sh”脚本。这将验证游戏文件是否全部就绪且为最新版本。然后只需使用你常用的启动命令重新启动游戏服务器,“-automanagedmods”功能会获取创意工坊的所有更新,当游戏度过之前那种占用大量CPU的阶段后,你就可以恢复正常使用了。 总结 这些说明对于《方舟:生存进化》Linux专用服务器的纯净版(无工具/管理平台)安装非常有效,但正如步骤4中所提到的,我已经开始使用LinuxGSM来运行我的方舟集群。现在我在一个集群中运行3张地图,而不是只运行一张,这对处理这种情况很有帮助。 我希望这能帮到很多人,因为这让我在桌子上撞了将近一个星期的头,还咒骂开发者没有提供文档。我是一名系统管理员,所以我不会让这种破事打败我过去15年磨练的技能——:] 开发者:如果你们正在看这个——我仍然想要合适的文档,但希望这能帮助其他人启动和运行游戏。我假设你已经安装并运行了Linux系统,本指南不包含这部分内容,抱歉;) 不过我自己使用的是Debian 9系统。 1 - 你需要“steamcmd”——请自行查找相关安装说明。我强烈建议你将steam用户的主目录设置在独立的磁盘空间上。 2 - 安装好steamcmd后,你需要获取专用服务器文件。在“steam”用户的主目录下,我有一个名为“update-ark.sh”的文件,内容如下: #!/bin/sh ./steamcmd.sh +login anonymous +app_update "376030 validate" +quit 只需切换到steam用户后运行“./ark-update.sh”,它就会完成剩下的操作——下载内容相当精简(是的,20G算是精简了,想想PC桌面版安装要多大……几乎200G?)。话虽如此,我强烈建议为【游戏】预留专用磁盘空间,这样即使《方舟:生存进化》占满了你的硬盘,也不会影响整个系统。 3 - 运行游戏一次,使其自行解压并生成ini文件等。以下是一个简单的启动脚本(当游戏界面出现可供加入时,按CTRL-C退出脚本)。请注意,通过这种方式运行游戏时,如果你关闭终端窗口,游戏进程也会终止。我建议使用【screen】或【nohup】来防止这种情况发生。 另外请注意,这将生成【Game.ini】和【GameUserSettings.ini】的初始/干净版本(我们稍后会编辑这些文件),我建议在这些文件中设置加入密码和管理员密码,而不是在启动命令中设置,因为启动命令中的密码对系统上的任何人都是可见的。以下 shell 脚本需要放在与“ShooterGameServer”相同的目录中——默认路径为 Steam/steamapps/common/ARK Survival Evolved Dedicated Server/ShooterGame/Binaries/Linux/。 #!/bin/sh ./ShooterGameServer "TheIsland?SessionName=SomeName?listen?QueryPort=27015?RCONPort=27020?Port=7777" 你也可以将脚本设置为包含不同的地图,这样你只需停止游戏,注释掉正在运行的那一行,取消注释另一行,然后很快就能重新启动,如下所示。你可以根据需要随意自定义每个启动命令行。 #!/bin/sh ./ShooterGameServer TheIsland?listen?MaxPlayers=10 -log #./ShooterGameServer Ragnarok?listen?MaxPlayers=10 -log #./ShooterGameServer Aberration_P?listen?最大玩家数=10 -日志 步骤2 - 网络连接与防火墙/端口转发 具体设置因设备而异。如果您使用常见的DSL调制解调器/路由器设备管理网络连接,请查阅设备文档,了解是否需要进行端口转发设置。如果您的Linux方舟服务器并非网络网关(例如在家中运行服务器),通常可以跳过此部分(在安全的私有网络中运行服务器时,为何需要防火墙?)。 我的游戏服务器是一台独立的Linux主机,本身没有防火墙规则,但要从互联网访问它,需要通过一台作为防火墙的托管Linux主机(技术细节冗长且繁琐,此处省略)。一般的连接路径为:玩家 <-> Linux 防火墙系统 <-> 游戏服务器。因此,这里需要声明,尽管使设置正常工作的确切说明可能在某些方面有所不同,但此处关于端口的信息仍然完全相关。以下所有代码段均取自 iptables 服务配置/保存文件。 你会注意到这些端口允许范围比最低/推荐范围更广。这是因为我运行着一个服务器集群(目前一台计算机上有 3 个实例),而这些端口涵盖了玩家在所有三个实例上游玩和自由切换所需的所有必要端口。 这些规则用于允许外部世界通过这些端口建立传入连接。如果你的游戏服务器与互联网网关/防火墙在同一系统上,那么你可以就此打住,因为游戏服务器默认情况下会监听所有接口,一旦允许特定端口的连接,数据就会自动传输到等待接收数据的服务。 # 《方舟:生存进化》使用的Steam端口
2026-03-18 02:07:17 发布在
ARK: Survival Evolved
说点好听的...
收藏
0
0
