Unraid上搭建Cloudflare Tunnels

Unraid上搭建Cloudflare Tunnels

黑田奈奈子 742 2022-09-28

Cloudflare Tunnels(Argo Tunnel) 通过在你的环境中部署轻量级连接器,在你的服务和 Cloudflare 之间创建一个安全的、仅限出站的连接。

先决条件

对于此设置,你需要有一个由 CloudFlare 管理的域,并且可以在免费计划中完成。

设置步骤

  1. 在 Unraid 终端中,运行以下命令以使用要设置隧道的 Cloudflare 站点授权 Cloudflared
docker run -it --rm -v /mnt/user/appdata/cloudflared:/home/nonroot/.cloudflared/ cloudflare/cloudflared:2021.8.2 tunnel login

它将打印出 Cloudflare 的链接。将此链接复制到浏览器中打开,登录Cloudflare,然后选择您要使用的域。然后,守护进程会自动拉取证书。

  1. 现在我们需要创建一个隧道。在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 文件的名称找到它。

  1. 现在我们需要创建一个 config.yaml 来配置隧道
vi /mnt/user/appdata/cloudflared/config.yaml
  1. 现在粘贴以下内容并修改你的反向代理 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

有关入口规则以及如何配置它们的更多信息,请参见此处

  1. 现在可以在Unraid中安装程序了。
  • 转到 应用 选项卡
  • 搜索 cloudflared
  • 找到cloudflare/cloudflared。Unraid默认模板为cloudflare/cloudflared:2021.6.0,需要自行修改下版本号为2021.8.2
  • 先别点击应用,需要进行以下更改:
  1. 点击启用右上角的“高级视图”。
    在发布参数中你应该会看到如下命令。将 UUID 替换为在步骤 2 中生成的隧道的 UUID。
发布参数:tunnel run UUID
  1. 修改完成之后点击应用启动容器。如果一切都正确无误,你应该有一个正在运行的隧道!

1

  1. 下一步将是编辑你的域 DNS 记录。
  • 如果已经有 A 记录,可以删除它,因为现在不需要它。
  • 添加指向域根 (@) 的 CNAME 记录,在内容选项框内添加 UUID.cfargotunnel.comUUID替换为步骤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 访问

  1. 为要进行 SSH 访问的子域创建 DNS 记录。
Type NAME Value TTL Status
CNAME ssh @ Automatic Orange ☁️
  1. 添加入口规则

入口规则自上而下解析,因此此规则应高于 - 服务:https://REVERSEPROXYIP:PORT/规则。

- hostname: ssh.domain.com
    service: ssh://SSHIP:PORT
  1. 注册 Cloudflare 团队

• 点击这里注册,免费计划最多可容纳 50 个用户,但需要计费详细信息,可以在没有计划的情况下使用它。

  1. 为您的 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

删除隧道还会使与该隧道关联的凭据文件无效,这意味着无法重新建立这些连接。