FRP 介绍
FRP (Fast Reverse Proxy) 是一个用于内网穿透的高效反向代理应用,它支持 TCP、UDP、HTTP 和 HTTPS 等多种协议,能够让处于防火墙或 NAT 后的内网服务通过公网访问。通过 FRP,内网服务可以绑定到外网 IP 地址和端口,用户可以方便地通过公网访问这些内网服务,适用于远程管理、应用发布等场景。
FRP 工作原理
FRP 分为两部分:客户端(frpc) 和 服务端(frps)。
- frps 服务端:部署在拥有公网 IP 的服务器上,负责接收来自外部的请求并将其转发到内网的服务。
- frpc 客户端:部署在内网的机器上,与 frps 建立持久连接,将内网的服务暴露给公网。
当客户端(frpc)向服务端(frps)注册时,会告知服务端希望暴露哪些内网服务。服务端会将这些服务的流量转发给客户端,并通过客户端再发送给相应的内网服务。
FRP 使用场景
远程访问内网服务:例如,你可以通过 FRP 访问家里或公司的服务器,而不需要配置复杂的端口映射。
- 开发环境共享:开发者可以通过 FRP 共享自己本地的开发环境,外部团队可以直接访问内网的应用和 API。
- 多种协议支持:FRP 支持 HTTP、HTTPS、TCP、UDP 等协议,可以穿透不同类型的服务。
- 穿透防火墙/NAT:即使内网服务器处于 NAT 后面或防火墙后面,仍然可以通过 FRP 将服务暴露到公网。
FRP 的优势
- 高效:FRP 采用了较为高效的协议和数据传输方式,性能较好,能够处理较大的流量。
- 多协议支持:不仅支持常见的 TCP 和 HTTP,还支持 UDP、WebSocket 等协议,灵活性强。
- 简单易用:配置文件简洁,支持多种配置方式,快速上手。
- 安全性:FRP 支持 TLS、身份验证等安全机制,保障数据的传输安全。
- 丰富的功能:如负载均衡、流量统计、服务限速等,可以满足各种复杂的应用场景需求。
服务器配置部署
1,创建并配置 frp 文件
代码语言:javascript复制[root@server ~]# cat /root/frps.ini
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
# 登录面板的密码
dashboard_pwd = 123456
# 身份验证
token = qwertyui
[root@server ~]#
2,拉取镜像启动容器
代码语言:javascript复制[root@server ~]# docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps
[root@server ~]# docker run --restart=always --network host -d -v /root/frps.ini:/etc/frp/frps.ini --name frps registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps
5d1c7d3ec1697c08bd77fa267e9ae007ffa8c379b81bb6953d6e01ff85c5cbb7
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d1c7d3ec169 registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps "/bin/sh -c '/usr/bi…" 4 seconds ago Up 3 seconds frps
[root@server ~]#
3,登录 frp 的 web 后台进行查看(账号: admin 密码: 123456)
代码语言:javascript复制http://服务器IP:7500
客户端配置部署 Linux
1,创建并配置 frp 文件
代码语言:javascript复制[root@client ~]# cat /root/frpc.ini
[common]
# server_addr为云服务器IP地址
server_addr = xx.xx.xx.xx
# server_port为服务端监听端口,bind_port
server_port = 7000
# 服务端设置的token
token = qwertyui
# 添加穿透端口1
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8822
# 添加穿透端口2
[nginx]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8880
[root@client ~]#
2,客户端镜像拉取启动
代码语言:javascript复制[root@client ~]# docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest
[root@client ~]# docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest
5d73d9ee2583b73b84a2863f61ddf29d722b7ac8a79f1e366bec7998bc8e278b
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d73d9ee2583 registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest "/bin/sh -c '/usr/bi…" 4 seconds ago Up 4 seconds frpc
[root@client ~]#
3,测试内网穿透端口 1
代码语言:javascript复制root@ceshi:~# ssh root@服务器IP -p 8822
root@服务器IP's password:
Last login: Tue Oct 8 16:38:52 2024 from localhost
[root@client ~]#
4,测试内网穿透端口 2
代码语言:javascript复制# 拉取一个 nginx 镜像并启动
[root@client ~]# docker run -d -p 80:80 --name=web --restart=always nginx
32204c6ca6c19ff662ba21511a916dc58141add3c02fa8cd34b1c024cdf03474
[root@client ~]#
[root@client ~]#
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32204c6ca6c1 nginx "/docker-entrypoint.…" 11 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
[root@client ~]#
客户端配置部署 windows
1,进入 GitHub 下载对应版本
代码语言:javascript复制https://github.com/fatedier/frp/
2,解压 创建 frpc.ini 文件 添加内容
代码语言:javascript复制[common]
# 服务端公网ip
server_addr = 47.116.17.20
# 对应服务端配置 bind_port
server_port = 7000
# 对应服务端配置中的 token
token = qwertyui
[mstsc]
type = tcp
# 此处不需要改
local_ip = 127.0.0.1
# windows服务器默认的远程端口,如果考虑安全问题,可以修改远程端口,对应再修改此处
local_port = 3389
# local_port映射的远程端口,也就是映射的服务端的端口
remote_port = 8888
3,创建 bat 启动文件并添加内容
代码语言:javascript复制frpc.exe -c frpc.ini
4,运行bat文件之后 web 网页查看端口已生效
5,测试远程登录