//MAGICBOOK / 魔法书POSTS / 2024-07-16-DOCKER-CLOUDFLARETUNNEL
74 POSTS66 TAGS3 CATEGORIES
CodingSTATUS / PUBLISHED

【Docker】部署CloudflareTunnel零信任访问隧道

尝试为没有公网Ip的服务器提供访问手段。

FILE / 20240716-41
AUTHOR / MAGICNUE
TYPE / CODING RECORD

“——Cloudflare Tunnel 为您提供了一种将资源连接到 Cloudflare 的安全方法,无需公共可路由 IP 地址。”

01 什么是Cloudflare Tunnel?

简单地说,想要远程访问一个服务器需要服务器的IP地址,这从原理上就注定是不安全的。Cloudflare提供的一项服务把服务器与互联网直接隔绝开,通过建立数条不暴露IP地址的隧道提供服务来确保安全性。 然而,这项功能对于防火墙内的NAS/个人服务器机主而言是意外的惊喜——这可以说是一种内网穿透,为被层层NAT隔绝的家用服务器提供了开辟一条通道的手段。 Cloudflare Tunnel的特点:

  • 免费而稳定,这项服务由老牌网络服务商Cloudflare提供,代表了服务的高可靠性。
  • 速度慢、延迟高,因为通过隧道访问网络需要途径境外的节点。
  • 部署需要拥有自己的域名和服务器。

使用Cloudflare Tunnel创建隧道可以将 HTTP Web 服务器、SSH 服务器、远程桌面和其他协议安全地连接到 Cloudflare,也就是部署到外网。

handshake_hufad68abf6107ffc2ef859ebe1b42b6e2_299675_1768x1102_resize_q75_box-Bn-llS_B

02 部署

创建隧道

进入Cloudflare的控制板,在Zero Trust服务中找到Tunnels(隧道),然后创建一条新的隧道。

  1. 点击创建新隧道
  2. 选择隧道类型:Connector(连接器)选择Cloudflared
  3. 命名隧道

部署隧道连接器

在服务器上部署连接器。考虑到连接器需要稳定、长久地运行,建议使用Docker来部署。 点击Docker部署后,在Install and run a connector项可以看到CF给出的部署命令:

docker run cloudflare/cloudflared:latest \
tunnel --no-autoupdate \
run --token <token>

或者,建议使用docker-compose来便利地快速部署:

version: "3"
services:
  cloudflare:
    command:
      - tunnel
      - run
    container_name: cloudflare
    deploy:
      resources:
        limits:
          memory: 512M
    environment:
      - TUNNEL_TOKEN=<token>
    hostname: cloudflare
    image: cloudflare/cloudflared:latest
    network_mode: bridge
    privileged: false

最后使用docker compose up -d来启动部署。

创建主机连接

现在回到Cloudflare的控制台上。 假设我们已经由一个Nginx提供的HTTP页面服务,运行在80端口上; 那么我们现在,点击Public Hostname来创建一个公开连接: 格式:

<subdomain>.<domain>/<path>
<type>://<url>:<port>

示例:

web.magicnue.top
http://172.17.0.1:80

现在保存,然后访问这个网站;我们会惊喜地发现这个网站能够访问、并且CF为我们自动配置好了SSL证书,我们可以直接通过https协议来访问这个网站了。

03 另外……

  1. 保存好docker-compose.yml文件,以在未来具备快速部署的能力;另外还要记得及时更新镜像版本。
  2. CF除了ZeroTrust的隧道服务外,还提供了加密访问、CDN、主动攻击防护等强大的功能,不愧是赛博仙人。