1.frp是什么?
frp是一个快速的反向代理服务,可以把NAT或防火墙后面的本地服务暴露到公网上。
frp目前支持TCP、UDP、HTTP以及HTTPS等协议,通过域名可以将请求转发到内网的服务上。
frp的主要功能和优点有:
简单易用,无需复杂的配置就可以直接暴露内网服务。
连接速度快,利用长连接池可以显著提高访问速度。
支持多种协议,包括TCP、UDP、HTTP、HTTPS等。
安全可靠,支持参数加密、身份验证等功能。
跨平台支持,客户端和服务器支持常见的操作系统。
轻量高效,资源占用低,不会明显降低主机性能。
社区活跃,版本迭代快速。
FRP可以用于内部网络穿透、远程桌面或远程服务访问等场景。它可以轻松地通过公网访问部署在公司、家庭内网环境中的服务,如数据库服务器、Web应用等,在保证安全性的同时,获得高性能的访问体验。
2.图解
FRP 主要由两部分组成:
FRPC 客户端(frp client)
运行在公司内网机器上
接收来自公网的访问请求
将请求转发给内网服务
FRPS 服务端(frp server)
部署在具有公网 IP 的机器上
暴露服务的公网入口
接收公网访问请求
通过加密隧道转发到 FRPC
3.准备工作
一台有公网IP的服务器
一台内网主机
在服务器端和客户端各自下载对应的版本
https://github.com/fatedier/frp/releases
解压如下:
4.配置文件
# frps.toml
bindPort = 7000 # 服务端与客户端通信端口
transport.tls.force = true # 服务端将只接受 TLS链接
auth.token = "public" # 身份验证令牌,frpc要与frps一致
# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址
webServer.port = 7500 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码
# frpc.toml
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "x.x.x.x"
serverPort = 7000 # 公网服务端通信端口
auth.token = "public" # 令牌,与公网服务端保持一致
[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1" # 需要暴露的服务的IP
localPort = 9000 # 将本地9000端口的服务暴露在公网的6060端口
remotePort = 6060 # 暴露服务的公网入口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
注意: 访问的端口一定要开放
5.测试
这里使用了python的http.server来做测试,也可以用ssh服务来做测试。
首先通过执行如下命令创建一个最简单的 HTTP 服务器(服务器默认监听端口是 8000,支持自定义端口号):
python -m http.server 9000
启动 frps:
# 后台启动
./frps -c ./frps.ini &
启动 frpc:
./frpc -c ./frpc.ini
frpc启动成功实例如下:
请求你公网ip:6060端口能访问到本地9000端口的http.server服务
如果你成功访问,那么,恭喜你,你已经学会了利用frp怎么配置内网穿透了!!!