也谈谈内网穿透,带你一步步体验FRP!
我们家庭宽带基本都是基于NAT,并没有提供公网IP,那么想从公网(Internet)访问家里电脑起的某个端口或服务该怎么办?那就来试试FRP这款内网穿透工具吧!
为啥要内网穿透?
比如你在家里电脑搭配了NAS,提供图片服务,你在外面想用手机同步照片到家里的NAS上?再比如你在办公电脑上启动了一个测试项目(API接口),想让合作小伙伴从公网访问到测试接口等等吧。当然,如果没有类似需求可以略过。
FRP搭建的前提准备条件:
- 具有公共 IP 地址的服务器(例如:阿里/腾讯等各种云主机)
- 处于NAT或防火墙后面的内网的机器,可以提供tcp/http等服务(家庭电脑,公司内部电脑都可以)
先看看我呕心沥血画的FRP的原理及数据流程图:
原理详细说明:
FRP Server(Server,IP假设为:202.106.0.26)
- 部署在公网: Server部署在拥有公网IP的服务器上,比如阿里云服务器。
- 监听请求: Server会监听来自外网的请求(开放57003端口),并将这些请求转发到对应的内网服务。
- 配置管理: 通过配置文件,Server会管理所有的客户端连接,新建监听端口,并维护连接状态。
- 注意:要在防火墙开放需要暴露的端口(57003)
frp Client(Client,IP假设:10.133.0.20)
- 部署在内网: Client部署在需要被访问的内网机器上。
- 连接Server: Client会主动连接到Server,建立一条隧道。
- 转发请求: 当有外部请求到达Server时,Server会通过建立的隧道将请求转发给Client服务。
- 返回响应: Client处理完请求后,将响应结果通过隧道返回给Server,最终传给外网用户。
FRP何许人也?
FRP在内网穿透这块可谓是鼎鼎大名,是一款用 Golang 编写的快速反向代理,它通过转发端口来帮助您将 NAT 或防火墙后面的本地服务器暴露给 Internet。截至目前它支持 TCP 和 UDP,以及 HTTP 和 HTTPS 协议。
话不多说,我们来实战体验:
测试环境:
- 阿里云主机,有固定公网IP
- 内网测试服务器,系统Ubuntu2024
下载二进制可执行文件,服务端,客户端可执行程序和配置都在里面
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
tar zxvf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
服务端配置:
# cat frps.toml
bindPort = 57003 #端口随意
auth.method = "token"
auth.token = "mytokent"
启动服务端,这样会监听端口:202.106.0.26:57003
frps -c frps.toml
客户端配置:
前提:为了测试,已经有Nginx服务启动在内网机器的8005端口了,其他服务也可以,如ssh
FRP客户端配置
# cat frpc.toml
serverAddr = "public IP"
serverPort = 57003
auth.method = "token"
auth.token = "mytokent"
[[proxies]]
name = "nginx-simple-web"
type = "tcp"
localIP = "10.133.36.109"
localPort = 8005
remotePort = 59008
启动客户端FRP
./frpc -c frpc.toml
观察客户端及服务端日志,可以看到已经链接上FRP服务端了
服务端这时会启动新的端口59008(配置在客户端,但是需要在服务端的云服务上开通防火墙端口)
访问映射到公网的IP+端口,有域名的的也可以解析域名到公网地址上,使用域名访问
如:http://Public-IP:59008
以上是针对Linux有些了解的同学,如果内网是windows环境也没问题的,再介绍一个开源项目,地址在这:
https://github.com/luckjiawei/frpc-desktop。
这个开源项目提供了FRP跨平台桌面客户端,可视化配置,轻松实现内网穿透!
FRP应该有很多人介绍过,不过我还是按照我自己的方式,通过一步步的实际操作来验证和体验各种工具的可用性,找到工具的有点和不足之处,希望能帮到您。
[全文完]