本地管理 Cloudflare Tunnel 内网穿透
自从《网站已迁移至自建 NAS 服务器》之后,我始终没能抽出完整时间,好好梳理一篇关于内网穿透的实操说明。此前依赖的飞牛系统,仅能覆盖 NAS 内部环境的穿透需求,对于后续额外部署的各类私人服务,始终无法实现稳定的远程落地。我也不想为了适配多服务访问而开放过多端口,避免带来不必要的安全风险。
期间我也对比过不少穿透方案,无论免费还是付费类型均有诸多限制,比如:域名备案,成本过高,流量配额不足,始终难以兼顾 “易用性、安全性与性价比”。综合考量后,最终选择了 Cloudflare Tunnels 作为核心穿透方案。尽管受国内网络环境客观影响,可能会出现延迟、阻断等问题,但经过优选地址的链路优化后,不仅能稳稳支撑网站正常运行,还能为 NAS 额外增加一条负载线路,完美平衡了安全性、可用性还能降低不少成本。
本地与在线管理区别
线上管理与本地管理,本质上均依托 Cloudflare 链路实现内网穿透,核心功能与运行逻辑区别不大,仅在管控细节与拓展能力上有差异。其中最关键的一点的是:本地管理支持通配域名配置,这一特性对建站及多子域名用户而言能大幅简化配置流程,而线上管理暂不支持这一功能,其余基础操作的核心体验相近。
开始前注意事项及条件
确保能满足优选地址条件,同时保障链路稳定性与兼容性,需提前满足以下基础条件,避免后续操作踩坑:
- 回源域名:域名需完成 DNS 服务器修改,确保解析权完全由 Cloudflare 管控,后续隧道绑定、证书配置均依赖此域名实现;
(可以将 DNS 托管至 Cloudflare 并正常解析的任意免费域名、便宜的 6 位纯数字 zyx 域名均可) - 主要域名:该域名无需接入 Cloudflare 托管,可自行选择域名 DNS 解析平台,后续远程访问均使用该域名;
回源及隧道创建
前置操作需完成域名托管、工具部署、账号授权、隧道创建及云端基础配置,具体步骤精简总结如下:
- 回源域名域名托管于 Cloudflare 下并将 DNS 记录清空;
- 下载 Cloudflare Tunnels Release 程序至运行目录或配置 Repository 使用
apt/yum安装; - 运行
cloudflared tunnel login登陆接口,将在终端显示出一串网址,将网址复制至浏览器访问,选择已托管的域名完成授权:
授权成功后浏览器将自动下载证书,请将证书文件上传至:~/cloudflared目录,完成本地与云端的身份绑定; - 运行
cloudflared tunnel create <NAME>创建一个隧道,其中<NAME>可自行命名,比如tunnels或其他; - 如果使用 Release 安装则需要运行
cloudflared service install创建服务,以待后续使用; - 进入 Cloudflare 后台 -> 域(Domain) -> DNS 正常能看到一条 CNAME 记录;
- 进入 Cloudflare 后台 -> SSL/TLS -> 自定义主机名(Custom Hostnames) -> 回退源(Fallback Origin),填入托管在 Cloudflare 的域名,添加回退源;
上述云端操作仅需执行一次,完成后即可脱离 Cloudflare 后台,全程通过本地命令行与配置文件管理隧道,实现真正的本地独立运维。
主要域名及优选地址
进入 Cloudflare 后台 -> SSL/TLS -> 概述(Overview) -> SSL/TLS 配置:

加密模式得根据你的服务器使用证书情况进行选择:模式 加密链路 核心特点 适用场景 完全 / 严格(strict) 访客 -> Cloudflare(HTTPS) -> 源服务器(HTTPS) 两端都加密 源服务可信证书 完全(Full) 访客 -> Cloudflare(HTTPS) -> 源服务器(HTTPS) 两端都加密 源服务器自签证书 灵活(Flexible) 访客 -> Cloudflare(HTTPS) -> 源服务器(HTTP) 访问为加密,后端明文通信 源服务器无证书 关闭(Off) 访客 -> Cloudflare(HTTP) -> 源服务器(HTTP) 完全不加密 仅测试环境 - 进入 Cloudflare 后台 -> SSL/TLS -> 自定义主机名(Custom Hostnames) -> 添加自定义主机名(Add Custom Hostname),添加主要域名:

添加完成后,按下图内容去主要域名 DNS 记录管理中添加 A/CNAME 及 TXT 记录用于验证及填写优选地址:

前往主要域名的 DNS 解析后台进行添加验证,以 DNSPod 为例,添加以下记录:主机记录 记录类型 记录值 说明 @ CNAME 托管在 Cloudflare 的域名 用于验证 Custom hostname does not CNAME to this zone 错误 _acme-challenge TXT 6Ngc****g5sI 证书验证 _cf-custom-hostname TXT 3bdc****bb42 域名验证 添加后等待 Cloudflare 验证完成,通过后将上述表格后两条域名 DNS 记录删除,第一条记录改为优选 IP 或 CNAME 地址:
- 保持 CNAME 类型,记录值改为使用 Cloudflare 服务的优质域名(e.g., csgo.com),借助其节点实现链路优化;
- 改为 A/AAAA 类型,记录值填入优选 IP 地址,可通过 CloudflareSpeedTest 工具扫描或自行搜索公开优选地址;
穿透服务器绑定
完成上述配置后,需等待全球 DNS 刷新(通常 10-30 分钟),随后对 Cloudflare Tunnels 进行内网服务绑定与系统服务优化。此时 ~/cloudflared 目录下应存在 cert.pem、<NAME>.json、config.yml 三个文件,具体配置步骤如下:
编辑 config.yml 配置文件,example.com 为代指域名,实际填入你的「主要域名」:
YAML
- tunnel: <UUID>
- credentials-file: ~/cloudflared/<UUID>.json
- ingress:
- - hostname: "example.com"
- service: http://localhost:80
- - hostname: "example.com"
- service: https://localhost:443
- - hostname: "*.example.com"
- service: http://localhost:80
- - hostname: "*.example.com"
- service: https://localhost:443
- - service: http_status:404
我将主域名的 http/https 均进行绑定操作,子域名也以通配域名形式添加,后续只要在 Cloudflare 自定义主机名中添加子域名及配置证书。
当前配置为 Nginx 进行穿透,如果要为飞牛等其他 TCP/UDP 协议进行穿透,可以按上面格式自行添加。也可以参照官方提供文档,添加更多协议。
配置完成后,使用 systemctl [start | restart] cloudflared 启动服务以及 systemctl enable cloudflared 设置开机自动启动。
后记及说明
尽管「本地管理模式」支持通配域名配置,但 Cloudflare 免费版「自定义主机名」功能不支持通配域名证书下发。
若同为 Nginx 穿透环境,新增子域名时仅需两步操作:一、在 Nginx 配置中添加对应子域名的配置文件;二、前往 Cloudflare 「自定义主机名」添加该子域名,按提示在域名 DNS 解析后台添加验证记录,验证通过后删除记录即可。得益于域名 DNS 记录与 Cloudflare Tunnels 配置中的通配域名兜底,无需添加过多冗余条目,极大简化 DNS 记录。
https://www.uevan.com/create-local-tunnel
maple's sky
CC BY-NC 4.0



