一、FRP介绍
FRP是Github上的一款开源内网穿透工具,主要分为FPR客户端(FRPC)、FRP服务端(FRPS),通过在拥有公网IP或域名的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置好后就可以实现通过公网IP或者域名访问内网的内容了
支持的协议有:TCP、UDP、HTTP、HTTPS、TCPMUX、STCP、SUDP
开源项目地址 : https://github.com/fatedier/frp
FRP官网中文文档 : https://gofrp.org/zh-cn/docs
FRP客户端发行 : https://github.com/fatedier/frp/releases
二、FRP服务端(FRPS)部署步骤
本次docker部署以****为例,其他NAS可以参照部署
群晖NAS
1、新建docker相关文件夹
在docker共享文件夹下新建****
frps文件夹

2、编写服务端配置文件并上传(方式一:ini格式,不推荐)
服务端配置参数参考:https://gofrp.org/zh-cn/docs/reference/server-configures/
注意⚠️:配置文件的*****内容需要自行配置,相关端口号也可以自行修改
[common]
# FRP服务端监听端口,用于与客户端通信
bind_port = 54407
# FRP控制台端口,用于管理和监控
dashboard_port = 54307
# 控制台用户名
dashboard_user = ********
# 控制台密码(请务必修改为强密码)
dashboard_pwd = ********
# 身份验证Token,客户端连接时需要提供相同的Token
# 请务必设置一个复杂的Token以提高安全性
# 强烈建议修改为更复杂的字符串
token = **************
# 日志配置(可选)
# 日志文件路径
log_file = ./frps.log
# 日志级别:debug, info, warn, error
log_level = info
# 日志保留天数
log_max_days = 3
服务器端配置文件编写完毕后,保存为****,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)
frps.ini

3、编写服务端配置文件并上传(方式二:toml格式,推荐)
服务端配置参数参考:https://gofrp.org/zh-cn/docs/reference/server-configures/
注意⚠️:配置文件的*****内容需要自行配置,相关端口号也可以自行修改
# 服务端监听地址,用于接收 frpc 的连接,默认监听 0.0.0.0。
bindAddr = "0.0.0.0"
# 与客户端通信端口,即服务端监听端口,默认值为7000。
bindPort = 54407
# HTTP 类型代理监听的端口,启用后才能支持 HTTP 类型的代理。
vhostHTTPPort = 20601
# 服务端控制面板
webServer.addr = "0.0.0.0"
# 访问控制面板的端口号
webServer.port = 54307
# 控制面板的用户名和密码,暴露在公网的服务请使用严谨一些的用户名密码
webServer.user = "*******"
webServer.password = "*******"
# 配置服务端的鉴权,这里使用Token进行鉴权,客户端必须用指定的Token才可以与服务端建立连接,防止滥用
auth.method = "token"
auth.token = "*******"
# 配置服务端只打印warn级别的日志,并将日志输出到指定目录(注意这个目录指向的是容器内的目录)
log.level = "info"
log.to = "./frps.log"
log.maxDays = 3
服务器端配置文件编写完毕后,保存为****,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)
frps.toml
4、编写docker YAML配置文件
如果服务端配置文件格式为ini,则用此配置
version: "3"
services:
frps:
image: snowdreamtech/frps # FRP服务端镜像
container_name: frps # 容器名称
volumes:
- ./frps.ini:/etc/frp/frps.ini # 挂载配置文件
# 注意:由于使用了host网络模式,不需要单独映射端口
command: ["-c", "/etc/frp/frps.ini"] # 指定配置文件路径
restart: unless-stopped # 容器自动重启策略
network_mode: host # 使用主机网络模式,必须使用此模式
如果服务端配置文件格式为toml,则用此配置
version: "3"
services:
frps:
image: snowdreamtech/frps # FRP服务端镜像
container_name: frps # 容器名称
volumes:
- ./frps.toml:/etc/frps/frps.toml # 挂载配置文件
# 注意:由于使用了host网络模式,不需要单独映射端口
command: ["-c", "/etc/frps/frps.toml"] # 指定配置文件路径
restart: unless-stopped # 容器自动重启策略
network_mode: host # 使用主机网络模式,必须使用此模式
docker YAML配置文件编写完毕后,保存为”“,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)
docker-compose.yml

5、设置镜像加速地址
如果当前注册表可以直接下载镜像文件,本步骤则不用管。
毫秒:https://docker.1ms.run

