架设游戏私服——内网穿透frp
适用场景:
拥有一台云服务器服务商提供的拥有公网ip的低配服务器。
拥有一台高配家用机,但是位于动态ip的家庭网络甚至是多级子网络中。
服务器能够架设公网ip的服务端用于玩家访问,但是配置撑不住服务端。
家用机配置足够承受服务端运算,但是没有公网ip用于加入游戏服务端。
frp是一款用于端口映射的开源项目,它的工作本质是:游戏的服务端在家用机的一个端口上运行,而玩家会访问云服务器的这个端口,此时,frp将云服务器的这个端口与家用机的端口连接起来,作为一个中转,使得玩家可以通过云服务器的转发来访问家用机上的服务端。
frp下载地址:https://github.com/fatedier/frp/releases
选择64位windows系统的windows_amd64.zip版本,下载并且解压缩。
可以看到,除了LICENSE
之外,所有的文件都有frps和frpc两者之一的名称。
意思也很简单,s就是服务端server,c就是客户端client
原本的压缩包中所有文件都混在了一起,实际使用时可以按frps和frpc归到两个地方,服务端frps的文件放在有公网ip的云服务器上,而客户端frpc的文件则是放到实际运行游戏服务端的家用机上。
1. 服务端
服务端配置较为简单,只需要编辑frps.ini
文件:
这里的bind_port可以随意设置,它并不是你要映射的端口,而是frp程序本身运行的端口,但是不要和你的游戏服务端抢占端口。
如果你在意安全问题的话,可以查一下相关文档中的sk属性,它是个连接的密钥,需要服务端与客户端的一样才能匹配,内容随便自己写。如果你无所谓安全问题的话,直接不写也行。 本文不涉及加密的安全性问题。
[common]
bind_port = 7000
然后在服务端文件夹中写一个start.sh
脚本方便双击启动【以windows系统为例,如果你用的是linux那就写个.sh
脚本】:
start frps.exe -c ./frps.ini
2. 客户端
客户端配置较为复杂一点,一般来说,游戏服务器通讯使用的是TCP或者UDP协议,以防万一可以把两者都配置一下转发。
举个栗子【不是错别字 】
假如我想在这台电脑上开【Minecraft】, 【Starbound】和【Empyrion-Galactic Survival】三个游戏的服务端,首先我要确认这些游戏服务端运行的端口,查询官方默认端口或者自己配置的端口。
查找发现,【Starbound】的默认开服端口是21025,而【Minecraft】是25565,【Empyrion-Galactic Survival】则更加复杂一些,它要使用30000-30004的所有端口来进行通讯。
再考虑到之前在服务端把frp的运行端口设置为了7000,那么就将frp的客户端frpc.ini
文件配置为:
注:0.0.0.0的位置是填入你的云服务器公网ip,别照抄了。
[common]
server_addr = 0.0.0.0
server_port = 7000
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 21025,25565,30000-30004
remote_port = 21025,25565,30000-30004
use_encryption = false
use_compression = false
[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 21025,25565,30000-30004
remote_port = 21025,25565,30000-30004
use_encryption = false
use_compression = false
local_port是本地端口,remote_port是云服务器的端口,将两者绑定起来。
然后在客户端文件夹中写一个start.sh
脚本方便双击启动【以windows系统为例,如果你用的是linux那就写个.sh
脚本】:
start frpc.exe -c ./frpc.ini
此时你在家用机启动服务端,就可以用云服务器的公网ip进入游戏服务器了~
3. exe消失之谜
如果你在启动脚本或者直接通过命令行运行后,发现程序没有工作,而且exe文件反而神秘消失了,那么十有八九你需要检查一下你电脑上那些无声的杀手——潜行的杀毒软件没错迈克菲我说的就是你这个装机自带的坑货 。
警惕迈克菲或者windows防火墙这种无形之中杀你文件的坑货,建议选用火绒这样安静的小可爱~