Contents

搭建FRP高性能反向代理

Contents

首先说说什么是frp?为什么使用 frp ? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网:通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括: 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。 代理组间的负载均衡。 端口复用,多个服务通过同一个服务端端口暴露。 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。 服务端和客户端 UI 页面。 使用示例: 根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。 下载地址:Release 将 frps 及 frps.ini 放到具有公网 IP 的机器上。 将 frpc 及 frpc.ini 放到处于内网环境的机器上。 修改 frps.ini 文件,

 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
28
29
30
31
[common]
bind_addr = 0.0.0.0
#服务器IP,0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6
bind_port = 6666
#通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
bind_udp_port = 6667
#UDP通讯端口,用于点对点内网穿透
kcp_bind_port = 6668
#用于KCP协议UDP通讯端口,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。设置后frpc客户端须设置protocol = kcp
vhost_http_port = 80
#http监听端口,注意可能和服务器上其他服务用的80冲突,比如centos有些默认有Apache,可自定义
vhost_https_port = 443
#https监听端口,可自定义
dashboard_port = 6669
#通过浏览器查看 frp 的状态以及代理统计信息展示端口,可自定义
dashboard_user = admin
#信息展示面板用户名
dashboard_pwd = admin
#信息展示面板密码
log_max_days = 30
#最多保存多少天日志
token = test_admin
#特权模式认证密钥
allow_ports = 50000-60000
#端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用
max_pool_count = 100
#每个内网穿透服务限制最大连接池上限,避免大量资源占用,可自定义
authentication_timeout = 0
#frpc 所在机器和 frps 所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验。国外服务器由于时区的不同,时间会相差非常大,这里需要注意同步时间或者设置此值为0
log_file = frps.log
log_level = info

启动 frps的方式: ./frps -c ./frps.ini

如果提示无权限运行,请先给权限之后再启动; sudo chmod 775 frps frps.ini 或者 sudo chmod 777 frps frps.ini

启动之后服务端就已经完成所有配置了,接下来进行客户端配置; 假设 frps 所在服务器的公网 IP 为:66.66.66.66; 如果你的公网IP由域名进行泛解析,也可以填写域名信息,比如域名为:test.com。 修改 frpc.ini 文件:

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
[common]
server_addr = 66.66.66.66
#server_addr 指的是公网ip或者解析公网ip的域名:“www.test.com”。
server_port = 6666
#server_port 指的是frps上设置的端口(必须与frps上端口一样,否则不能通讯)。
token = test_admin

#指的是特权密码,需要与服务端吻合。

#----------------------HTTP/HTTPS----------------------
[web面板HTTP1]
type = http
#通告服务器使用的协议
local_ip = 127.0.0.1
#本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。
local_port = 9090
#本地要访问的端口
custom_domains = admin.test.com
#设置域名,以上域名在外网访问为:http://admin.test.com
#本地访问为:http://127.0.0.1:9090

[web面板HTTPS1]
type = https
#通告服务器使用的协议
local_ip = 192.168.1.1
#本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。
local_port = 9091
#本地要访问的端口
custom_domains = admin.test.com
#设置域名,以上域名在外网访问为:https://admin.test.com
#本地访问为:https://127.0.0.1:9091

#----------------------TCP/STCP----------------------

[ssh_tcp]
type = tcp
#通告服务器使用的协议
local_ip = 127.0.0.1
#本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。
local_port = 22
#本地要访问的端口
remote_port = 11000
#远程访问的端口
#远程访问方式(假设用户名为root):ssh -p11000 root@www.test.com

#想使用STCP协议部署两个frpc客户端,从而实现点对点连接
[ssh_stcp]
type = stcp
#通告服务器使用的协议
sk = 45frsabhjsdcfr3
#验证密钥,在访问端需要配置相同密钥,否则不给与连接。
local_ip = 127.0.0.1
#本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。
local_port = 22
#本地要访问的端口

#------------------------XTCP------------------------
#现阶段不稳定
#想使用XTCP协议部署两个frpc客户端,从而实现点对点连接(好处是传输大文件不走服务器流量,更高速,缺点是不稳定,还有可能连不上)

[test1]
type = xtcp
#通告服务器使用的协议
sk = e3bshakbcuw1vjhq
#验证密钥,在访问端需要配置相同密钥,否则不给与连接。
local_ip = 127.0.0.1
#本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。
local_port = 22 
#本地要访问的端口

以上为客户端部署配置文件的方式,接下来说说想使用XTCP和STCP的方式 上文讲到要使用XTCP和STCP需要部署两个客户端,以上已经布置好一个服务端(S)和一个客户端(A),现在再配置一个可以使用XTCP和STCP协议访问上一客户端的客户端(B)(简单来说就是B客户端通过S服务端访问A客户端)。 xtcp的frpc配置如下

 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
28
29
[ssh_visitor]
type = xtcp
#通告使用的协议
role = visitor
# 告知服务器本机是xtcp的访问者
server_name = test1
# 要访问的 xtcp 代理的名字
sk = e3bshakbcuw1vjhq
#验证密钥,在访问端需要配置相同密钥,否则不给与连接。
bind_addr = 127.0.0.1
# 绑定本地ip用于访问ssh 
bind_port = 6106
# 绑定本地端口用于访问ssh

通过 ssh 访问内网机器,假设用户名为 root:
ssh -oPort=6106 root@127.0.0.1

stcp的frpc配置如下:
[secret_ssh_visitor]
type = stcp
#通告服务器协议为stcp
role = visitor
# stcp 的访问者
server_name = ssh_stcp
# 要访问的 stcp 代理的名字
sk = 45frsabhjsdcfr3
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6990

通过 ssh 访问内网机器,假设用户名为 test: ssh -oPort=6990 test@127.0.0.1

以上为frp的普通使用方法,该方法适用于大多用户,如果您觉得 本篇文章对你有帮助, 欢迎给予我们一定的捐助来维持项目的长期发展,谢谢。