FRP概念
FRP是什么(借助官网的描述)?
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么是用FRP(借助官网的描述)?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
- 采用 TCP连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
- 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp客户端完成某些工作。
- 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
原理
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
代理
FRP的安装
下载
访问:https://github.com/fatedier/frp/releases
也可以通过如下命令来看:
shell
[root@VM-0-15-centos ~]# arch
x86_64
下载之后上传至公网服务器:
解压:
bash
tar -zxf frp_0.51.3_linux_amd64.tar.gz
text
frpc:客户端可执行程序
frpc_full.ini:客户端所有配置项(可以在此文件查看frp的所有的配置项)
frpc.ini:客户端配置项
frps:服务端可执行程序
frps_full.ini:服务端所有配置项(可以在此文件查看frp的所有的配置项)
frps.ini:服务端配置项
配置并启动服务端
编辑配置文件:frps.ini
bash
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的,这个token之后在客户端会用到
token = e10adc3949ba59abbe56e057f20f883e
# 开启HTTP
#vhost_http_port = 8088
# 去除TCP速度限制
tcp_mux = false
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin123456
enable_prometheus = true
# frp日志配置
log_file = /home/frp/frp/frps.log
log_level = info
log_max_days = 3
然后启动服务端:
bash
./frps -c frps.ini # 启动服务端
nohup ./frps -c frps.ini & # 后台启动
切记一定将云服务器防火墙对应的端口打开。
然后访问FRP后台:http://云服务器IP:管理后台端口
配置客户端
一样的方式,下载对应系统版本的客户端。这个地方以ubuntu的ssh服务为例演示。
然后解压:
编辑frpc.ini
bash
[common]
server_addr = 47.xxx.xxx.xxx # 服务端所在的公网ip地址
server_port = 7000 # 服务端默认端口号,与服务端配置文件保持一致
token = e10adc3949ba59abbe56e057f20f883e
# 去掉速度限制
tcp_mux = false
[ssh]
type = tcp # 注意:这个地方一律填写tcp
local_ip = 192.168.1.211 # 所在内网服务器的ip地址
local_port = 22 # 本地访问端口号
remote_port = 8088 # 映射到云服务器的端口号
use_compression = true
use_encryption = true
[rdp]
type = tcp # 注意:这个地方一律填写tcp
local_ip = 192.168.1.211 # rdp所在内网服务器的ip地址
local_port = 3389 # 本地访问端口号
remote_port = 8081 # 映射到云服务器的端口号
然后启动客户端:
bash
./frpc -c frpc.ini # 启动客户端
nohup ./frpc -c frpc.ini & # 后台启动客户端
然后观察frp后台:
直接:ssh 用户名@云服务器ip -p 映射的端口
即可访问内网的SSH服务。
注意配置/etc/ssh/sshd_config
将PermitRootLogin 改为yes
去掉PasswordAuthentication yes前的#