Cloudflare Tunnels(Argo Tunnel) 通过在你的环境中部署轻量级连接器,在你的服务和 Cloudflare 之间创建一个安全的、仅限出站的连接。
先决条件
对于此设置,你需要有一个由 CloudFlare
管理的域,并且可以在免费计划中完成。
设置步骤
- 在 Unraid 终端中,运行以下命令以使用要设置隧道的
Cloudflare
站点授权Cloudflared
。
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared:2021.8.2 tunnel login
它将打印出 Cloudflare
的链接。将此链接复制到浏览器中打开,登录Cloudflare,然后选择您要使用的域。然后,守护进程会自动拉取证书。
- 现在我们需要创建一个隧道。在Unraid终端运行以下命令。
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared:2021.8.2 tunnel create TUNNELNAME
这将创建隧道的 UUID.json
文件,其中包含用于验证你与 cloudflare 的隧道连接的秘钥。JSON 文件仅用于运行隧道,但任何隧道修改都需要 cert.pem
。
复制屏幕上显示 UUID
保存好,后面的步骤中会使用到。也可以通过 JSON 文件的名称找到它。
- 现在我们需要创建一个
config.yaml
来配置隧道
vi /mnt/user/appdata/cloudflared/config.yaml
- 现在粘贴以下内容并修改你的
反向代理 IP:PORT
、隧道 UUID
和域名
(如果需要)
- 如果你的反向代理上有 SSL证书,则需要传入 SSL 证书所在的域名
- 如果要禁用 ssl 验证,请在
originRequest
下添加noTLSVerify
tunnel: UUID
credentials-file: /home/nonroot/.cloudflared/UUID.json
# NOTE: You should only have one ingress tag, so if you uncomment one block comment the others
# forward all traffic to Reverse Proxy w/ SSL
ingress:
- service: https://REVERSEPROXYIP:PORT
originRequest:
originServerName: yourdomain.com
#forward all traffic to Reverse Proxy w/ SSL and no TLS Verify
#ingress:
# - service: https://REVERSEPROXYIP:PORT
# originRequest:
# noTLSVerify: true
# forward all traffic to reverse proxy over http
#ingress:
# - service: http://REVERSEPROXYIP:PORT
有关入口规则以及如何配置它们的更多信息,请参见此处。
- 现在可以在
Unraid
中安装程序了。
- 转到
应用
选项卡 - 搜索
cloudflared
- 找到
cloudflare/cloudflared
。Unraid默认模板为cloudflare/cloudflared:2021.6.0
,需要自行修改下版本号为2021.8.2
。 - 先别点击应用,需要进行以下更改:
- 点击启用右上角的“高级视图”。
在发布参数中你应该会看到如下命令。将 UUID 替换为在步骤 2 中生成的隧道的 UUID。
发布参数:tunnel run UUID
- 修改完成之后点击应用启动容器。如果一切都正确无误,你应该有一个正在运行的隧道!
- 下一步将是编辑你的域 DNS 记录。
- 如果已经有 A 记录,可以删除它,因为现在不需要它。
- 添加指向域根 (@) 的 CNAME 记录,在内容选项框内添加
UUID.cfargotunnel.com
(UUID
替换为步骤2中保存的值)。 - 其他子域的添加方法如下例子,也可添加泛域名解析。
例子
Type | NAME | Value | TTL | Status |
---|---|---|---|---|
CNAME | @ | UUID.cfargotunnel.com | Automatic | Orange ☁️ |
CNAME | plex | @ | Automatic | Orange ☁️ |
CNAME | emby | @ | Automatic | Orange ☁️ |
CNAME | qb | @ | Automatic | Orange ☁️ |
故障排除
证书对任何名称均无效
如果看到类似的错误
in the logs of cloudflared i have this error "ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: x509: certificate is not valid for any names, but wanted to match youdomain.com
尝试将 yourdomain.com 更改为 host.yourdomain.com,其中 host 是拥有 DNS 记录的有效子域。尽管这是一个特定的主机名,Cloudflared 应该能够在您的其他子域通过隧道时验证该名称的证书。
隧道创建不返回 ID
如果在终端中运行命令时,没有返回 ID,请尝试使用指定的容器版本运行命令,如下所示
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared:2021.8.2 tunnel
通过 Web 渲染终端启用 SSH 访问
- 为要进行 SSH 访问的子域创建 DNS 记录。
Type | NAME | Value | TTL | Status |
---|---|---|---|---|
CNAME | ssh | @ | Automatic | Orange ☁️ |
- 添加入口规则
入口规则自上而下解析,因此此规则应高于 - 服务:https://REVERSEPROXYIP:PORT/
规则。
- hostname: ssh.domain.com
service: ssh://SSHIP:PORT
- 注册 Cloudflare 团队
• 点击这里注册,免费计划最多可容纳 50 个用户,但需要计费详细信息,可以在没有计划的情况下使用它。
- 为您的 SSH 服务添加 Teams 应用程序并启用基于浏览器的渲染
• cloudflare 的指南可以在这里找到
列出和删除隧道
要列出所有已配置的隧道并查看活动连接:
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared tunnel list
ID | NAME | CREATED | CONNECTIONS |
---|---|---|---|
十六进制的NAMEID | 隧道名称 | 创建日期和时间 | NUMBERxCFPOINT |
撤销和删除隧道:
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared tunnel delete TUNNELID
如果隧道上仍有活动连接,则需要强制删除。连接将被丢弃:
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared tunnel delete -f TUNNELID
删除隧道还会使与该隧道关联的凭据文件无效,这意味着无法重新建立这些连接。