跳到主要内容

Cloudflared

Cloudflared 是一个免费的内网穿透方案,用于外网访问无公网 IP 的主机。

必需条件:

  • 虽然 Cloudflared 是免费的,但需要绑定 VISA/PayPal。
  • 域名 NameServer 需要指向 Cloudflare
  • 需要启用 Cloudflare CDN(国内访问速度偏慢)

优点:

  • 不需要公网 IP 的服务器
  • 不需要防火墙、反向代理
  • 不需要备案就可以使用 80 和 443 端口
  • 不需要自行申请 SSL 证书
  • 免费

缺点:

  • 国内访问速度慢
  • 相对依赖 Cloudflare 平台

部署(Docker Compose)

首先创建 compose.yaml 文件,并粘贴以下内容:

compose.yaml

version: "3"
services:
cloudflared:
container_name: ${STACK_NAME}_app
image: cloudflare/cloudflared:${APP_VERSION}
network_mode: host
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=${APP_TUNNEL_TOKEN}

(可选)推荐在 compose.yaml 同级目录下创建 .env 文件,并自定义你的环境变量。如果不想使用环境变量的方式,也可以直接在 compose.yaml 内自定义你的参数(比如把 ${STACK_NAME} 替换为 cloudflared)。

.env

STACK_NAME=cloudflared

# cloudflared
APP_VERSION=latest
APP_TUNNEL_TOKEN=xxx # 替换为你的 token

最后,在 compose.yaml 同级目录下执行 docker compose up -d 命令即可启动编排的容器。

配置说明

访问 Cloudflare Zero Trust 面板,在左侧栏选择 Access - Tunnels,点击 Create a tunnel 创建隧道,填写隧道名称(用于区分不同的物理机器)然后保存。记录下 token 后填写在 compose.yaml 中。

随后点进你创建的隧道,在 Public Hostname Page 选项卡中添加代理的端口。举个例子,我绑定在 Cloudflare 的域名是 abc.com,我需要代理的服务本地的端口是 80HTTP 协议,那么我只需要这样填写:

img

即可访问本地的端口。并且,它会帮你自动申请 SSL 证书,直接在公网通过 https 访问。

参考与致谢