如果你想把家里的电脑当做服务器用,做一个网站或者游戏服务器什么的,肯定会遇到一个问题:由于没有公网IP,而且有家里的路由器把关,导致其他地方的人完全无法连接到服务器。这时候就需要内网穿透和端口映射工具了,这样的工具有很多,我列举常用的几个:

  • 花生壳
  • nat123
  • ngrok

不过这几个工具虽然都算是挺好用的,但是都是收费的,虽然都有免费版,但是免费版功能实在太少,基本上只能绑定一个应用,端口号还是随机的。临时玩玩倒是可以,真正要用的话还是不行。经过一番寻找,最后我锁定了frp这个工具,它的优点就是完全开源免费,自定义配置;缺点是不提供服务,也就是说我们需要自己买个服务器在上面搭建。

下载

frp也是托管在Github上的开源项目,直接到Release页面下载即可,链接如下:

https://github.com/fatedier/frp/releases
开源中国:https://www.oschina.net/p/frp?hmsr=aladdin1e1

下载解压之后是一个文件夹,里面包含了frpc、frps可执行程序,以及它们对应的示例配置文件,前者是客户端程序,后者是服务端程序。运行frp需要同时运行客户端和服务端程序才行。full和min分别是最大和最小配置文件,如果需要参考的话可以打开看看,最大配置文件中列出了frp支持的所有选项。

服务端配置

首先我们看看如何配置frp的服务端。服务端配置比较简单,如果不使用高级功能的话,只需要两三行就可以了。

# frps.ini

[common]

bind_port = 7000 token = 123456

bind_port是服务端与客户端之间通信使用的端口号,默认就可以。token用于验证连接,只有服务端和客户端token相同的时候才能正常访问。如果不使用token,那么所有人都可以直接连接上,所以我建议大家在使用的时候还是把token加上。

配置完毕后就可以启动服务端了,启动命令也很简单:

frps -c frps.ini

一般情况下服务端这么配置就可以了,大部分配置都是在客户端的配置文件中处理。作者这样设计还是挺合理的,将来如果有改动的话,只需要修改客户端配置文件,服务端一般情况下不需要改动。

端口转发

下面来看看客户端配置,frp可以实现很多常用功能,都是在客户端配置文件中完成配置。首先来看看最基本的端口转发配置。

# frpc.ini

[common]

server_addr = x.x.x.x server_port = 7000 token = 123456

[ssh]

type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

首先是common下的配置项,需要和服务端配置文件相同。然后是ssh下的配置,type是连接类型,大部分应用都是tcp协议的,所以这里就写tcp就好;local_ip是本地ip,默认127.0.0.1即可;local_port是要转发的端口号,官方实例中这里是远程转发SSH,所以端口号是22,如果你想做游戏服务器的话,改成对应的端口号即可;remote_port是端口转发之后暴露在外网的端口号。

客户端配置完毕之后,就可以启动了,启动命令类似:

frpc -c frpc.ini

如果你想简单把本地部署的网站开放出去,也可以以这种方式直接将本地80端口转发出去。如果你购买了域名,希望别人通过域名访问本地网站,还可以使用接下来要介绍的,专门的web转发功能。

转发web服务

首先是服务端,需要添加vhost_http_port参数:

# frps.ini

[common]

bind_port = 7000 vhost_http_port = 80

然后是客户端,注意web下的参数,type是协议类型,http或者https,local_port是本地网站的端口号,custom_domains是购买的网站域名,需要注意这个网站域名需要事先在域名服务商那里设置好域名解析才能正常使用。

# frpc.ini

[common]

server_addr = x.x.x.x server_port = 7000

[web]

type = http local_port = 8080 custom_domains = www.yourdomain.com

配置完成后,访问服务器网址http://x.x.x.x即可看到部署在本地http://localhost:8080上的网站。如果需要https的话,只要把vhost_http_port改成vhost_https_port,再把客户端web下type设置为https即可。

仪表盘

frp还支持仪表盘功能,可以从网页查看运行的流量等信息。开启仪表盘需要在服务端进行设置。

# frps.ini

[common]

dashboard_port = 7500 # dashboard 用户名密码,默认都为 admin dashboard_user = admin dashboard_pwd = admin

设置完毕后,在浏览器中访问服务端地址:端口号并输入用户名与密码即可查看仪表盘。

以上就是frp的一些介绍,如果有需要的请查看官方中文文档,详细列出了frp支持的各项功能,还可以参考frpc_full.ini与frps_full.ini,查看完整配置文件支持的选项。文档地址:

https://github.com/fatedier/frp/blob/master/README_zh.md

太阳神三国杀游戏服务器搭建以前我也了解过frp,不过基本没用过。这几天和同学玩三国杀,我突然想到以前经常玩的太阳神三国杀,后来因为没有公网IP,再也没有和同学联机过。有了frp,我就可以让同学连接到我的游戏主机上。服务端配置仍然是非常简单的那几行,就不说了。重点是客户端配置,其实也很简单,太阳神三国杀游戏使用的端口号是9527,所以直接把端口号改为9527即可。然后连接的时候输入服务器IP即可。

[common]
server_addr = xxxx
server_port = 7000
token = xxxxx

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 9527
remote_port = 9527