现在Grasscutter
服务器也出来这么久了,是时候跟大家说一说服务器怎么开放端口映射连接了。
重要提示!Grasscutter服务器仅供学习与研究,如果您喜欢GenshinimpactGame,请支持正版!
很多人都说开服需要使用ZeroTier
或者RedminLan
这样的VPN组网软件。实际上没有必要。我们完全可以直接使用端口映射软件进行开服。
先来了解一下服务端与客户端的通信流程。
通信流程
客户端与服务端通信示意图
服务端开启后,会先后分别开放两个端口。一个是TCP
端口,一个是UDP
端口。该游戏的主要通信基于KCP
协议进行。而KCP
的底层是UDP
,所以开放的是UDP
端口。TCP
端口用于登录分发。用户首先通过TCP
端口连接服务器并登录(这个TCP
端口也就是我们常说的dispatch
端口),然后服务端返回服务器地区(region
)列表给客户端。如果列表中只有一个服务器,那么客户端将会直接进入该服务器,而不是显示服务器选择列表。也就是说,要想要显示服务器列表,服务端的配置文件中dispatch
配置必须包含多个region
配置。
这里有一点需要辨析。
游戏服务器UDP
端口地址(这个UDP
端口也就是我们常说的Game
端口)是由客户端与服务端的TCP
协议dispatch
交换信息得到的。所以说,客户端拿到服务端给的Game
端口地址后会直接尝试与该地址进行通信。也就是说,如果想在非公网条件下开服,服务器配置文件中的Game
端口地址配置必须配置为公网能够直接访问的地址才能保证客户端不会抛出4206
错误。
按照这个原理,我们只需要设置两条映射就可以让客户端与服务端顺利的通信了。一条为TCP
协议,用作登录分发;另一条为UDP
协议,用于游戏进行时的通信。
配置服务端
由于HTTPS
协议配置起来较为繁杂,我们此处选择采用HTTP
协议进行通信。
打开config
文件配置服务端,我们先关闭SSL
,让服务端使用HTTP
模式。修改这段代码:
1 | "encryption": { |
改为这样:
1 | "encryption": { |
接着修改开服IP地址。改这两个地方:
1 | "http": { |
bindPort
为服务端TCP端口号,accessAddress
为服务器dispatch
开服IP地址。一般情况我们不会使用443
作为dispatch
端口号。
1 | "game": { |
bindPort
为服务端UDP端口号,accessAddress
为服务器Game
开服IP地址。一般情况我们不会使用22102
作为Game
端口号。
将开服IP改为服务器的局域网IP。dispatch
端口号可以自定义。Game
端口号将由端口映射软件分配到的公网端口号决定。具体如何获取局域网IP地址,可以参考我的另一篇文章:TP-LINK普联路由器一个设置解决父级局域网与子级局域网设备互访问题 | 慕·露·雨 (dansmartcloud.github.io)
端口映射配置
笔者推荐的端口映射软件是路由侠,这是笔者认为目前比较稳定的免费国内端口映射。附上官网地址:路由侠-局域网变公网 (luyouxia.com)
打开路由侠,注册登录,点击内网映射,点击右下角添加映射。
原生端口,直接点击开始创建。
按照图示分别更改设置。
创建TCP
登录分发映射
创建UDP
游戏KCP
通信映射
UDP
内网端口先随便填的原因是需要改为一会路由侠给的公网端口。
创建完成,打开映射列表。
公网地址一栏最后面的数字即为分配到的公网端口号。
选中刚刚创建的UDP
映射,记住分配的公网端口号,点击左下角的编辑。
将内网端口号改为和公网端口号一致。
同样的,按照之前的方法,服务端配置文件也需要更改。比如,路由侠的公网UDP
端口映射地址为:http://admin.example.com:55625
,那么配置文件就应当这样改:
1 | "game": { |
值得注意的是,路由侠UDP
端口内网地址无需更改,保持局域网IP地址即可。
至此,全部配置已经完成。在客户端的服务器连接地址输入路由侠提供的TCP
公网地址即可正常连接!
好啦,就说这么多,拜拜┏(^0^)┛