关于cloudflared tunnel

Cloudflare Tunnel 是一款隧道软件,可以快速安全地加密应用程序到任何类型基础设施的流量,让您能够隐藏你的 web 服务器 IP 地址,阻止直接攻击,从而专注于提供出色的应用程序。

工作方式如下:

Tunnel 后台程序在您的源 web 服务器和 Cloudflare 最近的数据中心之间创建一条加密隧道——无需打开任何公共入站端口。

使用防火墙锁定所有源服务器端口和协议后,HTTP/S 端口上的任何请求都会被丢弃,包括容量耗尽 DDoS 攻击数据泄露尝试被完全阻止,例如传输中数据窥探或暴力登录攻击。

以上的是依惯例复制粘贴的介绍 ,cloudflared tunnel的作用类似于内网穿透,并且可以自定义域名。

初级食用方法

所需材料:

  • cloudflared账号一个

  • 已解析到cloudflared的域名一个

  • 一台机器

cloudflared tunnel支持Linux,macos,windows

以下是以x86-64的Ubuntu为例,下载的是deb包,请根据自己的系统进行选择

  1. 进入官网选着对应自己系统的版本

网址: [cloudflared tunnel](Downloads · Cloudflare Zero Trust docs)

  1. 使用wget命令下载对应版本
1
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
  1. 安装cloudflared
1
apt install ./cloudflared-linux-amd64.deb

注意自身的系统并对应下载的安装包文件名

  1. 登录cloudflared账号
1
cloudflared tunnel login

它会给你一个链接,复制到浏览器打开,并登录cloudflared账号,然后选择域名,授权。

  1. 回到命令行,新建一条隧道,记住id或者隧道名:
1
cloudflared tunnel create [xxxx]  # xxxx为隧道名称,可自定义
  1. 将新建的隧道绑定域名:
1
cloudflared tunnel route dns [隧道名称或者隧道id] [用于内网穿透的子域名]

    注:用于内网穿透的子域名是上一步授权的域名下的子域名,执行后会将该子域名自动解析到授权域名下无需提前创建dns解析

此时在 root/.cloudflared/ 目录下会存在 cert.pem和[隧道的UUID].json 两个文件。

  1. root/.cloudflared/ 目录下新建一个 config.yml 文件填入以下内容:
1
2
3
4
5
6
7
8
tunnel: [隧道的名称或UUID]
credentials-file: /root/.cloudflared/[隧道的UUID].json

ingress:

- hostname: [用于内网穿透的子域名]
service: http://localhost:80 #需要暴露在公网上的内网地址与端口
- service: http_status:404

注:可以同时开启多条隧道,只要新建好隧道绑定好子域名后再配置文件末尾依次填上相应的配置信息即可。

  1. 启动隧道:
1
2
cloudflared tunnel --config [配置文件路径] run  #绝对路径
例如:cloudflared tunnel --config /root/.cloudflared/config.yml run
  1. 挂载成系统服务

若当前目录下有 config.yml 配置文件则:

1
2
cloudflared service install   #挂载系统服务
systemctl start cloudflared #启动cloudflared tunnel服务

若要指定配置文件路径则:

1
2
3
cloudflared --config [文件路径] service install  #绝对路径
例如:cloudflared --config /root/.cloudflared/config.yml service install
systemctl start cloudflared #启动cloudflared tunnel服务
  1. 重启cloudflared tunnel服务
1
systemctl enable cloudflared
  1. 其他代码
    1
    2
    cloudflared tunnel list  #已配置隧道列表
    cloudflare tunnel delete [隧道名] #删除隧道

末尾有话要说

第七步中的 ingress: 字段支持的服务类型与 service: 值如下:

服务类型 说明 service值
HTTP/S 常规网页服务 https://localhost:8000
TCP TCP连接 tcp://localhost:2222
SSH SSH连接 ssh://localhost:22
RDP 远程桌面(RDP) rdp://localhost:3389

    cloudflared tunnel的这个内网穿透蛮好用的,我其实已经稳定使用有近乎一年了,没发现期间出现问题。这篇文章也是我基于以前的一份手稿写出来的。之前配置隧道我是有在记录其中的操作步骤的,所以并不排除有错误地方,而我本人是实际操作结合大神们的博文写下的手稿,既然我配置成功了说明应该问题是不大的,所以将手稿写成了这篇文章。希望帮到有需要的人。