一、前言

疫情在家的合作开发属实不方便,不在同一局域网下,前后端交互变得异常困难。由于公网IPv4地址的稀缺,现在三大运营商分配给我们拨号后的IP地址都是内网的了(我家是长沙联通,在宽带账号名后面加上@changsha能获取到公网IP,其他用户可以咨询自己的运营商看看能不能整个公网IP)。那么我们可以不可以利用自己的服务器作为中间商,A想连接B的端口,B主动连接到服务器建立好隧道,然后A连接服务器后通过隧道连接到B呢,答案是可以的。现在流行的内网穿透软件有Ngrokfrp,前者低版本是开源的,新版是闭源的;后者是国人的作品非常之好用,部署也很简单。那有同学问了,为啥不用向日葵啥的组建局域网呢,一个是收费,二个是如果我想穿透一个Web服务,向日葵是做不到的。再说了,有自己的服务器不好好利用不是浪费🐴。

二、frps的部署

先去它的 GitHub上根据自己的系统架构下载最新的版本,然后解压。编辑frps.ini如下配置

1
2
3
4
5
[common]
bind_port = 7000
vhost_http_port = 6088
authentication_method = token
token = your_token_here

第一个端口是主要的端口,就是我们的frpc客户端通过这个端口连接到服务端的。第二个端口是HTTP服务的端口,专门用来映射客户端的HTTP服务。这些端口都可以自己随意设定。

配置好之后执行frps -c frps.ini即可运行frps服务器了。

三、客户端的连接

客户端frpc.ini如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6100

[web]
type = http
local_port = 8080
custom_domains = web.frp.looyeagee.cn

[common]
server_addr = looyeagee.cn
server_port = 7000
token = your_token_here

然后执行frpc -c frpc.ini就可以运行frpc客户端了。做好解析后就可以让别人访问web.frp.looyeagee.cn:6088来访问本机8080端口的Web服务了;也可以通过6100端口访问到本机的SSH服务了。

四、其他设置

这样还是没有很方便,因为每次还要配置域名的解析。所以我们可以做一个泛解析A记录。主机记录写上*.frp即可。这样就很方便啦,现在还有一个安全的问题,目前提供的是HTTP服务,虽然说frp提供了HTTPS服务,但是我使用了宝塔面板配置了其他网站,443端口被占用了。每次加上端口号访问真的不爽,所以我是这样做的:在宝塔新建一个网站,加上*.frp.looyeagee.cn这个通配域名,然后设置反向代理到127.0.0.1:6088即可,再开启强制HTTPS。这样我们访问HTTP就会自动重定向到HTTPS啦。

图1:宝塔配置截图