近日游侠对战平台转为付费模式让低成本流畅联机的路又少了一条,鉴于蒲公英免费使用承载能力不高,而SakuraFrp用下来体验上也不尽如人意,于是也就有了用手上已有的云服务器自行搭建Frp的想法
一.准备
1. Frp
Frp是一个用于内网穿透的快速反向代理工具,也是本篇最主要的工具.
可以直接前往GitHub Release页面下载对应版本
对于Linux系统亦可以使用wget命令进行下载
wget https://github.com/fatedier/frp/releases/download/XXXXX/frp_XXXXX_linux_amd64.tar.gz
我的服务器系统是CentOS,故下载 frp_0.46.1_Linux_amd64.tar.gz 这项作为服务端
还要为我们自己的电脑下载客户端项,依据自己的系统下载
我的是64位的Windows,所以下载 frp_0.46.1_windows_amd64.zip 这项作为客户端即可
如果服务器下载过慢可以在本地使用Watt ToolKit,Dev-Sidecar或者浏览器Github加速插件进行加速后下载再上传至服务器.
2. ECS云服务器
各家的云服务器只要带宽大一些都是可以的,这里用我的腾讯云学生机做一下演示.这一台2H2G4M对于搭建一个小的内网穿透节点是足够了,注意服务器要带有公网IP.进入管理页面以后记得要重置密码来设置一个新密码用于登录,如果已经完成过这一步可以忽略.
首先要为机器放行端口,建议这里一条一条的配置,需要配置两个端口,一个用于自己的电脑连接服务器,另一个则用于其他人的电脑连接自己的电脑.
直接按照默认配置进行添加即可,需要注意的是协议要选择TCP,策略选择允许,然后最好写一个好记的备注提醒自己免得时间久了忘了这个端口是拿来做什么的.
二.服务端安装
本地文件上传至服务器可以使用FTP软件进行上传,也可以像我一样安装宝塔面板,这样可以进行可视化操作,关于宝塔面板的安装参见https://www.bt.cn/new/download.html.
首先将我们下载好的服务器端进行解压,这里我放到Frp文件夹以便后续的查找,解压以后的文件结构如图所示:
控制台可以cd到压缩包所在文件夹使用命令进行解压和移动
tar -zxvf frp_XXXXXX_linux_amd64.tar.gz
mv frp_XXXXXX_linux_amd64 frp
接下来我们要对配置文件进行修改,对于服务器端,应该修改frps.ini这个文件,配置如下:
[common]
bind_addr=0.0.0.0
;服务器公网IP,保持默认即可
bind_port = 7000
;该项填写你在第一步中开放的端口,此端口用于自己电脑和服务器的连接
auto_token= XXXXX
;服务器验证密钥
dashboard_port =
;该项如果不明白用途请不要填写,否则可能导致无法连接
dashboard_user = admin
;仪表盘账号
dashboard_pwd = XXXXXXX
;仪表盘密码
完成之后记得保存再退出.
接下来为了能够正常访问,我们需要给该文件夹进行提权操作
选中文件夹后点击右侧的"权限",数字栏改为777或全选所有项,确定提交即可
接下来启动Frp
在控制台切换到相应文件夹使用命令:
./frps -c ./frps.ini
出现以下提示则代表成功启动
为了在我们控制台退出以后让其在后台运行,我们先Ctrl+C退出当前进程,再在原先命令前加上nohup即可:
nohup ./frps -c ./frps.ini
然后Frp就会进入后台运行,其控制台输出可以在nohup.out文件中进行查看
三.客户端安装
接下来进行客户端的安装:
在进行其它操作之前,确保电脑上已经安装了Microsoft .NET Framework 4及以上版本
关于.NET的下载和安装请参阅https://dotnet.microsoft.com/zh-cn/
同样,先把下载下来的客户端压缩包解压,建议文件目录中尽量不要出现中文字符以免出现不必要的错误.
接下来使用文本编辑器打开frpc.ini,注意不要使用系统自带的记事本打开,记事本会强制使用ANSI编码,这将会导致文件内容乱码或者加载配置文件时出错.可以使用Notepad++或者VisualStudioCode以及其它的IDE都是可行的选择,文件配置修改如下:
[common]
server_addr = XX.XX.XX.XX
;填写服务器公网IP
server_port = 7000
;服务器配置文件中填写的端口
auto_token= XXXXXXXX
;服务器验证密钥
[GameFrpService]
;隧道名称,随意填写,多用途需要创建多个隧道
type = tcp
;协议选TCP即可
local_ip = 127.0.0.1
;本地IP,使用默认地址:127.0.0.1即可
local_port = 62594
remote_port = 62594
;两项均填写联机服务器需要开放的端口
接下来打开PowerShell启动客户端
直接在文件夹上方地址栏输入powershell后回车即可在该文件夹处打开
然后运行命令:
./frpc -c ./frpc.ini
运行后看到如下提示,则说明成功启动且与服务器连接完毕.
若要使该命令后台运行与开机自启,可用https://github.com/winsw/winsw
至此,服务端与客户端的配置均已完成,接下来进行多人联机游戏只需要通过公网IP+联机服务器设置端口进行连接即可,类似如下:
123.123.123.123:12345
四.其它
用于搭建Frp的服务器当然是带宽越大越好,在最理想的情况下,以我Minecraft服务器搭建的经验为参照,通常而言每名玩家1M是最佳的,能够保证最好的体验,但大多数时候这1M其实是吃不满的,例如我这带宽4M的机器承载6-8名玩家也是较为合理的,极限状态甚至可以承载12名玩家,只不过体验就不会特别好了.
这里的带宽指的是上传带宽,下载带宽对于玩家承载量通常影响不大.
关于Minecraft联机
Minecraft使用外网映射进行联机要注意只要有一个玩家非正版登录主机端都必须使用Mod
Lan Server Properties(1.12+) 或 Server.Properties for LAN(1.7 - 1.12)
前者在游戏内开启局域网联机时将在线模式设置为关,后者在server.properties中将online-mode设置为false.
完成设置后即可通过此方法正常连接服务器.
关于Terraria联机
Terraria联机时注意在启动服务器,即使用start-server.bat启动服务端的时候,在启动配置中的"Server port (press enter for 7777)"这一项要保证和Frp客户端配置文件中local_port / remote_port里的值相同,其次"Automatically forward port? (y/n)"这一项要选"y".
如果是使用tModLoader,即使用start-tModLoaderServer.bat启动服务端的时候,在启动配置中的"Use steam server (y/n)"这一项要选"n".
启动后连接服务器时请把域名/公网IP和端口分开填,不可用IP+端口,填入的端口要与Frp客户端配置文件中local_port / remote_port里的值相同,如果用域名连接服务器也需要填入对应端口.
Extra.绑定域名到服务器实现端口隐藏
每次要输入一长串数字不用想都知道很麻烦吧,如果恰好有一个域名,那么就可以通过绑定域名实现通过域名进入服务器了.值得注意的是,虽然用的是国内运营商的服务器,如果域名没有备案只是用作联机使用的话是不需要进行备案的,而如果要开展网站服务就需要进行备案了.
1.解析域名至公网IP
这里要添加一个A记录,这里用GoDaddy进行演示.
"姓名"指的是二级域名的前缀名,这里假设我有一个域名是play.com,那么这样解析以后指定的IP就会指向game.play.com;
"值"填入服务器的公网IP即可,注意不要后加端口;
"TTL"通常按照默认值即可,不用管它.
现在就完成了A记录的添加:
2.解析域名至对应端口
现在要添加一个SRV记录,用于将二级域名绑定到IP+端口.
"服务"填下划线加上任意值,建议填个易于辨认的值;
"协议"填入_tcp;
"姓名"注意填入你想使用的二级域名后缀,这一项才是最终使用的二级域名前缀,与A解析中的二级域名前缀无关,当然也可以相同;
"值"填A解析中绑定的二级域名前缀+域名,例如game.play.com;
"优先级"通常填5;
"粗细"通常填0;
"端口"填入你在Frp客户端配置文件中local_port / remote_port里的值,也就是联机服务器中设置的需要监听的端口号;
"TTL"保持默认即可.
然后等待5-15分钟(也可能更快或更慢),在Terminal中试着Ping一下这个二级域名
如果像这样显示就说明能够ping通,然后就可以通过这个二级域名和朋友愉快联机了.
参考文章:
https://segmentfault.com/a/1190000023029590
https://blog.csdn.net/baotangyin/article/details/104967795
https://gofrp.org/docs/