frp是什么?
1.frp是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务, 支持tcp, udp, http,
https等协议类型,并且web服务支持根据域名进行路由转发。
2.frp内网穿透主要用于没有公网IP的用户,实现远程桌面、远程控制路由器、
搭建的WEB、FTP、SMB服务器被外网访问、远程查看摄像头、调试一些远程的API(比如微信公众号,企业号的开发)等。
3.为什么要选择frp?市面上提供内网穿透服务的公司对免费的用户是有限制的,
本站免费提供无限流量、无限域名绑定、不限制网速、不限制连接数的内网穿透服务。
准备工作
搭建一个完整的frp服务链,我们需要:
VPS一台(也可以是具有公网IP的实体机)
访问目标设备(就是你最终要访问的设备 我这里用的是windows)
VPS相关:因为frp的原理是利用服务端(所准备的VPS)进行转发,因而VPS的速度直接决定了之后连接的质量,请根据自己的需要选择相应主机配置。
我这里测试使用的是阿里云4核4G的轻量应用服务器,以及本地windows
下边开始正式的配置:
服务端配置(也就是我们具有公网IP的服务):
- 1.要下载frp的包(根据自己的系统架构去下载):
wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz
- 2.解压
- tar -zxvf frp_0.42.0_linux_amd64.tar.gz
- 3.进入frp目录 修改frps.ini 文件
- # cd frp_0.42.0_linux_amd64/
- # vim frps.ini ###下边是我写好的配置文件
bind_port = 7000 #表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
dashboard_port = 7500 #服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500
token = 41f1a553fd725468436eeac9********e31325575ee27ab1ea928931 #是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
dashboard_user = root #打开仪表板页面登录的用户名和密码,自行设置即可。
dashboard_pwd = root #同上
4.这里就可以启动
nohup ./frps -c frps.ini & ##后台启动
通过ps查看进程 5.通过浏览器访问是否启动成功 访问XXXX:7500 ip:服务器的ip,端口是上边ini文件中配置dashboard_port 端口
出现下边仪表说明配置成功 客户端配置(也就是我们具有公网IP的服务):
1.frp的客户端就是我们想要真正进行访问的那台设备,大多数情况下应该会是一台Windows主机,因而本文使用Windows主机做例子。Linux配置方法类似.同样地,根据客户端设备的情况选择相应的frp程序进行下载,Windows下载和解压等步骤不再描述。
下载地址:
https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_windows_amd64.zip
2.同样解压完之后打开目录下的frpc.ini文件编辑
下边是我的配置:
[common]
server_addr = ****** #服务端的ip地址
server_port = 7000 # 服务端配置的bind_port端口
token = 41f1a553fd725468436eea**************ab1ea928931 #服务端配置的token
#以上是必须要有的,下边是自定义的规则 可以存在多个
[web2] #规则的命名
type = tcp #协议是什么 tcp udp http等 具体可以看frp官方文档
local_port = 57860 #本地要穿透端口号
local_ip = 127.0.0.1 #本地的IP
remote_port = 57860 #该条规则在服务端开放的端口号(我想通过 服务端ip:57860 访问到本地57860上的内容)
3.编辑完之后可以运行,也得通过命令去指定文件启动
./frpc -c frpc.ini
出现 start proxy success 说明启动成功 注意窗口不可关闭,可以写一个批处理脚本进行后台运行4.可以进行验证啦!!!! 如果通过服务端id: 客户端配置的remote_port 端口 访问成功的话就大功告成啦!!!
frp原理图如下:
Frp请求流程:
1.首先,frpc 启动之后,连接 frps,并且发送一个请求 login(),之后保持住这个长连接,如果断开了,就重试
2..frps 收到请求之后,会建立一个 listener 监听来自公网的请求
3.当 frps 接受到请求之后,会在本地看是否有可用的连接( frp 可以设置连接池),如果没有,就下发一个 msg.StartWorkConn 并且 等待来自 frpc 的请求
4.frpc 收到之后,对 frps 发起请求,请求的最开始会指名这个连接是去向哪个 proxy 的
5.frps 收到来自 frpc 的连接之后,就把新建立的连接与来自公网的连接进行流量互转
6.如果请求断开了,那么就把另一端的请求也断开
至此,客户端配置完成,之后就是你自己根据需要在frpc.ini后追加规则即可。
强烈建议你在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。