FRP(Fast Reverse Proxy)是一个功能强大的工具,适用于多种网络场景。以下是几个常见、鲜明且有价值的使用案例:
远程访问内部服务器:
开发和测试Web应用:
远程监控和管理设备:
云环境中的服务暴露:
** bypass互联网限制或地域封锁**:
负载均衡:
微服务架构中的服务暴露:
这些场景展示了FRP在提升网络灵活性、安全性和管理效率方面的价值。
FRP(Fast Reverse Proxy)是一款轻量级、高性能的反向代理工具,主要用于内网穿透、安全访问和数据传输等场景。FRP由fatedier团队开发,使用Golang语言编写,支持跨平台部署和使用。其工作原理是通过反向代理技术将来自公网的请求转发至内网服务器,并将内网服务器的响应再次转发给公网请求者。在实现内网穿透时,FRP能够打破公网与内网之间的隔离,使公网用户能够直接访问内网服务器上的资源,从而实现远程访问和管理。
FRP的主要特点包括:
FRP适用于多种场景,如远程访问、内网穿透、云计算和安全访问等。FRP采用开源方式,代码托管在GitHub上(https://github.com/fatedier/frp),拥有活跃的社区和丰富的生态系统,能够满足开发者和企业的不同需求。需要特别注意的是,在使用FRP实现内网穿透时,应避免将敏感或不安全的端口开放至公网,以确保数据和信息安全。
本文介绍了如何使用FRP实现内网穿透,以便外部用户能够访问内网服务器。通过这种方法,可以方便地进行远程访问和管理,提高工作效率和灵活性。需要注意的是,FRP内网穿透可以有效解决网络访问限制和难题,但必须确保安全,避免在公网上开放敏感或不安全的端口。
IP | 主机名 | 节点类型 |
---|---|---|
49.232.149.81 | frp-server | 服务端节点,公网固定ip,网络流量中转用 |
192.168.100.10 | frp-client | 客户端节点,内网ip不固定,没有固定公网ip |
通过远程下载:
wget https://github.91chi.fun//https://github.com//fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz
通过GitHub的releases本地下载:
https://github.com/fatedier/frp/releases
服务器可以是云服务提供商提供的最便宜的云服务器,但必须具有公网IP。
首先,在FRP服务端上传frp软件包:
[root@frp-server ~]# wget https://github.91chi.fun//https://github.com//fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz
解压frp软件包:
[root@frp-server ~]# tar -xzvf frp_0.47.0_linux_amd64.tar.gz
得到以下文件结构:
[root@frp-server frp_0.47.0_linux_amd64]# ll
total 27892
-rwxr-xr-x 1 1001 123 12668928 Feb 10 01:18 frpc
-rw-r--r-- 1 1001 123 11345 Feb 10 01:23 frpc_full.ini
-rw-r--r-- 1 1001 123 126 Feb 10 01:23 frpc.ini
-rwxr-xr-x 1 1001 123 15851520 Feb 10 01:18 frps
-rw-r--r-- 1 1001 123 5907 Feb 10 01:23 frps_full.ini
-rw-r--r-- 1 1001 123 26 Feb 10 01:23 frps.ini
-rw-r--r-- 1 1001 123 11358 Feb 10 01:23 LICENSE
其中,以frpc
开头的文件是客户端的核心文件,以frps
开头的文件是服务器端的核心文件。
修改frps.ini
文件(核心步骤):
[root@frp-server frp_0.47.0_linux_amd64]# vim frps.ini
[common]
bind_port = 7000 # 服务端绑定的端口,需要在防火墙中开放
bind_udp_port = 5999
dashboard_port = 6001 # 仪表盘访问的端口,需要在防火墙中开放
dashboard_user = admin # 仪表盘用户名
dashboard_pwd = admin # 仪表盘密码
# 可选配置
vhost_http_port = 80 # http 服务映射端口,需要在防火墙中开放
vhost_https_port = 443 # https 服务映射端口,需要在防火墙中开放
token = your_token # 协商令牌,客户端和服务器需要一致,建议配置该项并设置32位以上高强度复杂密码
log_file = ./frps.log # 日志文件位置
log_level = info # 日志级别,可选:debug, info, warn, error
log_max_days = 3 # 日志保存天数
heartbeat_timeout = 15 # 心跳超时配置
max_pool_count = 50 # 连接池的数量
max_ports_per_client = 0 # 每个客户端最大可以使用的端口,0表示无限制
authentication_timeout = 0 # 时间校验超时,0表示不校验
tcp_mux = true # 是否使用TCP复用
更多参数请参考FRP官方文档(https://gofrp.org/docs/reference/server-configures)。
开启服务并后台自启动:
[root@frp-server frp_0.47.0_linux_amd64]# nohup ./frps -c frps.ini &
访问页面进行测试:
完成上述配置后,打开浏览器,输入IP:6001
,查看FRP的工作状态,说明服务器端FRP服务已成功开启。
客户端也需要下载并解压FRP安装包:
[root@frp-client ~]# tar -xzvf frp_0.47.0_linux_amd64.tar.gz
修改frpc.ini
文件(核心步骤):
[root@frp-client frp_0.47.0_linux_amd64]# vim frpc.ini
[common]
server_addr = 49.232.149.81 # 公网服务器的公网IP
server_port = 7000 # 与服务器端配置一致的端口
[ssh] # 服务名称自定义
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 映射到本地的端口
remote_port = 6002 # 远程连接的端口
[http] # 可选,用于网站服务穿透
type = http
local_ip = 127.0.0.1
local_port = 80 # 本地HTTP服务端口
custom_domains = yourdomain.com # 域名解析到该公网IP
更多参数请参考FRP官方文档(https://gofrp.org/docs/reference/client-configures)。
开启服务并后台自启动:
[root@frp-client frp_0.47.0_linux_amd64]# nohup ./frpc -c frpc.ini &
访问FRP查看是否配置成功。
下载并解压FRP安装包:
修改frpc.ini
文件(核心步骤):
使用记事本打开frpc.ini
文件:
[common]
server_addr = 49.232.149.81 # 公网服务器的公网IP
server_port = 7000 # 与服务器端配置一致的端口
[ssh] # 服务名称自定义
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 映射到本地的端口
remote_port = 6003 # 远程连接的端口
打开终端进入文件所在目录并开启服务:
./frpc -c frpc.ini
Linux远程连接:
ssh [email protected] -p 6002
示例:
[root@frp-server ~]# ssh [email protected] -p 6002
[email protected]'s password:
Last login: Tue Feb 28 09:49:28 2023 from 127.0.0.1
[root@frp-client ~]#
Windows远程连接:
进入远程桌面连接界面,输入公网IP:端口
(例如49.232.149.81:6003
)进行连接。
FRP(Fast Reverse Proxy)在多种场景中具有广泛的应用价值,以下是一些鲜明、有用且常见的应用场景示例:
企业或个人有一台位于内网的计算机,希望在外出时能够通过远程桌面协议(如RDP、VNC等)访问这台计算机进行工作或管理。
服务端配置:
[common]
bind_port = 7000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
通过FRP配置,外部用户可以使用远程桌面连接工具(如Windows的远程桌面连接)通过公网IP:6000
访问内网计算机的3389
端口,实现远程桌面控制。
开发者或企业有一个位于内网的网站或应用服务,希望在没有公网IP的情况下,让外部用户可以直接访问这些服务。
服务端配置:
[common]
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = yourdomain.com
外部用户通过访问http://yourdomain.com
或https://yourdomain.com
可以访问内网服务器上运行的网站或应用服务,而无需内网服务器有公网IP。
开发团队需要访问位于内网的数据库服务器(如MySQL、PostgreSQL等),但内网服务器没有公网IP,只能通过内网访问。
服务端配置:
[common]
bind_port = 7000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6001
通过FRP配置,开发团队可以使用数据库管理工具(如MySQL Workbench、pgAdmin等)通过公网IP:6001
访问内网数据库服务器的3306
端口,实现远程数据库管理。
企业内部需要对外提供文件传输和共享服务,但内网服务器没有公网IP。
服务端配置:
[common]
bind_port = 7000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[fileserver]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 6002
外部用户可以通过FTP客户端连接公网IP:6002
,实现文件的上传和下载,而内网服务器的FTP服务位于21
端口。
企业在一个地理位置有多个分支机构,每个分支机构有独立的内网环境,需要集中管理各分支机构的内网服务。
服务端配置(可以设置多个客户端连接):
[common]
bind_port = 7000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端A配置(分支机构A):
[common]
server_addr = 49.232.149.81
server_port = 7000
[service-a]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 6003
客户端B配置(分支机构B):
[common]
server_addr = 49.232.149.81
server_port = 7000
[service-b]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 6004
总部的管理团队可以通过公网IP:6003
访问分支机构A的内网服务,通过公网IP:6004
访问分支机构B的内网服务,实现跨地域的集中管理。
企业需要远程访问位于内网的安全监控系统(如摄像头、日志服务器等),但内网服务器没有公网IP。
服务端配置:
[common]
bind_port = 7000
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[camera]
type = tcp
local_ip = 127.0.0.1
local_port = 8000
remote_port = 6005
[logserver]
type = tcp
local_ip = 127.0.0.1
local_port = 514
remote_port = 6006
外部用户可以通过公网IP:6005
访问内网摄像头的监控画面,通过公网IP:6006
访问内网日志服务器的端口,实现远程监控和日志管理。
个人或企业希望在云服务器上运行游戏,然后通过内网穿透技术让外部用户能够远程访问并玩这些游戏。
服务端配置:
[common]
bind_port = 7000
bind_udp_port = 7001
dashboard_port = 6001
dashboard_user = admin
dashboard_pwd = admin
客户端配置:
[common]
server_addr = 49.232.149.81
server_port = 7000
[game]
type = tcp
local_ip = 127.0.0.1
local_port = 3000
remote_port = 6007
[game-udp]
type = udp
local_ip = 127.0.0.1
local_port = 3001
remote_port = 6008
外部用户可以通过公网IP:6007
和公网IP:6008
访问内网游戏服务器的TCP和UDP端口,实现远程游戏体验。
这些场景展示了FRP在实际应用中的多样性和灵活性,能够帮助企业或个人在没有公网IP的情况下,实现多种远程访问和管理功能。