需求
先来说说场景,因在上海某三方租房平台,所以不太方便找网线运营商商索要公网 ip,但自己又需要外网访问Fnos nas
中的文件和手机相册备份,只能是另辟蹊径找外网访问的方案了。
其实Fnos
的中继也可以使用,但Fnos
本就是为爱发电,我也顺便有自己的服务器和域名,则就减少他们的压力尽绵薄之力吧。 🐶
简单介绍
frp 工作原理
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。
由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
sequenceDiagram participant 用户端 participant 客户端 participant 服务端 用户端->>服务端: 发送请求 服务端->>客户端: 监听端口访问
内网代理 客户端->>服务端: 端口响应返回给服务端 服务端->>用户端: 响应请求
实现隧穿
这里只实现简单的 http|https
的穿透访问
搭建时候的注意点: 搭建的注意点主要是端口号
上面已经知道 frp 的工作为两个端,我们就分两个端分开配置与说明
公网服务端
首先就是服务端 docker-compose.yml
配置
frps compose 及说明
|
|
这个文件使用了 snowdreamtech/frps
docker
镜像默认不写版本号则为最新版本。
更多版本查看可以看 这里
command
表示 frps 在运行的时候追加的参数,其处理下来大约是这样的: /usr/bin/frpc -c /app/config/frps.toml
ports
表示在服务端 frpc 所使用的端口映射。(与下面的 toml
文件中配置相对应),如果你的公网服务器有别的配置,注意端口号不要冲突了。
frps.toml 配置及说明
|
|
bindPort
: 是服务端的监听端口,默认使用的是 7000,我这里使用的是 27000vhostHTTPPort
: 是服务端对http
类型代理的监听端口,如果需要配置http web
页面就需要配置这个端口,我这里使用的是 27001auth.token
: 是做登录鉴权的,是一个字符串,与内网客户端配置成一样的就行了。
还有很多其它的配置可以看这里: https://gofrp.org/zh-cn/docs/reference/server-configures/
内网设备端
内网设备端与就是 nas
设备,fnos
系统所在
注意文件镜像名写服务端不同,一个是frps
,一个是frpc
frpc compose 及说明
|
|
内网设备这里,我使用的是 host 模式,也就是不需要在去映射 frpc 里使用的端口了,直接作用到宿主机上的。
大致配置与服务端是相同的,这个只是docker frpc
运行来使用的,与 frpc
的运行时配置不同,运行时的端口与代码配置在 frpc.toml
中
frpc.toml 配置及说明
|
|
serverAddr
: 服务端外网的 ip 地址serverPort
: 连接外网服务端的端口号,也就是服务端 frps.toml
中的bindPort
auth.token
: 登录鉴权,同服务端的auth.token
相同
[[proxies]]
: 表示一个代理项目,是数组的,所以如果有配置多个代理可以直接添加多个
一个web
代理中,需要注意的就是 ip
和port
。 这里要注意,这个是客户端的局域网 ip
和 web
服务的端口号。
还有很多其它的配置可以看这里: https://gofrp.org/zh-cn/docs/reference/client-configures/
引用与文档
- https://gofrp.org/zh-cn/ # frpc 文档
- https://hub.docker.com/r/snowdreamtech/frpc # docker 镜像