Cloudflare Zero Trust:Cloudflare Tunnel使用教程

知了 2024-01-26 23:52 1

Cloudflare是什么应该不用过多介绍了,本帖聊一下Cloudflare Tunnel的用法。


cf tunnel 是什么?



Cloudflare Tunnel为您提供了一种安全的方式,将您的资源连接到Cloudflare,而无需公共可路由的IP地址。使用Tunnel,您不会将流量发送到外部IP地址,而是在您的基础设施中创建一个轻量级的守护程序,仅向Cloudflare的全球网络创建出站连接。Cloudflare Tunnel可以安全地将HTTP Web服务器、SSH服务器、远程桌面和其他协议连接到Cloudflare。这样,您的源站可以通过Cloudflare提供流量,而不会容易受到绕过Cloudflare的攻击。



(摘自官方文档)


有什么用?


tunnel字面意思一根加密隧道直接从Cloudflare网络插到你的服务器,提供webui页面方便管理域名与服务器上部署的项目之间的绑定。



  • 项目部署上线更简单,只需建立好隧道,然后设置域名指向项目暴露的本地地址和端口即可。

  • 无需编写任何 Nginx 配置,非常适合像我这样的懒人或小白用户。

  • 无需配置证书,使用加密隧道,项目不会直接暴露到公网上,从而增强了安全性。(ps: 需开启防火墙)


如何工作的?


大致流程为:


用户 —> cf服务器 —> cf侧tunnel设置入口 --(加密)–> 服务器侧的tunnel出口 → 本机项目



开始搭建


1. 在Cloudflare的侧边栏中,找到并点击Zero Trust 菜单。如果是首次使用,需要进行订阅,选择免费套餐进行开通。



2. 在进入Zero Trust面板后,从侧边栏中找到并点击Tunnel 菜单。



3. 创建一条隧道(cf侧)



3.1 隧道类型选Cloudflared



3.2 设置隧道名,名字随便取,我个人习惯于取能够辨识服务器的名称。



3.3 安装环境选Docker,记得复制docker的安装命令以备后用。



3.4 不用点下一步,直接在左上角点击返回,即可确认隧道已成功创建。




4. 服务器侧隧道设置


在第3.3节中,我们获得了一个类似于以下的docker命令:


docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9

先别着急用,需要添加几个docker参数,注意network需要设置为host。讲一下我之前遇到的坑,docker启动容器默认会使用桥接模式(bridge),在后面域名绑定时,127.0.0.1:port是cloudflared这个容器内部的地址,如果你的项目也是使用docker的桥接模式启动的,那么就无法找到对应的服务。当然也可以用172.17.0.1:port这个地址进行绑定,但还是建议让cloudflared容器以host模式启动。


docker启动命令


docker run -d --restart always --network host --name cloudflared cloudflare/cloudflared tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9

or


docker-compose配置


version: '3'

services:
cloudflared:
image: cloudflare/cloudflared
container_name: cloudflared
restart: always
network_mode: host
command: tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9

5. 配置域名和部署项目的绑定


5.1 点击前面创建的隧道Configure



5.2 添加Public Hostname



5.3 配置域名与服务器上的项目端口,类型有很多可选的,选http即可。



5.4 配置完成后,尝试访问你的域名以确认是否设置成功。

