Frp使用教程

本文最后更新于:2022年5月4日 晚上

frp是什么?

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

由于ipv4地址有限,并不是所有家庭用户都能分配到一个公网的ipv4地址,即使有一个公网地址,仍然无法使用像80\443这类的端口。这时我们就可以考虑使用frp。

frp由两部分组成,frps(服务端) 和 frpc(客户端).frps部署在一个有公网ip的服务器上,frpc部署在没有公网的服务器上。当用户以特定端口访问frps时,frps则会将接受到的请求转发到frpc,再由frpc进行访问。这样我们就实现了在没有公网的服务器上也能接受到外网的访问请求。

安装

在frp官方的github仓库下载适合的版本,解压到服务器和客户端上,每个版本都同时包含了服务端和客户端。下载地址

服务端的安装

在服务端上打开我们解压后的文件夹,找到frps.ini文件进行编辑(文件名随意,因为在启动frps的时候会指定配置文件)

1
2
3
4
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080

该配置由三行组成,第一行为告诉frps下面是配置
第二行我们开了一个端口’7000’,这个端口用于与frpc客户端进行通讯
第三行我们开了一个端口‘8080’,这个端口用于接受用户发送的http/https请求

1
2
# 命令行启动服务端
./frps -c ./frps.ini

客户端的安装

同样打开解压后的文件夹,我们打开文件夹里的frpc.ini文件,这里同样也是可以随意取名的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com

[web2]
type = http
local_port = 8080
custom_domains = www.yourdomain2.com

在frpc配置文件里我们分为3大部分,第一是common,和frps的配置一样是特定名称.第二和第三是web和web2,这里我们可以随意取名
首先我们在common里配置了frps的地址和通讯端口.这部分配置用于和服务端的连接

其次在web和web2中,我们都指定了三个配置. type, local_port 以及 custom_domains.
type配置代表连接的类型,如tcp, udp, http.
local_port和domains代表,当一个用户访问domains的时候,frp会将指定的domain解析到制定的port. 比如这里我们访问 www.yourdomain.com ,frps就会转发请求到frpc的80端口,
如果访问的是 www.yourdomain2.com , frps就会转发请求到frpc的8080端口。当然,前提是你需要把这两个域名都解析到frps所在的服务器。

1
2
# 命令行启动客户端
./frpc -c ./frpc.ini

其他

到这里,我们基本完成了frp的简单配置。但是不知道你们是否发现了一个问题,在上面的配置中,我们并没有对frp的通讯进行一个验证。此时如果frps和frpc的连接断开了,在断开的时候被他人用他们的frpc连接到我们的frps,那么所有原本打算访问我们的frps就会全部转发到他人的frpc。这将会造成一个巨大的隐患。

当然,frp同样有对应的解决方法,那就是身份认证.
身份认证的配置也很简单,我们只需要同时在frps和frpc的配置文件的’common’中加一行(token的值随意,但是一定要确保两端的值一样)

1
token = asjkdjalk

这样每次frpc连接frps的时候,都会进行一个身份验证,只有验证通过后才会真正的连接,这样就避免了安全问题的发生

官方文档