俗话说得好:巧妇难为无米之炊。不想花大价钱租服务器又没有公网IP要怎么开服联机游戏呢?所以不妨利用一下互联网上的一些Frp服务来间接的获得公网IP。

网上有很多免费/付费的Frp服务提供商,而且很多也提供了文档参考,这里以SakuraFrp为例(不是打广告哈)。

常见的用法是下载网站提供的专用客户端,这样用也可以但不是很灵活。放路由器上倒是很合适,简单配置一下可以将局域网里任意设备的任意端口映射到互联网。

简述Frp原理

我们都知道NAT后的设备可以主动向外访问,但是从外界主动向内访问却很困难,Frp的作用就是让NAT下的设备可以响应外界主动发起的连接。

Frp由客户端和服务端组成,客户端主动向服务器发起连接,建立好传输数据的隧道,待服务器收到外界的访问后就会通过这个隧道将收到的数据发送到客户端,最后客户端再将数据发给其他程序的端口,回传的数据原路返回即可。

缺点很明显,它需要一个服务器支撑。优点是可以稳定地穿透NAT。

实操

在frp网站上创建隧道

SakuraFrp的创建隧道参考下图,入口在“服务”→“隧道列表”里面。

先点击“+ 创建隧道”,按自己喜好选择一个节点(如果不知道选哪一个就选物理位置近的)。

创建隧道时根据需要选择隧道类型,比如我的世界的联机端口要选择TCP隧道,求生之路的服务器端口要选UDP隧道,如果不知道应该开哪一种可以和下图中一样在批量创建选项中勾选“创建 同远程端口UDP隧道”。

创建隧道

填写好隧道名,本地端口无所谓,随意选一个就行。其他的不用填,直接创建。

查看配置文件
创建好后点击“配置文件”按钮。

查看配置文件内容
先选择一下frpc版本,我这里选的最新版。然后留意一下userauth.tokenserverAddrserverPortnametyperemotePort七个字段,后面要用。

在OpenWRT上安装frp客户端

frp客户端在OpenWRT软件包里要搜luci-app-frpc,有些固件可能没有,也要注意不要装错了,frp服务端的名字和客户端很像(luci-app-frps)。

正常情况下在软件包里点击安装就可以了,如果软件源中没有也可以去有些第三方软件源手动下载安装包,除了luci-app-frpc以外还要装frpc,手动安装时不要忘记下。

配置OpenWRT frp客户端

配置也不复杂,先到常规设置填写几个设置:服务器地址对应serverAddr、服务器端口对应serverPort、令牌对应auth.token、用户对应user,将对应内容复制到对应输入框里即可,不要复制双引号。接下来点“保存并应用”。

然后接着往下翻,找到代理设置,把默认的删了,新建一个。

代理名称对应name、代理类型对应type、远程端口对应remotePort,这里三个字段要注意不要填错了,不然会报找不到隧道的错误。
配置frpc
本地IP和本地端口就按照自己的实际需要填写,比如局域网里10.0.0.250的25565端口开了一个我的世界的服务器,那么本地IP和端口就要填10.0.0.250和25565,如果是OpenWRT本身运行的服务(比如之前自建UsbEAm LAN Party服务器)ip填127.0.0.1就行。

代理类型要和自己的开服务要能对的上,比如我的世界服务器监听TCP端口你就需要用TCP类型的隧道。TCP和UDP的隧道是分开设置的,如果你两个都需要(或者是你不清楚自己需要哪一种)就再添加一个UDP隧道。

它可以用来做什么?

上面已经提到了,最常见的用法是实现低成本游戏联机。另外也可以异地组网比如WireGuard、OpenVPN等,或者是Shadowsock,Vless encryption等代理服务端。

注意事项

通过frp映射的端口是直接开放到公网的也没有防火墙保护,在映射一些服务出去时记得考虑一下安全问题,尤其是一些非静态的网站,游戏服务器,不然轻则受到网络攻击服务停摆,重则黑客渗入留下病毒后门。

另外,映射代理服务器或其他公开服务时也要注意frp提供商的服务条款,谨防封号。