Docker部署FRP实现内网穿透

内容分享2小时前发布
0 0 0

一、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文件夹
**

Docker部署FRP实现内网穿透

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

服务器端配置文件编写完毕后,保存为**
frps.ini
**,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)

Docker部署FRP实现内网穿透

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

服务器端配置文件编写完毕后,保存为**
frps.toml
**,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)

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配置文件编写完毕后,保存为”
docker-compose.yml
“,然后上传到NAS的docker目录下的frps中(第一步中自定义的目录)
Docker部署FRP实现内网穿透

5、设置镜像加速地址


如果当前注册表可以直接下载镜像文件,本步骤则不用管。

毫秒:https://docker.1ms.run

Docker部署FRP实现内网穿透

6、新增项目

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

Docker部署FRP实现内网穿透

项目名称:自定义,
只要不与当前已有项目冲突即可

路径:选择docker下创建的frps目录,此时会自动读取到frps目录下的docker-compose.yml文件。

Docker部署FRP实现内网穿透

然后点击”下一步”,完成项目的创建后,会自动启动项目,从日志中可看到已成功启动
Docker部署FRP实现内网穿透

7、服务控制面板访问

浏览器中输入”http://NAS域名:54307″,端口与前面配置文件**
frps.ini
**中保持一致
Docker部署FRP实现内网穿透

输入用户名、密码,对应**
frps.ini
或者frps.toml配置文件中的设置
dashboard_user

dashboard_pwd
**,登录后,如下图即为部署FRP服务端成功
Docker部署FRP实现内网穿透

三、windows客户端使用


备注:如果是windows或者移动终端用户,直接在github中开源项目发行页面下载可执行文件,如果是Linux文件,可以直接在docker中部署FRP客户端(FRPC)来使用。

这里以windows服务器为例

1、下载客户端

客户端发行页面: https://github.com/fatedier/frp/releases
Docker部署FRP实现内网穿透

可根据终端类型,自行下载对应文件,这里说明一下arm64和amd64的区别和选择

amd64:适配 Intel、AMD 的主流 CPU(如家用 PC、大部分云服务器 CPU)。arm64:适配华为鲲鹏、AWS Graviton、树莓派 CPU、手机处理器等 ARM 架构芯片。

这里下载的安装包为”
frp_0.65.0_windows_amd64.zip
“,解压到某个磁盘目录下,具体如下:

Docker部署FRP实现内网穿透

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
**,然后放到解压的目录下,具体如下:
Docker部署FRP实现内网穿透

3、启动客户端

在cmd命令行中,启动frpc.exe,具体如下:


.frpc.exe -c .frpc.toml
4、配置路由器端口

服务端配置文件中**
vhostHTTPPort
**值为当前需要开通的端口号

Docker部署FRP实现内网穿透

5、配置光猫端口

Docker部署FRP实现内网穿透

6、访问web应用

在浏览器中用客户端配置文件中的域名和端口号组合访问即可。http://customDomains:localPort

四、常见问题

1、在windows服务器上执行frpc.exe文件报错一

报错信息: open ./frpc.ini: The system cannot find the file specified.
Docker部署FRP实现内网穿透

原因: 标准的可执行文件包中没有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服务端需要增加对应的端口配置参数:
vhost_http_port
(ini配置文件),如果是toml配置文件的话,需要增加配置参数:
vhostHTTPPort

4、json: cannot unmarshal string into Go value of type v1.ServerConfig

Docker部署FRP实现内网穿透

是toml配置文件语法错误,检查配置项,这里是因为toml配置值少了后面的双引号导致的。
Docker部署FRP实现内网穿透

五、引用链接

开源项目地址 https://github.com/fatedier/frp

FRP官网中文文档 https://gofrp.org/zh-cn/docs

© 版权声明

相关文章

暂无评论

none
暂无评论...