FRP(Fast Reverse Proxy) 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器) ←→ 内网 的连接,让内网里的设备也可以被公网访问到。GitHub 地址:https://github.com/fatedier/frp

frp有客户端和服务端,客户端放在本地电脑或服务器,服务端放在云服务器。

服务器安装

从github页面下载FRP软件包:https://github.com/fatedier/frp/releases

下载

下载对应的版本,如果不清楚处理器架构,可在终端输入arch命令来查看。

1
2
3
4
5
6
7
# 进入服务器用wget下载
cd /usr/local
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -zxvf frp_0.46.0_linux_amd64.tar.gz # 解压
rm frp_0.61.0_linux_amd64.tar.gz # 删除压缩包
cd frp_0.61.0_linux_amd64
rm -rf frpc* #删除客户端配置

软件包中有客户端和服务端两种程序,以frps和frpc区分。frps即为frp server,frpc即为frp client。

配置

配置文件 frps.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# web页面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "dong"
webServer.password = "ren41021213"

# 服务器监听端口
bindPort = 7000
# 网穿透http端口,自己设置, 避免使用80
vhostHTTPPort = 8088
# 网穿透https端口,自己设置, 避免使用443
vhostHTTPSPort = 8099

# 设置令牌,避免外泄,防止滥用
auth.token = "987654321"

放行相应的端口,我这里是7000,8088,8099,7500。端口自己设置不必和我的一样

启动

1
./frps -c ./frps.toml

启动后台运行

1
nohup ./frps -c ./frps.toml &

关闭服务

1
2
3
4
5
# 首先找到frp服务进程
ps -aux|grep frp| grep -v grep
root 10115 0.0 0.6 720204 25940 pts/0 Sl 19:49 0:00 ./frps -c ./frps.toml
# 删除该进程
kill 10115

使用url访问http://f.lurenx.cn:7500,http://123.249.103.139:7500/ 。输入用户名和密码进入控制面板,查看服务信息。

客户端安装

下载合适的安装包, frp_0.61.0_android_arm64.tar.gz

配置

和服务端类似下载后解压,放到合适的地方。删除frps相关的文件,配置frpc.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# web页面
webServer.addr = "127.0.0.1"
webServer.port = 7400

#服务端地址
serverAddr = "39.103.235.25"
#服务端监听端口,对应服务器bindPort
serverPort = 7000
auth.token = "987654321"

[[proxies]]
name = "web"
type = "http"
# 本地应用端口名称
localPort = 48080
#自定义域名,需为此服务准备一个域名,并解析指向frp服务器地址
# 此时 localhost:48080 指向 http://wl.05j.cn:8088
customDomains = ["wl.05j.cn"]



[[proxies]]
name = "web2"
type = "http"
localPort = 8080
customDomains = ["frp.05j.cn"]

启动

1
./frpc -c ./frpc.toml

测试

本地启动一个测试springboot 服务,端口48080的项目。使用url访问您的本地Web服务http://wl.05j.cn:8088

常见错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
错误1(frps): Create vhost http listener error, listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
解决方法:端口被其他应用程序占用,关闭其他应用程序或改用其他端口。

错误2(frpc): [rdp] start error: port already used
解决方法:远程端口已被使用,改用其他端口。

错误3(frpc): [web01] start error: proxy name [web01] is already in use
解决方法:代理名称[web01]已被使用,检查并更换一个代理名称。

错误4(frpc): [web01] start error: router config conflict
解决方法:[web01]指定的域名(custom_domains)已被使用,检查并更换其他域名。

错误5(frpc): work connection closed, EOF
解决方法:连不上服务器端,检查服务器端运行是否正常,服务器端恢复后客户端会自动恢复连接。