最新回复 (19)
  • BenSu 01-27 08:46
    1

    学习了下…

  • ko0 01-27 10:43
    2

    学到了 佬

  • Linux 01-27 13:24
    3

    赞 ^-^ ^-^ ^-^

  • 印亭 坡 01-28 01:47
    4

    那么,登录方式是怎么做到呢 ^-^

  • 陈窜稀 01-28 10:18
    5

    大佬牛逼。

  • lao 01-28 10:41
    6

    这样是不是相当于内网的端口直接用域名就可以访问了?

    ddns和内网穿透这些都不用管,路由器上做个端口映射就行了?

    赶紧试试

  • lao 01-28 11:26
    7
    version: '3'
    services:
    cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: always
    network_mode: host
    command: tunnel --no-autoupdate run --token **************

    出现这样的提示:


    Incorrect Usage: flag provided but not defined: -token
  • 知了 楼主 01-28 13:04
    8

    检查一下cloudflare/cloudflared这个镜像有没有拉下来

  • lao 01-28 13:12
    9
    Incorrect Usage: flag provided but not defined: -token
    NAME:
    cloudflared tunnel run - Proxy a local web server by running the given tunnel
    USAGE:
    cloudflared tunnel run [command options] TUNNEL-ID
    OPTIONS:
    --force, -f By default, if a tunnel is currently being run from a cloudflared, you can't simultaneously rerun it again from a second cloudflared. The --force flag lets you overwrite the previous tunnel. If you want to use a single hostname with multiple tunnels, you can do so with Cloudflare's Load Balancer product. (default: false)
    --help, -h show help (default: false)

    docker容器 输出的日志是这样的。

    镜像拉下来了


    用命令和docker-compose 部署了几次,都是这个提示:


    Incorrect Usage: flag provided but not defined: -token
  • 知了 楼主 01-28 13:17
    10

    域名绑定后,可以在cf域名解析看到多了一条cname记录,指向991dc231-3165-xxxx-xxxxx-xxxxxxxxxxxx.cfargotunnel.com这个地址,前面一长串id是创建的隧道的id,简单理解为域名到隧道入口这个过程。


  • lao 01-28 13:19
    11

    嗯,这个也有了



    这里显示的意思是没有连上吧

  • 知了 楼主 01-28 13:26
    12

    应该是镜像不是最新的,试试 docker pull cloudflare/cloudflared:2024.1.5

  • lao 01-28 13:30
    13

    好了。

    重新拉取了镜像以后就ok了


    谢谢大佬

    奇怪的是用 latest 标签为啥拉取不到最新的镜像。

    拉到2020年的

  • 知了 楼主 01-28 13:37
    14

    时常抽风 ^-^

  • tingtao xiaobai 01-29 09:41
    15

    这个tunnel和使用cloudflare的源服务器证书(SSL),有什么区别?我还是有点不懂,都是通过cf加密访问。

  • Ray 02-04 18:19
    16

    非常有帮助的教程,刚才通过这种方式连接到家里的Portainer.

    刚开始502报错, 实测把TLS验证关闭即可.

    谢谢!

  • 根儿🛡️ 02-05 15:27
    17

    中午成功了, 但是现在日志报错如下, 这个咋解决呢


    2024-02-05T07:24:11Z ERR Unable to establish connection with Cloudflare edge error="TLS handshake with edge error: EOF" connIndex=0 event=0 ip=198.41.200.23
    2024-02-05T07:24:11Z ERR Serve tunnel error error="TLS handshake with edge error: EOF" connIndex=0 event=0 ip=198.41.200.23
    2024-02-05T07:24:11Z INF Retrying connection in up to 1m4s connIndex=0 event=0 ip=198.41.200.23
  • 根儿🛡️ 02-05 15:42
    18

    现在又变成dgraded状态了

  • 鹿目円香 Pro Max 02-05 15:44
    19

    4. 服务器侧隧道设置


    在第3.3节中,我们获得了一个类似于以下的docker命令:


    docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9

    先别着急用,需要添加几个docker参数,注意network需要设置为host。讲一下我之前遇到的坑,docker启动容器默认会使用桥接模式(bridge),在后面域名绑定时,127.0.0.1:port是cloudflared这个容器内部的地址,如果你的项目也是使用docker的桥接模式启动的,那么就无法找到对应的服务。当然也可以用172.17.0.1:port这个地址进行绑定,但还是建议让cloudflared容器以host模式启动。


    docker启动命令


    docker run -d --restart always --network host --name cloudflared cloudflare/cloudflared tunnel --no-autoupdate run --token eyJhIjoiMjQ4MmIzM2Y3Njc3YWE5OWE5NThiZjcxNTdkMzU1ZmYiLCJ0IjoiOTFmYzdhOWQtYThiZC00MmY2LThlOTEtMDMwYWZjNDA3MjRmIiwicyI6IlkyRm1OamM0TXpZdE1qVTBaaTAwTTJZNUxUZ3hOV1V0TXpOaE9XVmpNV1F4Wm1ZeCJ9





    • Docker 命令那段是不是暴露 Token 了

* 帖子来源Linux.do
返回