
1. 从单机到联机为什么我们需要Grasscutter如果你玩过《原神》肯定对它的游戏模式再熟悉不过了一个庞大的开放世界但核心的冒险、副本、剧情推进本质上是一个人与服务器的交互。你的角色数据、抽卡记录、世界状态都牢牢地攥在官方的服务器里。这带来了稳定和公平但也带来了一些“限制”——比如你想体验一下满命角色、想测试某个圣遗物组合的极限伤害、或者想和朋友在一个完全由自己掌控的世界里自由探索这在官方服务器上是几乎不可能实现的。这就是Grasscutter诞生的背景。它不是一个修改器也不是一个外挂而是一个私服服务端程序。你可以把它理解为你自己家里的“米哈游服务器”。通过在自己的电脑或服务器上运行Grasscutter你就能搭建一个完全独立的《原神》游戏世界。在这个世界里你可以通过指令自由获取角色、武器、资源调整世界等级甚至修改游戏机制。而“联机”功能则是让这个私人世界从你的单人游乐场变成你和朋友们可以共同冒险的乐园。我最初接触Grasscutter就是因为想和几个同样喜欢研究配队和伤害的朋友在一个不受体力、资源限制的环境里测试各种阵容搭配。官方服务器上攒原石、刷圣遗物的周期太长了很多有趣的玩法构想都没法及时验证。Grasscutter完美解决了这个问题。更重要的是联机搭建成功后我们几个人可以进入同一个世界一起刷本、打Boss、甚至进行一些自定义的趣味挑战这种体验是单机模拟无法比拟的。当然我必须强调Grasscutter及其联机功能仅限于学习、测试以及与可信赖的朋友在私人环境下娱乐使用。绝对不要尝试用它进行任何破坏游戏平衡、影响官方服务器或其他玩家的行为也切勿将你的私服公开化、商业化。这不仅是法律和道德上的红线从技术角度看公开的私服也极易受到攻击和不稳定。本文的所有内容都建立在“私人、学习、研究”的前提下。2. 搭建前的核心准备环境、资源与心态调整搭建一个可联机的Grasscutter服务器远不是下载一个软件双击运行那么简单。它需要你像一个真正的服务器管理员一样去考虑运行环境、网络配置和资源管理。很多人卡在第一步不是因为技术多难而是准备不充分。我把这个阶段称为“筑基”基础打牢了后面才会顺利。2.1 不可绕过的运行环境Java JDKGrasscutter是基于Java开发的所以你的系统上必须安装正确版本的Java运行时环境。这里有个关键点务必安装JDKJava Development Kit而不仅仅是JREJava Runtime Environment。为什么因为一些构建和运行脚本可能需要javac等编译工具虽然Grasscutter本身提供了编译好的jar包但为了环境完整性和避免未知错误安装JDK是最稳妥的选择。目前Grasscutter推荐使用JDK 17。版本过高或过低都可能导致兼容性问题。安装与验证步骤前往Oracle官网或Adoptium等开源站点下载JDK 17的安装包。对于Windows用户建议下载.msi安装包它会自动配置环境变量。安装完成后打开命令提示符CMD或PowerShell输入java -version和javac -version。如果两者都能正确显示版本号特别是包含“17”这个主版本号说明安装成功。如果提示“不是内部或外部命令”则需要手动配置系统环境变量JAVA_HOME并将其bin目录添加到Path中。这是一个常见的坑点务必检查。2.2 获取Grasscutter服务端文件官方源代码托管在GitHub上。对于大多数使用者来说我们不需要自己从零编译可以直接下载社区维护的稳定发行版Release。访问GitHub仓库搜索 “Grasscutter/Grasscutter” 找到官方仓库。寻找Release点击右侧的 “Releases” 标签页。不要直接下载源代码Source code那需要你自己编译。选择资产在最新的Release页面下方你会看到Assets列表。你需要下载两个核心文件Grasscutter.jar这是服务端的主程序。grasscutter-resources.zip这是游戏资源文件包含角色、物品、场景等所有必要数据。没有它服务器无法正常启动。创建专用文件夹在你的电脑上找一个空间充足的磁盘位置例如D:\Grasscutter_Server将下载的Grasscutter.jar和grasscutter-resources.zip都放进去。然后解压grasscutter-resources.zip你会得到一个resources文件夹。最终目录结构应该类似于D:\Grasscutter_Server\ ├── Grasscutter.jar └── resources\ ├── BinOutput\ ├── ExcelBinOutput\ └── ...2.3 最重要的心理准备网络与端口这是联机搭建中最具挑战性的一环请做好心理准备。Grasscutter服务器运行在你本地你的朋友在互联网的另一端。要想让他们连接进来就需要解决“寻址”和“敲门”问题。寻址IP地址你家里的网络通常处于运营商的路由器之后你电脑获取的是一个局域网IP如192.168.1.100。这个地址在互联网上是找不到的。你需要让朋友能通过你家的公网IP找到你。敲门端口转发即使找到了你家公网IP服务器程序具体在哪个“房间”端口提供服务呢Grasscutter默认使用22102TCP/UDP和443TCP等端口。你需要在你家的路由器上设置一条规则“将所有发往公网IP的22102端口的数据都转交给内网192.168.1.100这台电脑的22102端口”。这个过程就叫端口转发Port Forwarding。因此成功的联机需要两个必要条件你拥有一个公网IP动态或静态均可。目前很多家庭宽带是动态公网IP每次重启光猫可能会变但这不影响使用我们可以用DDNS解决。你拥有路由器的管理员权限能够登录路由器后台进行端口转发设置。如果你满足以上条件那么技术上的障碍就已经扫清了一大半。如果不满足例如身处大学校园网、公司网络或某些特殊运营商网络下联机将变得非常困难可能需要借助内网穿透工具但那会引入额外的复杂性和不稳定性不在本文基础指南讨论范围内。3. 服务端配置与首次启动让世界运转起来有了准备好的文件和理解了网络概念我们现在开始让服务器本身跑起来。这个阶段的目标是得到一个能在本地正常运行的单机服务器。3.1 生成基础配置文件Grasscutter不会在第一次运行时自动创建所有配置文件我们需要通过一个命令来生成它们。在你存放Grasscutter.jar的目录下按住Shift键并右键点击空白处选择“在此处打开Powershell窗口”或“打开命令窗口”。输入以下命令并回车java -jar Grasscutter.jar程序会运行并迅速退出同时在当前目录下生成一个config.json文件和一个keystore.p12文件。config.json就是服务器的核心配置文件。3.2 关键配置修改config.json详解用文本编辑器如VSCode、Notepad打开config.json。里面的选项很多但对于基础联机我们重点关注以下几项{ server: { bindAddress: 0.0.0.0, // 重要必须为0.0.0.0表示监听所有网络接口 bindPort: 22102, // 游戏连接端口默认即可 accessAddress: 127.0.0.1, // 重要需改为你的公网IP或域名 accessPort: 22102, // 对外访问端口通常与bindPort一致 useSSL: true, // 是否使用SSL加密联机建议保持true keystorePath: ./keystore.p12, // SSL证书路径 keystorePassword: 123456, // 证书密码可更改 runMode: HYBRID // 运行模式HYBRID即可 }, game: { bindAddress: 0.0.0.0, bindPort: 22102, accessAddress: 127.0.0.1, // 同样需要改为公网IP或域名 accessPort: 22102 }, dispatch: { regions: [ { name: os_usa, // 区域名可自定义 title: My Grasscutter Server, // 服务器名称游戏内可见 ip: 127.0.0.1, // 极其重要必须改为公网IP或域名 port: 443 // Dispatch服务器端口通常为443 } ], encryption: { useEncryption: true, useInRouting: true, key: cryptoKey, // 加密密钥保持默认 signingKey: signingKey // 签名密钥保持默认 } }, database: { server: { connectionUri: mongodb://localhost:27017, // MongoDB连接字符串 collection: grasscutter // 数据库集合名 } } }需要修改的核心项server.accessAddress和game.accessAddress这两个地址告诉客户端游戏如何连接到服务器。在单机测试时可以保持127.0.0.1。但为了联机必须将其修改为你用于联机的公网IP地址。例如114.51.41.91。如果你有域名并做了DDNS这里也可以填域名如mygcserver.ddns.net。dispatch.regions[0].ip这是最关键的一处。游戏启动时会先向这个IP地址请求服务器列表。这里也必须修改为你的公网IP或域名必须与上面的accessAddress一致。dispatch.regions[0].title这里是显示在游戏服务器选择界面上的名字可以改成你喜欢的比如“和朋友的冒险岛”。注意bindAddress保持0.0.0.0不要动这表示服务器监听本机所有网卡。accessAddress才是对外公布的地址。3.3 安装并运行MongoDBGrasscutter使用MongoDB来存储玩家账号、角色数据、物品等信息。它是一个NoSQL数据库我们需要先把它运行起来。下载安装前往MongoDB官网下载社区版Community Server的安装包。Windows用户下载.msi文件。安装时建议选择“Complete”完全安装并勾选“Install MongoDB as a Service”这样MongoDB会作为系统服务开机自启非常方便。验证运行安装完成后默认情况下MongoDB服务已经启动。你可以打开任务管理器在“服务”标签页里找到“MongoDB”服务确认其状态为“正在运行”。可选使用图形化管理工具对于不熟悉命令行的用户可以安装MongoDB Compass这是一个官方图形界面工具连接地址填写mongodb://localhost:27017即可查看和管理数据库。3.4 启动服务器并创建账号环境配置妥当后我们首次启动服务器。再次在Grasscutter.jar目录打开命令行。输入启动命令java -jar Grasscutter.jar如果一切正常你会看到控制台开始刷屏加载资源、连接数据库最后出现类似[INFO] Game Server started on port 22102和[INFO] Dispatch Server started on port 443的提示这意味着服务器启动成功此时服务器在运行但还没有任何游戏账号。我们需要在服务器控制台里创建账号。在运行着的命令行窗口里输入account create [你的用户名] [你的UID]例如account create admin 10001。UID建议从10001开始不要与官方游戏UID冲突。创建成功后可以设置管理员权限account setpermission [用户名] *。例如account setpermission admin *。至此一个单机可用的Grasscutter服务器就已经搭建完成了。你可以通过修改游戏客户端的方式连接本地127.0.0.1进行测试。但我们的目标是联机所以接下来要攻克网络关卡。4. 网络攻坚端口转发与动态域名解析这是让外部朋友能够连接进来的核心技术环节。你需要像一名网络管理员一样操作你的路由器。4.1 确定本地IP与路由器登录查询本地IP在Windows中打开命令提示符输入ipconfig。找到你正在使用的网络适配器通常是以太网或WLAN记录下IPv4 地址例如192.168.1.100。这个地址就是你在局域网内的“门牌号”。登录路由器打开浏览器在地址栏输入路由器的管理地址通常是192.168.1.1或192.168.0.1。具体地址和默认账号密码可以在路由器底部的标签上找到。4.2 配置端口转发规则在路由器管理界面中寻找名为“端口转发”、“虚拟服务器”、“NAT设置”或“高级设置”下的类似功能。你需要创建两条转发规则分别对应Grasscutter的dispatch端口和game端口。虽然dispatch常用443端口但在家庭路由器上转发443端口可能被占用或受限一个更稳妥的方案是修改配置使用其他端口如8443然后转发这个端口。假设我们采用以下方案Dispatch 端口8443(TCP)Game 端口22102(TCP/UDP)你的电脑本地IP192.168.1.100那么在路由器里需要添加两条规则规则名外部端口内部端口内部IP地址协议Grasscutter_Dispatch84438443192.168.1.100TCPGrasscutter_Game2210222102192.168.1.100TCPUDP操作要点“外部端口”是互联网上访问你服务器时用的端口。“内部端口”是你电脑上Grasscutter服务器监听的端口。添加后务必点击“保存”或“应用”路由器可能会重启。4.3 应对动态公网IPDDNS配置家庭宽带的公网IP通常是动态的可能每隔几天或重启光猫后就会变化。这意味着你昨天告诉朋友的IP今天可能就失效了。动态域名服务DDNS可以解决这个问题它将一个固定的域名如mygcserver.ddns.net绑定到你动态变化的IP上。选择DDNS服务商很多路由器内置了花生壳oray、no-ip等DDNS服务。你也可以使用免费服务如 DuckDNS。在路由器上配置在路由器管理界面找到“DDNS”或“动态DNS”设置项选择服务商输入你注册获得的域名、用户名和密码启用它。修改服务器配置将之前config.json里所有填写公网IP的地方accessAddress和dispatch.regions[0].ip全部替换成你的DDNS域名例如mygcserver.ddns.net。同时确保dispatch.regions[0].port与你转发的端口一致如我们例子中的8443。获取当前公网IP你可以通过访问ip138.com等网站来获取你当前的公网IP用于测试和验证DDNS是否生效。5. 客户端连接与联机实战服务器和网络都准备好了现在需要让你的朋友通过《原神》官方客户端连接到你私人的服务器。这需要通过一个“代理”或“修改”的方式将官方客户端的请求指向你的服务器。5.1 使用代理工具推荐Fiddler Classic对于Windows用户使用Fiddler Classic这类抓包工具进行流量重定向是最清晰的方法。下载安装Fiddler Classic。配置Fiddler脚本打开Fiddler点击菜单栏的Rules-Customize Rules...。这会打开一个脚本文件。在脚本中查找OnBeforeRequest函数并在其中添加以下规则大约在文件中部if (oSession.HostnameIs(dispatch.yuanshen.com) || oSession.HostnameIs(dispatch-os.yuanshen.com)) { oSession.host 你的DDNS域名或公网IP:你的Dispatch端口; // 例如oSession.host mygcserver.ddns.net:8443; }这段代码的作用是当游戏客户端尝试连接官方的dispatch服务器时Fiddler会将其请求劫持并重定向到你指定的私服地址和端口。保存脚本并重启Fiddler使其生效。启动游戏确保Fiddler正在运行它会自动设置系统代理然后正常启动《原神》客户端。此时游戏启动画面左下角的公告区域可能会显示异常或空白这是正常的因为它正在连接你的私服。登录游戏在登录界面使用你在服务器控制台创建的账号和密码密码默认为空直接点击登录即可。如果一切顺利你将进入游戏并且服务器选择界面会显示你在config.json中设置的title如“My Grasscutter Server”。5.2 分享连接信息给朋友要让朋友连接他们也需要进行同样的客户端代理配置。信息打包你需要提供以下信息给你的朋友你的服务器地址DDNS域名或公网IP。你的Dispatch端口号如8443。一个你为他们创建好的游戏账号用户名和UID。朋友的操作你的朋友需要在他的电脑上安装并配置Fiddler修改Customize Rules脚本将其中的地址和端口替换成你提供的。启动Fiddler然后启动游戏用你给的账号登录。联机当你们都成功进入游戏后就可以像官方服务器一样通过“多人游戏”界面互相加入对方的世界了。5.3 常见联机问题排查连接超时/失败检查1确认服务器控制台是否正常启动无报错。检查2确认路由器端口转发规则已正确设置并生效。可以尝试在朋友电脑上使用telnet [你的公网IP] [端口]命令测试端口是否通畅Windows需在“启用或关闭Windows功能”中先开启Telnet客户端。如果不通说明转发失败或防火墙拦截。检查3关闭电脑的防火墙仅用于测试或是在防火墙入站规则中允许java.exe和Grasscutter.jar的相关端口。检查4确认config.json中所有accessAddress和dispatch.ip都正确修改为了公网地址且端口号对应。能登录但无法进入世界/卡在加载界面检查1确保resources文件夹已正确解压且路径无误。检查2检查MongoDB服务是否正常运行。检查3服务器控制台是否有红色错误日志常见于资源文件版本与服务器版本不匹配请确保使用对应版本的资源包。朋友看不到我的世界/无法加入检查1确认双方游戏版本与Grasscutter服务器版本兼容。检查2在游戏内主机需要进入“多人游戏”设置将世界权限设置为“允许直接加入”或“需要申请”。检查3网络问题可能导致UDP通信不畅尝试让主机使用account setpassword命令设置一个密码然后朋友通过输入UID和密码的方式加入有时比直接搜索更稳定。6. 进阶管理与安全须知服务器搭建并成功联机只是开始作为一个服务器管理员你还需要知道如何维护它。6.1 服务器基础指令与日常维护Grasscutter服务器控制台提供了丰富的指令你可以通过命令行管理服务器和玩家。账号管理account create [用户名] [UID]创建新账号。account delete [用户名]删除账号。account setpassword [用户名] [密码]为账号设置密码朋友连接时使用。玩家管理give [UID] [物品ID] [数量]给予玩家物品。物品ID可以在资源文件中查询。spawn [怪物ID]在指定玩家世界生成怪物。permission [add/remove] [用户名] [权限节点]管理玩家权限。服务器控制stop安全关闭服务器。reload重新加载配置文件无需重启。日常维护建议定期备份MongoDB数据库可通过mongodump命令以防数据损坏。关注GitHub上Grasscutter的更新及时升级服务端和资源文件以获取新内容和修复。6.2 安全与责任红线绝不能碰这是最重要的一部分必须时刻牢记。绝对私有你的Grasscutter服务器应该只邀请你完全信任的朋友加入。切勿将服务器地址、端口和账号信息公开在论坛、视频网站等公共平台。公开的私服极易招致恶意攻击、数据泄露甚至法律风险。远离官方绝对不要尝试用修改过的客户端或任何方式去连接、干扰《原神》的官方服务器。Grasscutter和官方游戏是两条完全独立的平行线。任何试图交叉的行为都可能导致你的官方账号被封禁这是铁律。仅供学习交流明确你搭建服务器的目的——是为了研究游戏机制、测试角色强度、与朋友进行自定义玩法。不要用于任何商业用途也不要传播任何破坏游戏平衡的极端修改。合规使用资源Grasscutter-resources中的游戏资源版权属于游戏开发商。请勿将这些资源用于任何其他项目或商业用途。搭建并运行一个属于自己的《原神》私服并将其成功联机是一项非常有成就感的工程。它不仅仅是一个游戏工具更是一个学习网络、服务器管理和软件配置的实践项目。从Java环境配置到MongoDB数据库从路由器端口转发到DDNS动态域名每一步都在巩固一个技术爱好者的基本功。当你和朋友最终在你亲手搭建的世界里相遇、冒险时那种感觉和单纯的玩游戏是完全不同的。这整个过程我个人的体会是耐心和仔细阅读日志是关键大部分错误都能在控制台输出的信息中找到线索。最后请务必负责任地使用这项技术让它成为创造快乐和学习的工具而不是麻烦的源头。