搭建FRP高性能反向代理

首先说说什么是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 文件,

[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 文件:

[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 
#本地要访问的端口

启动 frpc的方式:

./frpc -c ./frpc.ini

如果提示无权限运行,请先给权限之后再启动;

sudo chmod 775 frpc frpc.ini

或者

sudo chmod 777 frpc frpc.ini

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

xtcp的frpc配置如下

[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的普通使用方法,该方法适用于大多用户,如果您觉得 本篇文章对你有帮助,
欢迎给予我们一定的捐助来维持项目的长期发展,谢谢。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