← back

Cloudflare Tunnel 指北

详解如何配置并使用cloudflare tunnel,以及说明为什么建议使用cloudflare tunnel服务

😀 前言:
如果你正在挑选一个可靠且免费的内网穿透服务,那么 Cloudflare Tunnel 应该就是最完美的选择

1. 简介

Cloudflare Tunnel 是一款由 Cloudflare 提供的内网穿透工具,它允许你将位于内网的服务器或服务安全地暴露到互联网上,而无需在防火墙上打开任何入站端口,这就意味着可以即便你没有公网IP,也可以将自己的服务,网站等绑定到自己的域名上,而且不需要太过担心安全问题,证书问题,备案问题等


2. Cloudflare Tunnel 的优劣

2.1 优势

2.2 劣势

个人觉得这两个小劣势在优势面前都可以忽略,而且对于域名的DNS托管或者是域名的迁移,个人认为是利大于弊的,尤其是对于那些域名托管在国内的用户而言,网站需要备案这一条就很烦人了!

3. Cloudflare Tunnel 配置

3.1 准备

3.2 安装cloudflared

选择任意一个内网的机器,安装cloudflared,待会用于获取设备的认证密钥等,具体的安全请参考官方安装文档,其中详细的说明了各种操作系统的安装方法

3.3 获取认证证书

⚠️ Note : 这个证书是一个身份认证密钥,并不会直接作用于cloudflare tunnel的配置,仅仅使用下一步创建 tunnel 时候的身份认证

cloudflared login

根据提示,打开网页进行登录后,然后会在~/.cloudflared/cert.pem 位置生成一个证书

3.4 创建 tunnel

⚠️ Note : 如果你没有进行上个步骤的操作,本步骤是无法创建成功的

cloudflared tunnel create your-tunnel-name

3.5 配置 cloudflared 服务

为了稳定性以及数据的备份方便,这里通过 docker 来使用 cloudflared 服务

  1. 新建文件夹 : mkdir -p ~/docker/cloudflared

  2. 拷贝 <TUNNEL_UUID>.json

    cp ~/.cloudflared/
    <TUNNEL_UUID>.json 
    ~/docker/cloudflared
    chmod 644 ~/docker/cloudflared/
    <TUNNEL_UUID>.json
  3. 配置config.yml文件:修改相关的TUNNEL_UUIDhostnameservice

    # ~/docker/cloudflared/config.yml
    
    tunnel: 
    <TUNNEL_UUID>
    
    # 这里是容器内的路径,不要修改,只更改 TUNNEL_UUID 即可
    credentials-file: /etc/cloudflared/
    <TUNNEL_UUID>.json
    
    loglevel: info
    protocol: http2
    
    # 注意为了统一管理,我们将域名的映射等全部放在云端配置,所以不配置 ingress
    # ingress:
    #  # 规则一:代理 server1
    #  - hostname: 
    server1.your.hostname
    
    #    service: 
    http://192.168.1.100:8080
     # 假设映射到了局域网内
    192.168.1.100
    主机的 8080 端口
  4. 配置 docker-compose.yml

    # ~/docker/cloudflared/docker-compose.yml
    
    version: '3.8'
    
    services:
      cloudflared:
        image: cloudflare/cloudflared:latest
        container_name: home-cft # 换个名字以示区分
        restart: unless-stopped
        command: tunnel --config /etc/cloudflared/config.yml run
        volumes:
          # 将当前目录下的所有文件挂载进去
          - ./:/etc/cloudflared/
        # 添加 extra_hosts 使得 host.docker.internal 生效
        # 这是让容器内能解析 host.docker.internal 到宿主机的关键
        extra_hosts:
          - "host.docker.internal:host-gateway"
        # 
    使用 http2 访问速度会快很多
    
        environment:
          - TUNNEL_TRANSPORT=http2
  5. 启动 : docker compose up -d

  6. 配置DNS解析记录:cloudflare默认是不会自动配置DNS解析的

    1. 登录个人账户,选择要使用的域名,这个域名就是你上述配置文件中所使用的那个域名
    2. 选择DNS,添加DNS记录
      1. 类型:CNAME
      2. 名称:上述配置文件中所使用的,例如server1,server2
      3. 内容:<TUNNEL_UUID>.cfargotunnel.com
    3. 代理状态:已代理(橙色🟠云朵)
  7. 访问:此时应该就可以通过域名访问对应的服务了

3.6 在线配置代理地址

可以在配置上述的配置文件的时候就完成对域名以及本机地址端口等配置,但是更加推荐使用云端的配置,并且云端与本地是互斥的,所以只推荐在云端做配置

  1. 使用Cloudflare的Zero Trust,访问https://one.dash.cloudflare.com/

  2. 左侧边栏 网络 → Tunnels , 即可看到自己创建的 cloudflare tunnle

    1. 点击连接器ID,可以看到一些日志信息,并且如果你所配置的服务是之前通过本地的配置文件创建的,其会提醒是否要转成在线的配置
    2. 点击尾部的三个点,可以看到配置,其中的公共主机名中可以进行相关的域名配置,具体可见下图

    image.png

💡 有关本问的问题,欢迎您在底部评论区留言,一起交流~