目录
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
一、简介
FRP(Fast Reverse Proxy)是一种高性能的反向代理应用,主要用于内网穿透。它允许用户在无法直接访问的内网环境中,将内网服务安全地暴露到公网上,方便远程访问。
一种内网穿透工具, 使位于内网的服务器或设备可以通过互联网被访问, 支持 TCP、UDP、HTTP、HTTPS 等多种协议 另外一种方式是通过 花生壳, 申请一个IP 然后安装花生壳的frp客户端, 配置对应的参数。
本文介绍了FRP(Fast Reverse Proxy)配置的详细关键步骤,包括SSH和HTTP转发设置以及Token配置。SSH转发方面,用户需分别在服务端和客户端的配置文件中设置相应的端口,以便实现安全的远程访问。HTTP转发则涉及在服务端frps.ini
中配置本地HTTP服务的转发规则,同时在客户端frpc.ini
中指明服务端地址和端口。为确保连接的安全性,建议使用Token配置,只有携带正确Token的连接才能通过FRP服务。这些配置能够有效提升内网服务的远程访问能力和系统安全性。
二、FRP的基本组成
FRP主要包括两个部分:
- FRP服务器(frps):部署在公共网络的服务器上,负责转发连接请求。
- FRP客户端(frpc):部署在内网中的机器上,连接到FRP服务器,并将内网服务的流量转发到服务器。
三、常见用途
- 远程访问内网服务:如通过公网访问内网中的Web应用、SSH、FTP等服务。
- IoT设备管理:远程管理家中的智能设备。
- 调试和开发:开发者可以通过FRP轻松地进行端口映射,方便外部团队测试和调试。
四、工作原理
- 客户端连接服务器:FRP客户端启动后,会主动连接到FRP服务器。
- 建立隧道:客户端向服务器注册本地服务端口,并建立一个持久的TCP连接。
- 转发流量:当外部用户访问FRP服务器的指定端口时,服务器会将流量转发到相应的客户端,从而让外部用户能够访问内网服务。
五、部署
5.1准备
frpc
frp客户端
frps
frp服务端1. 部署frp服务端(需要是拥有公网IP的服务器)
2. 部署frp客户端(个人PC, 内网主机等...)
3. 双方建立通信连接
文档 | frp frp文档
Releases · fatedier/frp frp的下载
根据自己的架构进行选择
上传
rz
#或者各种方式,将下载的frp工具进行上传
tar zxvf frp_0.61.0_linux_amd64.tar.gz #解压
cd frp_0.61.0_linux_amd64 #进入到frp目录下
5.2 目录介绍
frpc //客户端程序
frpc_full.ini //客户端完整配置文件
frpc.ini //客户端简易配置文件
frps //服务端程序
frps_full.ini //服务端完整配置文件
frps.ini //服务端简易配置文件
5.3 配置客户端和服务端
5.3.1 ssh转发
ssh转发的作用是将客户端本地运行的 SSH 服务(监听在本地的
22
端口)通过 FRP 进行外部暴露,用户可以通过连接到服务端的6000
端口来访问这个 SSH 服务。
服务端修改配置
通过编辑vim frps.ini服务器配置。
bindPort = 7000 # FRP 服务端正在 7000 端口上监听连接请求
客户端修改配置
serverAddr = "x.x.x.x" #x.x.x.x 应替换为实际的服务端 IP 地址或域名
serverPort = 7000 #这是客户端连接到 FRP 服务端使用的端口,需与服务端的 bindPort 配置一致
[[proxies]]
name = "ssh" #这是代理的名称,通常是用来标识或描述此代理的功能
type = "tcp" #表示此代理是基于 TCP 的连接
localIP = "127.0.0.1" #这个配置项指定了本地服务的 IP 地址。在这个例子中,127.0.0.1 表示该服务是在客户端本地计算机上运行的。
localPort = 22 #这是本地服务实际监听的端口,意味着客户端本地的 SSH 服务在这个端口上接收连接。
remotePort = 6000
#这是 FRP 服务端在外网暴露给用户的端口。通过这个配置,当外部用户连接到 FRP 服务端的 6000 端口时,FRP 会将连接转发到客户端的 127.0.0.1:22(即本地的 SSH 服务)。
注:配置时将注释去掉。
ssh -o Port=6000 test@x.x.x.x #配置完成后,使用命令进行ssh连接,6000为frp的ssh映射端口。
5.3.2 http转发
http转发可以让 FRP 客户端将两个不同的本地服务 (运行在不同端口上) 通过指定的域名向外界暴露。这样,从 Internet 上的用户可以通过访问
www.yumig1.com
来访问本地的 80 端口服务,通过www.yuming2.com
来访问本地的 8080 端口服务。
通过编辑vim frps.ini服务端配置。
bindPort = 7000 #这个参数指定了 FRP 服务端监听的端口,意味着 FRP 服务端在 7000 端口上等待客户端的连接。
vhostHTTPPort = 8080
#这个参数用于指定虚拟主机的 HTTP 端口。当你配置了 Web 代理时,这个端口将用于接收 HTTP 请求。在这个例子中,vhostHTTPPort = 8080 表示 FRP 服务端会在 8080 端口上监听 HTTP 请求。
客户端frpc.ini修改配置
serverAddr = "x.x.x.x" #这个参数设置了 FRP 服务端的地址,你需要将 "x.x.x.x" 替换为实际的 FRP 服务端的 IP 地址(或域名),客户端将通过这个地址连接到 FRP 服务端。
serverPort = 7000 #这个参数指定了 FRP 服务端监听的端口,这个端口与服务端配置中的 bindPort 相对应。客户端会通过这个端口与服务端建立连接。
[[proxies]]
name = "web" #这个参数定义了代理的名称,web 是这个代理的标识,用于在 FRP 服务端和客户端之间区分不同的代理。
type = "http" #指定了代理的类型,在此例中为 HTTP 代理
localPort = 80 #这个参数指的是本地服务运行的端口。在这个例子中,FRP 客户端会将请求转发到本地的 80 端口(通常是网站的默认 HTTP 端口)
customDomains = ["www.yuming1.com"] #这个参数定义了与该代理关联的自定义域名。当通过这个域名访问时,FRP 将会把请求转发到指定的本地服务。
[[proxies]]
name = "web2"
type = "http"
localPort = 8080
customDomains = ["www.yuming2.com"]
5.3.3 Token配置
服务端frps.ini 进行添加配置
bindPort = 7000 #这行表示服务将在端口7000上监听传入的连接
auth.token = "ok" #设置了一个认证令牌(token),值为“ok”。这个令牌通常用于验证客户端的身份,以确保只有持有正确令牌的客户端能够访问服务.
auth.method = "token" #指明了使用“token”作为认证的方式
客户端frpc.ini配置
auth.token = "ok" 客户端将使用一个值为“ok”的认证令牌来进行身份验证
六、启动
./frps -c ./frps.ini #启动服务端
./frpc -c ./frpc.ini #启动客户端
注:frp应先启动服务端(frps),再启动客户端(frpc),这是因为客户端需要连接到已经在运行的服务端,以便进行隧道配置和建立连接。