本文最后更新于 2024-10-25,文章内容可能已经过时。

使用 Cloudflare Tunnel 为没有https的本地服务加上https

本教程将指导你如何使用 Cloudflare Tunnel 将本地服务暴露到互联网上,并为其提供安全的访问。Cloudflare Tunnel 可以帮助你绕过防火墙和 NAT 限制,实现对本地服务的远程访问。

1. 前置要求

在开始之前,你需要具备以下条件:

  • 一个 Cloudflare 账户(注册 Cloudflare)
  • 已经在 Cloudflare 中添加了一个域名
  • 一台可以运行 Cloudflare Tunnel 的服务器或本地计算机
  • 需要暴露到互联网上的服务可以在运行 Cloudflare Tunnel 的服务器上访问

2. 安装 Cloudflare Tunnel 客户端(可跳过)

如果没有特别的需求,推荐使用官方页面提供的命令一键完成安装和配置,本节主要针对需要手动安装 cloudflared 客户端的情况。

2.1 在 Linux 上安装

# 使用官方脚本安装
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/

2.2 在 Windows 上安装

  1. 下载 cloudflared Windows 版本
  2. 将下载的文件解压缩,并将 cloudflared.exe 存放的路径添加到环境变量中。

2.3 在 macOS 上安装

brew install cloudflared

3. 配置 Cloudflare Tunnel

在这一部分,我们将创建一个 Tunnel 并进行配置。

3.1 登录 Cloudflare 账户

在浏览器打开 Cloudflare 登录页面,登录后选择页面左侧的Zero Trust。
1729407329919.png

3.2 进入Tunnel控制面板

继续点击页面左侧的Tunnels,进入Tunnels选项卡后点击Create a tunnel

1729407470022.png

3.3 创建一个新的 Tunnel

  1. 选择使用Cloudflared创建
    1729407663571.png
  2. 为Tunnel取一个名字,点击save tunnel
    1729407747198.png

4. 配置 Tunnel

  • 在Configure界面选择需要安装Cloudflared的服务器的架构
    1729407909744.png
  • 将左侧代码块中的内容直接粘贴到目标服务器的命令行中。
  • 如果安装出现问题请回到第二步手动安装Cloudflared,并运行右侧代码块中的内容。
  • 完成后点击Next进入路由配置

5. 配置路由

  • 为了通过 Cloudflare Tunnel 在公网访问内网服务,需要正确设置路由
  • 假如你希望通过test.example.com访问运行在服务器8080端口的服务,你应该
    1. 在Subdomain填test
    2. 在Domain下拉选择你托管在cloudflare的域名
    3. 除非你有特别的需求,否则Path可以不填
    4. Type下拉选择HTTP
    5. URL填本地访问的链接,即localhost:8080
    6. 恭喜,如果不出意外,你的Cloudflare Tunnel已经正常运行了。
      1729408742760.png

6. 故障排除

  1. 在排查Cloudflare Tunnel前请先排查自己的服务是否正常!
  2. 首先进入Tunnels页面,查看Tunnel的状态是否为HEALTHY,如果为INACTIVE或其它状态则需要进一步排查Cloudflared
  3. 如果Connectors显示No origins connected,请重新安装Cloudflared
    1729409050364.png
  4. 如果Tunnel的状态为HEALTHY,但仍然无法连接,则是路由出现问题,请重新检查路由是否正确。