前言
本站之前介绍过在群晖中安装 frpc 客户端来实现内网穿透,很多新手不会使用命令行的方式来安装,本文将介绍如何使用 Docker 来简单安装配置 frpc 客户端。
frps 服务器端
freefrp.net 提供了免费 frp 内网穿透服务为广大用户提供测试试用服务。
VIP 服务器信息
免费服务器信息
- 服务器地址:
frp.freefrp.net
- 端口:
7000
- Token:
freefrp.net
- 提供端口:
80 443 10001-50000
- frps 版本为
0.56.0
- frp 信息的更新请访问和收藏专题站点 https://freefrp.net
frpc 客户端安装
完成整个配置大致需要三部
- 配置域名解析
- 编写配置文件
- 启动群晖容器
1. 域名解析
首先,将需要使用的域名在服务商控制台设置 CNAME
指向 frps 服务器地址.
下图以阿里云
为例.
2. 编写 frpc 配置文件
目前 frp 已经更新到0.56.0
版本,新版本修改了配置文件语法格式。所以本文教程也更新到最新版本。
创建 frpc.txt 文件
配置文件使用什么后缀都不影响,例如frpc.ini / frpc.txt / frpc.toml
都是可以的,只是由于群晖的文本编辑器
无法默认打开.toml
后缀文件,所以选择.txt
方便在群晖内直接修改,当然你也可以在电脑上创建编写完毕后在上传到群晖中。后续挂载至 docker 内部时为 toml 格式即可。
使用文本编辑器
来创建一个frpc.txt
文件。
本文以/Docker/frpc/frpc.txt
为例
编辑配置
serverAddr = "frp.freefrp.net"
serverPort = 7000
auth.method = "token"
auth.token = "freefrp.net"
[[proxies]]
name = "web1_nas"
# name 唯一字段,不能和服务器上其他用户的服务名重复。
type = "http"
# http 协议
localIP = "192.168.1.8"
# 需要穿透出去的服务 IP,例如群晖的 IP。
localPort = 5000
# 需要穿透出去的服务端口,例如群晖默认的 http 服务端口 5000。
customDomains = ["nas.yourdomain.com"]
# 自定义域名,上述已经修改过 CNAME 解析的域名,例如 nas.yourdomain.com。
[[proxies]]
name = "linux1_centos7"
# name 唯一字段,不能和服务器上其他用户的服务名重复。
type = "tcp"
# tcp 协议
localIP = "192.168.1.21"
# 需要穿透出去的服务 IP,例如我内网的一台 centos7 服务器的 IP。
localPort = 22
# 需要穿透出去的服务端口,例如 centos7 服务器的 ssh 登录端口。
remotePort = 22222
# 远程穿透端口,此端口不能和服务器上其他用户重复,也要遵循 frps 服务允许的端口范围。
frpc 的配置正确与否是容器能否正常启动的关键,大多网友留言咨询容器启动错误,几乎都是配置不规范导致的。针对新手小白用户,这里详细讲解每一行该如何配置。
如果你复制上述我提供的参考配置,你需要删除上述 # 号行的文字,否则 frpc 会报字符编码错误,建议删除后将文本修改为 UTF-8 或 简体中文(GB18030)。
frpc解读
第一段服务器信息一般不会出错,正确填写提供的信息即可。
第二段详细解读
name = "web1_nas"
必须修改,避免与你自己或者服务器上其他人的名称重复,由于无法知晓其他人设置的名称,建议使用你自己的域名+数字形式,例如[nas_xxx_com_3745283]
。这样能够有效的避免此问题。
type = "http"
穿透的协议,一般是 http 和 https 两种,对应的端口也不同,一定要确保你所选的协议和该协议的端口号保持一致。
localIP = "192.168.1.8"
需要穿透的设备的内网 IP,例如你群晖的内网 IP,注意 frpc 是运行在容器中,请不要填写 127.0.0.1 这样的 IP
。
localPort = 5000
此处也是容易出错的地方,这里为需要穿透的设备的 http 或者 https 协议对应的端口,例如群晖的是 5000 和 5001,那么上述 type 协议选择 http,此处就填写 5000,上述 type 协议如果选择 https,此处填写 5001。如果你曾经在群晖的控制面板内修改过端口,那么就需要改为修改过的端口。另外,内网穿透是无视路由器的端口转发配置,无论你是否设置过路由器,都可以忽略不管。
customDomains = ["nas.yourdomain.com"]
同一个域名可以配置两个协议,http 和 https,由于可能出现的手误,少打一个 s,就会导致同一个域名配置了 2 个相同 http,从而也可能会导致容器出错。请再三检查确保无误。
当第一个配置成功运行,并正常访问后,在来尝试添加更多条配置.
常见错误
- 名称与自己其他配置重复,或者与服务器上重复。
- 协议与域名重复
- 协议与端口配置错误
- frpc.ini 编码问题
3. 创建容器
由于国内网络对官方 docker hub 不太友好,建议无法下载镜像的用户可以修改注册表。
注册表 - 设置 - 新增
注册表名称随意填写
注册表 URL:https://index.docker.io
Docker 镜像下载
注册表 - 搜索 frpc - 选择 stilleshan/frpc - 下载
选择 latest 为最新版本
映像中查看已完成下载
创建容器
选择映像运行
勾选自动重启,也可不勾选。
选择添加文件
弹出本地文件,选择刚才在docker/frpc
文件夹内创建的frpc.txt
右边填写框,请填写 /frp/frpc.toml 不要修改,这个地址是镜像内部 frpc.toml 的路径。
填写完毕下一步完成
容器 - 选中刚才启动的 frpc 容器 - 详情
查看日志连接成功
结语
更多群晖 NAS 相关技巧,教程及信息,请持续关注本站群晖 Synology 专栏:
411 条评论
[...]❕frpc 配置常见问题,新手用户请注意。[...]
我的配置文件如下
serverAddr = "frp.freefrp.net"
serverPort = 7000
auth.method = "token"
auth.token = "freefrp.net"
服务器是不是已经停止运行了 日志一直显示连接不上?
你的frpc很好用。最近想升级。docker pull https://index.docker.io/stilleshan/frpc:0.54.0
docker pull https://registry.hub.docker.com/library/stilleshan/frpc:0.50.0
都无法下载。提示error pulling image configuration:Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/47/47e0e683b4822b5ec4e390ab056082e6f46689
qCKSsT1840kQOH2FoDC]Ov$2F9VfBk%3D":x509:certificate has expired or is not yet valid:current time 2024-06-06T09:03:25+08:00 is after 2021-09-30T14:01:15Z
阿里自建的镜像,只有最新版。可能不兼容。无法使用。
魔法上网,可以看到项目。点击下载,会卡住一会儿。然后失败。
docker pull 在线下载第三方服务 也没syno的。我自己也不会做docer镜像。
我在想你的镜像不错。syno文件能否 123云盘 百度云盘 阿里云盘分享。
我不知道。docker的分享协议有没有限制。
尝试
docker pull dockerproxy.com/stilleshan/frpc:latest
Error response from daemon: Get "https://dockerproxy.com/v2/": read tcp 192.168.2.88:58240->132.145.248.22:443: read: connection reset by peer
这个错误提示第一次见。
docker pull docker.ioiox.com/stilleshan/frpc:latest
verygood。谢谢~成功了。
好的我试试 谢谢OωO
提醒一下,我配置的时候必须要选择host网络,不然即使frps dashboard能看到已经成功连接的客户端,也无法连接任何服务。
你好,感谢你的教程。我根据你的教程搭建frpc,遇到了问题。首先可以确认我的服务端没问题,客户端使用你的群晖容器创建后点击启动提示失败,日志显示为:024/04/12 22:35:53 stdout [0mlogin to the server failed: dial tcp 127.0.0.1:7000: connect: connection refused. With loginFailExit enabled, no additional retries will be attempted
2024/04/12 22:35:53 stdout [0m[1;34m2024-04-12 22:35:53.122 [I] [sub/root.go:160] frpc service for config file [/frp/frpc.toml] stopped
2024/04/12 22:35:53 stdout [0m[1;33m2024-04-12 22:35:53.121 [W] [client/service.go:297] connect to server error: dial tcp 127.0.0.1:7000: connect: connection refused
2024/04/12 22:35:53 stdout [0m[1;34m2024-04-12 22:35:53.121 [I] [client/service.go:294] try to connect to server...
2024/04/12 22:35:53 stdout [1;34m2024-04-12 22:35:53.121 [I] [sub/root.go:142] start frpc service for config file [/frp/frpc.toml]。frp版本是0.57.0,群晖是黑群晖 SA6400,路由器用的OP PPPoE上网,群晖的网关为OP lan IP。公网IP为阿里云ecs,放行了必要的端口的,安装的Ubuntu系统,关闭了防火墙的。我在网上也搜索了相关教程,但没找到答案。在创建容器中的“网络”选项中分别使用了“bridge”和“host”,仍然不行,日志显示的内容没有变化。我不知道怎么解决,希望能得到你的解答,谢谢。
看日志是连接服务器问题,既然你确定服务端没问题,那就排查客户端,连 frp.freefrp.net 的免费服务器试试看能否链接。
感谢你的回复。服务端确实是没问题的,我在网页使用IP+端口访问它的配置页面,可以正常访问,填写账号密码后就可以进入信息面板。我刚试了你提供的服务器,还是不成功。日志内容没变。客户端配置如下:
serverAddr = "frp.freefrp.net"
serverPort = 7000
auth.method = "token"
auth.token = "freefrp.net"
[[proxies]]
name 唯一字段,不能和服务器上其他用户的服务名重复。name = "web1_nas"
type = "http"
http 协议localIP = "192.168.23.120"
需要穿透出去的服务 IP,例如群晖的 IP。localPort = 5000
需要穿透出去的服务端口,例如群晖默认的 http 服务端口 5000。remote_port = 5000
[Synology Drive]
type = "tcp"
local_ip = "192.168.23.120"
local_port = 6690
remote_port = 6690
再有就是我有一个事忘了说了,就是在“储存空间设置”里,选择文件后,要在右侧填写地址,我写上“/frp/frpc.toml"后启动后的日志为:error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ClientConfig。把它改为"/frp/frpc.ini"后启动后的日志就是之前提供的四条日志。我的问题还是没得到解决。。。希望再次得到你的解答,谢谢。
[Synology Drive]
type = "tcp"
local_ip = "192.168.23.120"
local_port = 6690
remote_port = 6690
这段格式也不对
挂载toml是对的,但是要把配置文件中的中文全删除掉。
再次感谢你的解答,配置文件我修改后如下:
serverAddr = "frp.freefrp.net"
serverPort = 7000
auth.method = "token"
auth.token = "freefrp.net"
[[proxies]]
name = "web1_nas"
localIP = "192.168.23.120"
localPort = 5000
remote_port = 5000
[Synology Drive]
name = "web2_nas"
type = "tcp"
local_ip = "192.168.23.120"
local_port = 6690
remote_port = 6690
启动仍然报错,日志为:2024/04/12 23:25:11 stdout error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ClientConfig。
我把我设置截图邮箱发给你,希望你能看一下设置有没有问题,谢谢。