frp(快速反向代理)介绍与使用

简介

Frp (Fast reverse proxy)是一种基于多用户tcp/udp端口映射软件,可以帮助用户轻松穿越防火墙,远程连接内网服务器或联网设备。

frp 采用go语言开发。更多的人使用 frp 是为了进行反向代理,满足通过公网服务器访问处于内网的服务,如访问内网web服务,远程ssh内网服务器,远程控制内网NAS等,实现类似花生壳、ngrok等功能。

工作原理

frp 主要由客户端(frpc)和服务端(frps)组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。隐藏用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

1、 客户端向Frp服务器发起连接,Frp为客户端分配一对密钥(ID和密钥),用于服务器和客户端之间加密通信,并预分配一个随机映射端口号;

2、 客户端使用分配的端口号和密钥向Frp服务器注册,同时告知需要反向映射那些本地服务;

3、 客户端收到注册成功消息后,Frp服务器主动向客户端发送连接,客户端建立加密的数据通道,从此客户端和Frp服务器之间形成了安全的数据通道;

4、 当外部主机向Frp服务器指定端口发起连接时,Frp服务器将请求转发到内网,客户端收到Frp服务器的内部连接后,会将外部主机的请求转发到服务器进程上;

5、 服务器受到客户端的转发后对外部主机的请求做出反应,并将结果发回给客户端;

6、 客户端收到结果后,将结果通过加密的数据通道发回给Frp服务器,Frp服务器根据请求映射将结果发回给发出请求的外部主机。

以上是典型的Frp反向代理工作原理。Frp有效构建了一个可靠的反向代理系统,可以很容易地对外部主机提供安全可靠的服务。

官方架构图:

VPN与FRP

下面简单画了下VPN与FRP工作方式的区别:

实践操作

以上面右图为拓扑进行操作,其中相关几个节点信息:

节点名称 IP地址(打码) 使用程序
FRP服务端 公:47.*.*.* frps
FRP客户端 公:218.*.*.*
内:192.168.2.*
frpc、具体服务
用户 公:183.*.*.* 连接工具

首先,服务端安装:

下载官方最新程序,编辑配置文件运行即可:

wget https://github.com/fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz
tar zxf frp_0.47.0_linux_amd64.tar.gz -C /usr/local/
mv /usr/local/frp_0.47.0_linux_amd64/ /usr/local/frp
cd /usr/local/frp/
vim frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
token = ba1f2511fc30423bdbb183fe33f3dd0f
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

Tips:同目录下,也有全配置示例文件。

创建服务,运行:

vim /usr/lib/systemd/system/frps.service
[Unit]
Description=FRP Server Daemon

[Service]
Type=simple
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart=always
RestartSec=2s
User=nobody
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target
systemctl enable frps
systemctl start frps
systemctl status frps
netstat -nlput | grep frp

通过查看仪表盘7500端口,可以得到服务端运行状态:

发表评论

error: Content is protected !!