方法一

官网绑卡选择免费计划:https://one.dash.cloudflare.com/
然后直接面板操作,比方法二简单,缺点就是要绑卡(虽然是免费计划,但需要先绑卡)

方法二

本地编写配置文件,不需要去cf绑卡选计划

  1. 下载程序

    1
    2
    3
    4
    5
    6
    7
    8
    //amd架构
    wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/bin/cloudflared

    //arm64、aarch64架构
    wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64 -O /usr/bin/cloudflared

    //其他
    自行官方下载:https://github.com/cloudflare/cloudflared/releases
  2. 设置权限

    1
    chmod +x /usr/bin/cloudflared   #给可执行权限
  3. 登录

    1
    cloudflared tunnel login
    • 终端会给出一个链接,浏览器打开选择域名进行授权,下面授权完成后终端会显示cert.pem地址,保存好,丢失了重新login一次

    • 如果是有二步验证的,需要登录了以后,再次黏贴该地址,因为二步验证结束后并不会自动跳转到该 cloudflared 验证登录页面。

    • 授权的话,每次只能选择一个网站,当然,一个网站也就够用了,我们可以解析很多三级域名啥的。当然如果需要授权多个网站,授权完成后不要关闭网页!依次点击其他需要授权的域名,进行多次授权。

  4. 创建隧道

    1
    2
    //web是隧道名
    cloudflared tunnel create web

    会显示出隧道UUID,也可使用 cloudflared tunnel list 查看

    123是隧道名,名字是可以自定义的,但是不能重复。如果想要查看已经创建的隧道的话,可以输入

    1
    cloudflared tunnel list

    如果要删除,可以输入以下命令删除

    1
    cloudflared tunnel delete web
  5. 配置DNS记录,给隧道分配域名

    cloudflared tunnel route dns <tunnel-name> <domain>,其中的 <tunnel-name>是创建Tunnel时指定的名称,<domain>是自定义的域名,比如 web.example.com:

    1
    2
    //例如:
    cloudflared tunnel route dns web web.example.com
    • 然后 cloudflare 就会在你的域名下自动生成一个 CNAME,把 web.example.com 指向 <隧道 UUID>.cfargotunnel.com
    • 如果还有其他域名需要配置,可以继续执行上面的命令(别忘了改域名)。配置完成后可以前往Cloudflare控制台查看到CNAME记录。

    注意:如果之前添加的有多个不同的二级域名,比如 example1.comexample2.com,只会对第一个添加的 example1.com 生效,后面的 example2.com 域名下的 CNAME 记录需要自行去网站上手动添加了。当然如果只有 example1.com 一个域名就不影响了,可以依旧使用类似以下的命令来创建更多需要的域名解析。
    cloudflared tunnel route dns ednovas ssh.example1.com

  6. 编写配置文件
    创建配置文件config.yml

    1
    vim ~/.cloudflared/config.yml

    然后输入 i ,进入编辑模式,黏贴修改后的配置文件,如下(自行按需修改)
    第四步创建隧道这一步骤的隧道UUID复制下来粘贴到下面的对应的两个位置,并复制粘贴

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # Tunnel UUID,即隧道UUID,就是同目录下的json文件的文件名
    tunnel: <隧道UUID>

    # 鉴权文件路径,注意根据自己的路径修改,下面的例子是Linux的路径
    credentials-file: /root/.cloudflared/<隧道UUID>.json
    protocol: h2mux

    # 服务配置
    ingress:
    # 第一个网站,连接到本地的80端口
    - hostname: <域名1.com>
    service: http://localhost:80
    # 第二个网站,https协议,连接到本地的443端口,禁用证书校验(用于自签名SSL证书)
    - hostname: <域名2.com>
    service: https://127.0.0.1:443
    originRequest:
    noTLSVerify: true
    originServerName: <域名2.com>
    # 第三个网站,8012端口,泛域名
    - hostname: <*.域名3.com>
    service: http://localhost:8012
    # 第四个,反代MySQL sock服务
    - hostname: <mysql.域名4.com>
    service: unix:/tmp/mysql.sock
    # 第五个,反代SSH服务
    - hostname: <ssh.域名5.com>
    service: ssh://localhost:22
    # 最后记得添加一个默认404
    - service: http_status:404

    其中ingress字段可以创建多个服务,支持的服务类型如下表,新建其他服务前需要到 Cloudflare 控制台对其他子域名进行解析。

    服务名称 描述 service 示例值
    HTTP/S 常规网页服务 https://localhost:8000
    TCP TCP 连接 tcp://localhost:25565
    SSH SSH 连接 ssh://localhost:22
    RDP 远程桌面(RDP) rdp://localhost

    上表转自 Cloudflare 官方文档,仅节选常用协议,若需要完整版请至 Ingress rules 页面查看。

  7. 注册为系统服务(自动安装)

    1
    cloudflared service install
  8. 设置自启动

    1
    systemctl start cloudflared
  9. 查看状态

    1
    systemctl status cloudflared

参考