FRP 基础使用
FRP 基础使用
很久以前在上内网渗透的时候和学生讲过,FRP 之前也更新了,我也整理一下笔记。
Github 地址:https://github.com/fatedier/frp
官方文档地址:https://gofrp.org/zh-cn/docs/overview/
1 FRP 介绍
frp 是一款高性能的反向代理应用,专注于内网穿透。支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:
- 多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
- TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用:多个服务可以通过同一个服务端端口暴露。
- P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
- 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS / HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
- 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
- 用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
2 FRP 安装与简单使用
2.1 安装
frp 采用 Go 语言编写,支持跨平台,只需下载适用于您平台的二进制文件即可执行,无需额外依赖。
可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件:


2.2 简单使用
在使用前通常需要两台机器,分别作为客户端和服务端。
- 将 frpc 复制到内网服务所在的机器上。
- 将 frps 复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。
[!Note]
这里采用 VMware 虚拟机进行演示:
Kali Linux IP(Client):10.0.0.129
Windows IP(Server):10.0.0.1
编写配置文件,目前支持的文件格式包括 TOML/YAML/JSON,旧的 INI 格式仍然支持,但已经不再推荐。
默认 frps.toml 配置如下:
1 | bindPort = 7000 # 服务端监听客户端连接的端口 |
默认 frpc.toml 配置如下:
1 | 【全局配置】服务端连接信息 |
根据 frpc.toml 的配置来看,Kali 和 Windows 肯定是连不上的,需要将 serverAddr 进行修改:
1 | serverAddr = "10.0.0.1" |
使用以下命令启动服务器:
1 | start /B frps.exe -c frps.toml |

使用以下命令启动客户端:
1 | ./frpc -c ./frpc.toml |

使用 CMD 尝试在 Windows 上使用本地 6000 端口连接 Kali 的 SSH 服务:
1 | ssh root@10.0.0.1 6000 |

看着好像失败了,大概率是 Kali 没开 SSH 服务:
1 | systemctl start ssh |
再次尝试:

连上了,但是 Kali 本身是不允许 root 用户远程登录的,这里大家可以自己试试。
3 FRP 持久化运行
如果需要在后台长期运行,建议结合其他工具,如 systemd 和 supervisor。
systemd 是 Linux 主流系统自带的,更推荐。frp 文档中也是在 Linux 系统下使用 systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。
由于大部分 Linux 都自带了 systemd,如需安装直接使用 apt / yum 安装即可。这里将 Kali 作为 Client 进行编写,Server 同理(配置时记得将 # 后面的内容删除):
1 | [Unit] |
编写一下文件:
1 | vim /etc/systemd/system/frpc.service |
将桌面的文件拷贝到对应路径下:
1 | mv frp_0.66.0_linux_amd64 frp |
查看并启用 frpc 服务:
1 | systemctl daemon-reload |

3.1 frps.services
frps.services 配置文件内容如下:
1 | [Unit] |
3.2 frpc.services
frpc.services 配置文件内容如下:
1 | [Unit] |
4 FRP 官方示例
4.1 通过 SSH 访问内网机器
在具有公网 IP 的机器上部署 frps:部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:
1 | bindPort = 7000 |
在需要被访问的内网机器上部署 frpc:部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 10.0.0.1。以下是示例配置:
1 | serverAddr = "10.0.0.1" |
localIP和localPort配置为需要从公网访问的内网服务的地址和端口。remotePort表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
通过 SSH 访问内网机器:使用以下命令通过 SSH 访问内网机器,假设用户名为 kali:
1 | ssh kali@10.0.0.1 -p 6000 |
frp 将请求发送到 10.0.0.1:6000 的流量转发到内网机器的 22 端口。
4.2 通过自定义域名访问内网的 Web 服务
HTTP 类型的代理非常适合将内网的 Web 服务通过自定义域名提供给外部用户。相比于 TCP 类型代理,HTTP 代理不仅可以复用端口,还提供了基于 HTTP 协议的许多功能。
HTTPS 与此类似,但是需要注意,frp 的 https 代理需要本地服务是 HTTPS 服务,frps 端不会做 TLS 终止。
配置 frps.toml:在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:
1 | bindPort = 7000 |
如果需要配置 HTTPS 代理,还需要设置 vhostHTTPSPort。
配置 frpc.toml:在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:
1 | serverAddr = "10.0.0.1" |
域名解析:将 www.yourdomain.com 和 www.yourdomain2.com 的域名 A 记录解析到服务器的 IP 地址 10.0.0.1。如果服务器已经有对应的域名,您还可以将 CNAME 记录解析到原始域名。另外,通过修改 HTTP 请求的 Host 字段也可以实现相同的效果。
1 | 10.0.0.1 www.yourdomain.com |
通过浏览器访问:使用浏览器访问 http://www.yourdomain.com:8080 即可访问内网机器上的 80 端口服务,访问 http://www.yourdomain2.com:8080 可以访问内网机器上的 8080 端口服务。

4.3 身份认证
目前 frpc 和 frps 之间支持两种身份验证方式,token 和 oidc,默认为 token。这些认证方式允许您验证客户端与服务端之间的通信,并确保只有授权用户能够建立连接。
Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。
1 | # frps.toml |
如果双方的 token 不一致则会出现 register control error:

frp(Added in v0.64.0)支持使用 tokenSource 从文件中加载认证 token,而不是在配置文件中硬编码。这个功能可以避免在配置文件中直接暴露敏感信息。
tokenSource 与 token 字段互斥,只能选择其中一种方式配置。
1 | # frpc.toml |
5 FRP 常用配置
5.1 FRPS
1 | bindPort = 7000 |
5.2 FRPC
1 | serverAddr = "127.0.0.1" |
FRP 支持本地自己互连,这个即可自行形成代理服务器,然后使用 Proxifier / ProxyChains 连接即可:

5.3 多级代理
Server:
1 | bindPort = 7000 |
Target-1:
1 | # frpc.toml |
Target-2:
1 | serverAddr = "Target-1" |
由于 ProxyChains 不支持代理链,这里可以使用 Proxifier 添加多级代理。
6 FRP 图形化工具
6.1 frpc-desktop
Github 地址:https://github.com/luckjiawei/frpc-desktop
渗透啥的肯定是以 Cli 为主,这里用用看 frpc-desktop,下载对应 frp 后进行基础配置:

连接 frp 服务器:

可以动态添加所需代理服务:


不过好像不支持 Socks5 隧道(也可能是我没找到)。
6.2 frpmgr
Github 地址:https://github.com/koho/frpmgr
进行基础配置:

配置 frp 服务器:

运行 frpc 服务,创建 Socks5 隧道:


测试成功~