6、新增项目
在Container Manager的左侧”“中点击”
项目“按钮,如下图
新增

项目名称:自定义,
只要不与当前已有项目冲突即可
路径:选择docker下创建的frps目录,此时会自动读取到frps目录下的docker-compose.yml文件。

然后点击”下一步”,完成项目的创建后,会自动启动项目,从日志中可看到已成功启动

7、服务控制面板访问
浏览器中输入”http://NAS域名:54307″,端口与前面配置文件****中保持一致
frps.ini

输入用户名、密码,对应**或者frps.toml配置文件中的设置
frps.ini、
dashboard_user**,登录后,如下图即为部署FRP服务端成功
dashboard_pwd

三、windows客户端使用
备注:如果是windows或者移动终端用户,直接在github中开源项目发行页面下载可执行文件,如果是Linux文件,可以直接在docker中部署FRP客户端(FRPC)来使用。
这里以windows服务器为例
1、下载客户端
客户端发行页面: https://github.com/fatedier/frp/releases

可根据终端类型,自行下载对应文件,这里说明一下arm64和amd64的区别和选择
amd64:适配 Intel、AMD 的主流 CPU(如家用 PC、大部分云服务器 CPU)。arm64:适配华为鲲鹏、AWS Graviton、树莓派 CPU、手机处理器等 ARM 架构芯片。
这里下载的安装包为”“,解压到某个磁盘目录下,具体如下:
frp_0.65.0_windows_amd64.zip

2、编写配置文件frpc.toml
备注: 配置文件中*号内容,需要自行替换成自己的配置
# 服务端公王IP
serverAddr = "171.115.208.90"
# 客户端和服务端通信的端口
serverPort = 54407
# 鉴权方式
auth.method = "token"
# token值
auth.token = "FLcDfFvAK0IuqE4TjliGxvoFM5tmAJl3lQtYU2Fu3vUJjeLc"
# 配置客户端只打印warn级别的日志,并将日志输出到指定目录(注意这个目录指向的是容器内的目录)
log.level = "info"
log.to = "./frps.log"
log.maxDays = 3
[[proxies]]
name = "OA"
type = "http"
localIP = "127.0.0.1"
localPort = 20600
customDomains = ["oa.*******.com"]
# 配置多个访问的话,直接复制,然后修改端口和域名即可
[[proxies]]
name = "YW"
type = "http"
localIP = "127.0.0.1"
localPort = 9081
customDomains = ["yw.*******.com"]
客户端配置文件编写完毕后,保存为****,然后放到解压的目录下,具体如下:
frpc.toml

3、启动客户端
在cmd命令行中,启动frpc.exe,具体如下:
.frpc.exe -c .frpc.toml
4、配置路由器端口
服务端配置文件中****值为当前需要开通的端口号
vhostHTTPPort

5、配置光猫端口

6、访问web应用
在浏览器中用客户端配置文件中的域名和端口号组合访问即可。http://customDomains:localPort
四、常见问题
1、在windows服务器上执行frpc.exe文件报错一
报错信息: open ./frpc.ini: The system cannot find the file specified.

原因: 标准的可执行文件包中没有frpc.ini配置文件,需要自行新建
2、在windows服务器上执行frpc.exe报错二
报错信息如下:
PS D:frpc> .frpc.exe
WARNING: ini format is deprecated and the support will be removed in the future, please use yaml/json/toml format instead!
proxy web1: subdomain and custom domains should not be both empty
PS D:frpc>
原因:
一、ini格式的配置文件已过时,frp官方在未来将移除ini的支持,需要转换成YAML等格式
二、配置文件内容不完整:代理的web1中没有设置子域名,FRP 要求:HTTP 类型的代理必须至少指定其中一个,否则无法将请求正确转发到本地服务。
3、frpc windows客户端启动成功,但报错
报错信息: [client/control.go:170] [7b7fd9de24319db4] [web1] start error: type [http] not supported when vhost http port is not set
原因:frpc配置的为web访问时,frps服务端需要增加对应的端口配置参数:(ini配置文件),如果是toml配置文件的话,需要增加配置参数:
vhost_http_port
vhostHTTPPort
4、json: cannot unmarshal string into Go value of type v1.ServerConfig

是toml配置文件语法错误,检查配置项,这里是因为toml配置值少了后面的双引号导致的。

五、引用链接
开源项目地址 : https://github.com/fatedier/frp
FRP官网中文文档 : https://gofrp.org/zh-cn/docs
