6.2 KiB
title, categories, tags, date
title | categories | tags | date | ||||
---|---|---|---|---|---|---|---|
FRP |
|
|
2021-03-21 22:48:33 |
FRP
frp 是什么?
FRP官方文档:https://gofrp.org/docs/
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用 frp?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
原理
frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
代理
在 frp 中一个代理对应一个需要暴露的内网服务。一个客户端支持同时配置多个代理。
代理类型
frp 支持多种代理类型来适配不同的使用场景。
类型 | 描述 |
---|---|
tcp | 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http | 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 |
https | 针对 HTTPS 应用定制了一些额外的功能。 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
sudp | 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux | 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。 |
配置文件
frp 目前仅支持 ini 格式的配置文件,frps 和 frpc 各自支持不同的参数。
frps 主要配置服务端的一些通用参数,frpc 则需要额外配置每一个代理的详细配置。
格式
目前仅支持 ini 格式的配置,如下的示例配置将本地 SSH 服务穿透到公网。
frps 配置:
[common]
bind_port = 7000
frpc 配置:
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[common]
是固定名称的段落,用于配置通用参数。
[ssh]
仅在 frpc 中使用,用于配置单个代理的参数。代理名称必须唯一,不能重复。
同一个客户端可以配置多个代理。
身份认证
目前 frpc 和 frps 之间支持两种身份验证方式,token
和 oidc
,默认为 token
。
通过 frpc.ini
和 frps.ini
的 [common]
段落中配置 authentication_method
来指定要使用的身份验证方式。
只有通过身份验证的客户端(frpc)才能成功连接 frps。
Token
基于 Token 的身份验证方式比较简单,需要在 frpc 和 frps 的 [common]
段落中配置上相同的 token
参数即可。
参数说明
类型 | 描述 |
---|---|
authentication_method | 身份验证方式,token 或 oidc,默认为 token。 |
authenticate_heartbeats | 在每一个心跳包中附加上身份认证信息,客户端服务端需要一致。 |
authenticate_new_work_conns | 在每次创建工作连接时附加上身份认证信息,客户端服务端需要一致。 |
个人常用配置
服务端
[common]
bind_port = 7000 #连接端口
authentication_method = token #认证方式
token = ******** #认证密码
allow-ports = 8000-9000 #运行连接的密码
客户端
[common] #连接参数
server_addr = 39.107.94.47 #服务端IP
server_port = 7000 #服务端端口
authentication_method = token #认证方式
token = zhanxiaoyao #认证类型
[ssh] #名称
type = tcp #类型
local_ip = 127.0.0.1 #本地IP
local_port = 22 #本地端口
remote_port = 8022 #远端端口
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
systemctl控制启动
vim /lib/systemd/system/frpc.service
在frpc.service里写入以下内容
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frpc -c /your/path/frpc.ini
[Install]
WantedBy=multi-user.target
然后启动frpc
systemctl start frpc
设置开机自启动
systemctl enable frpc
windows中设置FRPC/S开机自启动
1、下载frp软件包并解压至c盘,并在frp文件夹内创建frp.bat,追加以下内容
C:
cd \frp
start frpc.exe -c frpc.ini
2、打开windows服务器管理器——>工具——>任务计划程序
3、创建基本任务——>触发器为计算机启动时——>操作为启动程序——>程序或脚本选择frp.bat——>完成