:命令行隧道代理与零信任访问全指南)
网络通信后端CLI【免费下载链接】cloudflaredCloudflare Tunnel client项目地址https://gitcode.com/gh_mirrors/cl/cloudflared点击查看免费下载Cloudflare Tunnel client即cloudflared是 Cloudflare Tunnel 的命令行客户端一个常驻进程daemon负责在 Cloudflare 网络与你的源站origin例如本地 Web 服务器之间建立出站连接并代理流量。本文围绕仓库根目录的 README.md 展开结合 cmd/cloudflared/main.go、cmd/cloudflared/tunnel、cmd/cloudflared/access、Makefile、Dockerfile 等源码系统讲解安装、Tunnel 创建与流量路由、TryCloudflare 快速隧道、版本兼容策略以及从源码构建与开发测试的完整流程。读完本文你将能独立完成 cloudflared 的部署、命名隧道的创建与运行、DNS/负载均衡/私有网络路由的配置以及使用cloudflared access在 Layer 4SSH、RDP 等场景下访问受保护源站。1. cloudflared 是什么一个不出站的隧道代理cloudflared是一个隧道守护进程它代理从 Cloudflare 网络到源站的流量。该 daemon 位于 Cloudflare 网络和你的源站如 Web 服务器之间Cloudflare 吸引客户端请求并通过这个 daemon 将请求发送给你无需在防火墙firewall上开放任何入站端口——你的源站可以保持尽可能封闭的状态。这正是 Cloudflare Tunnel 的核心价值即使没有公网 IP、没有端口转发只要源站能发起出站连接就能对外提供服务。从 cmd/cloudflared/main.go 的main()可以看出CLI 程序本身基于urfave/cli/v2构建app.Usage定义为 Cloudflares command-line tool and agent并注册了update、version、tunnel、access、tail、management等命令族。所有与代理到源站相关的用法都通过cloudflared tunnel help暴露。除了 HTTP/WebSocket 反向代理cloudflared还可以用于访问由cloudflared tunnel保护的源站上的 TCP 流量Layer 4即非 HTTP/WebSocket典型场景包括 SSH、RDP 等。这类用法集中在cloudflared access help下。此外你还可以使用 WARP 客户端Cloudflare WARP client在客户端一侧访问 Tunnel 背后的私有源站 Layer 4 流量而无需在客户端运行cloudflared access命令。2. 开始之前Cloudflare 账户的准备工作在使用 Cloudflare Tunnel 之前需要在 Cloudflare 控制台完成几个前置步骤——为你的 Cloudflare 账户添加一个网站website。README 特别说明如今即使没有网站也可以使用 Tunnel例如用于私有路由但由于历史原因该前置要求仍然存在向 Cloudflare 添加网站Add a website to Cloudflare将域名 nameserver 改为 Cloudflare 托管Change your domain nameservers to Cloudflare。这两步是 DNS 记录由 Cloudflare 权威托管的前提后续cloudflared tunnel route dns创建 CNAME 记录时依赖该托管关系。完成后再进入安装与认证环节。3. 安装 cloudflared二进制、Docker、系统包与源码构建README 列出的安装渠道包括独立二进制standalone binaries、Docker 镜像、Debian / RPM 包、Homebrew 包。发布版本可在 cloudflared 的 GitHub Releases 页面获取。具体渠道平台安装方式macOS通过 Homebrew 安装或下载最新的 Darwin amd64 版本二进制Linux下载二进制、Debian 包或 RPM 包Docker使用 DockerHub 上的cloudflare/cloudflared镜像Windows按照官方文档的步骤安装从源码构建先安装 Development 一节所述的 Go 版本然后执行make cloudflared3.1 Docker 镜像的默认行为仓库内的 Dockerfile 展示了镜像的构建与运行方式多阶段构建builder 阶段用golang:1.26.8运行阶段使用 distroless base以非 root 用户65532:65532运行ENTRYPOINT [cloudflared, --no-autoupdate]CMD [version]。这意味着容器内默认关闭自动更新因为容器镜像的更新由镜像自身管理并以version命令作为默认启动命令。构建时还设置了CONTAINER_BUILD1环境变量用于让 metrics 服务按虚拟化环境方式绑定地址见 Makefile 中-X ...metrics.Runtimevirtual的注入逻辑。3.2 从源码构建源码构建非常简单在满足依赖后直接运行make cloudflaredMakefile 中cloudflared目标的核心命令是GOOS$(TARGET_OS) GOARCH$(TARGET_ARCH) $(ARM_COMMAND) go build -modreadonly $(GO_BUILD_TAGS) $(LDFLAGS) $(IMPORT_PATH)/cmd/cloudflared其中TARGET_OS/TARGET_ARCH会自动从本机go env GOOS与uname -m推导支持 linux/darwin/windows/freebsd/openbsd以及 amd64/arm64/arm/s390x 等架构见 MakefileLDFLAGS注入Version、BuildTime等构建信息。另外make cloudflared-deb、cloudflared-rpm、cloudflared-msi可分别构建 Debian、RPM 与 Windows MSI 安装包。4. 创建 Tunnel 并路由流量登录、创建、路由、运行安装完成后你需要先认证cloudflared到 Cloudflare 账户然后开始创建 Tunnel 来向源站提供流量。核心流程如下与 cmd.go 中命令文档一致$ cloudflared tunnel login # 获取证书 cert.pem $ cloudflared tunnel create my-first-tunnel # 创建命名隧道 $ cloudflared tunnel route dns my-first-tunnel my-first-tunnel.mydomain.com # 路由 DNS $ cloudflared tunnel run my-first-tunnel # 运行隧道4.1 登录认证logincloudflared tunnel login会引导完成浏览器 OAuth 流程并将生成的cert.pem保存到本地默认路径由credentials.FindDefaultOriginCertPath()解析默认目录为~/.cloudflared/参见 config/configuration.go 中defaultUserConfigDirs的定义。这个证书用于管理创建/路由/删除属于你账户的隧道。4.2 创建命名隧道createcloudflared tunnel create my-tunnelcreate子命令的实现在 subcommands.go它要求恰好一个参数隧道名并支持--credentials-file凭据文件路径、--secretBase64 编码的隧道密钥解码后至少 32 字节不指定则自动生成随机 32 字节密钥见 generateTunnelSecret与--outputjson/yaml 输出选项。创建成功后隧道凭据Tunnel credentials JSON含AccountTag、TunnelSecret、TunnelID会写入本地文件文件名形如TunnelID.json权限为0400见 writeTunnelCredentials。该文件是后续run必需的凭据。4.3 路由流量到 Tunnel路由是定义Cloudflare 边缘如何把请求代理到这个隧道README 给出三种方式公有 DNS 记录DNS records in Cloudflare通过cloudflared tunnel route dns TUNNEL HOSTNAME创建指向该隧道的 CNAME 记录公有主机名 Cloudflare Load Balancer通过cloudflared tunnel route lb TUNNEL HOSTNAME LB-POOL将隧道作为负载均衡器源站必要时自动创建 pool 与 load balancerWARP 客户端私有流量private traffic通过cloudflared tunnel route ip NETWORK CIDR TUNNEL将隧道作为私有网络源站供同账户内已加入 Zero Trust WARP 的客户端访问即 README 所述的 Layer 4 私有路由场景。这三个子命令在 buildRouteCommand 中定义。route dns支持--overwrite-dns别名-f覆盖同主机名已存在的 DNS 记录route ip的详细用法见cloudflared tunnel route ip --help。4.4 运行隧道runcloudflared tunnel run [TUNNEL]run子命令buildRunCommand通过隧道名/UUID 或配置文件中的tunnel: TUNNEL字段识别隧道在本地与 Cloudflare 边缘之间建立高可用连接。其关键行为包括需要cloudflared tunnel create生成的凭据文件但如果用 UUID 识别隧道则不需要cloudflared login的 cert.pem也支持直接以 Tunnel Token 运行--token token或--token-file pathtoken 是 Base64 编码的 JSON解析逻辑见 ParseToken优先级高于凭据文件若连接出现历史残留问题cloudflared tunnel cleanup可清除旧连接记录run同时支持--protocolQUIC/HTTP2/auto见 selectProtocolFlag、--post-quantum实验性后量子安全隧道、--features试用开发中功能等选项。运行入口 StartServer 展示了隧道进程的完整组件编排注册信号处理与 systemd 通知、启动自动更新器、创建 metrics/readiness/diagnostic 服务、初始化 orchestrator 与 management 服务、运行连接性 prechecks可用--no-prechecks跳过、最终由 supervisor 启动隧道 daemon并在收到 SIGINT/SIGTERM 时按--grace-period默认 30 秒优雅停机。4.5 其他管理子命令cloudflared tunnel help下还包含Commands()cloudflared tunnel list列出隧道支持--show-deleted/-d、--name、--name-prefix、--id、--whenRFC3339 时间点、--sort-byname/id/createdAt/deletedAt/numConnections、--invert-sort、--output json|yaml等过滤与排序见 buildListCommandcloudflared tunnel info [TUNNEL]展示隧道的活跃连接器connector详情包括连接器 ID、创建时间、架构、版本、源站 IP、边缘节点分布见 buildInfoCommandcloudflared tunnel delete [TUNNEL]按 UUID 或名称删除隧道存在活跃连接时需-f强制删除见 buildDeleteCommandcloudflared tunnel cleanup [TUNNEL]删除隧道的连接记录可用--connector-id限定单台连接器见 buildCleanupCommandcloudflared tunnel token [TUNNEL]获取既有隧道的凭据 token要求隧道创建于 cloudflared 2022.3.0 之后支持--cred-file输出到 JSON 文件见 buildTokenCommandcloudflared tunnel ready调用 metrics 服务上的/ready端点并根据结果返回退出码用于容器/编排环境就绪探针见 buildReadyCommand需要先指定--metricscloudflared tunnel diag收集本机 cloudflared 实例的故障排查信息2024.12.2 引入见 CHANGES.md。5. 快捷试用TryCloudflare 快速隧道Quick Tunnel如果还没有向 Cloudflare 添加网站可以先通过TryCloudflare快速体验 Cloudflare Tunnel。README 明确指出其文档入口而本仓库的 quick_tunnel.go 提供了该能力的实现细节cloudflared tunnel --url localhost:8080RunQuickTunnelquick_tunnel.go会向https://api.trycloudflare.com--quick-service可覆盖默认值见 cmd.go发起 provisioning 请求拿到随机的random.trycloudflare.com主机名与临时凭据然后启动隧道并打印访问地址。README 也给出重要提示这类无账户隧道没有可用性保证no uptime guarantee受 Cloudflare Online Services Terms of Use 约束Cloudflare 保留调查隧道使用行为的权利——因此它只适合测试不适合生产环境。源码注释同样强调Quick tunnels shouldnt be used for production usage并因此强制把连接数覆写为 1quick_tunnel.go。Quick Tunnel 还支持受保护模式通过--allowed-mail指定允许访问的邮箱或通配域名后隧道会用 Cloudflare Access 做 One-Time PIN 认证auth_mode: otp并展示允许的收件人数量与本地源站信息见 buildQuickTunnelRequestBody 与 quickTunnelStartupLines。注意--allowed-mail仅对 Quick Tunnel 有效命名隧道会直接报错见 rejectAllowedMailForNamedTunnel。另外cloudflared tunnel --name NAME --url URL提供一条命令创建 路由可选 运行的 ad-hoc 模式TunnelCommand但官方建议生产环境仍应分步执行各子命令。6. cloudflared access从客户端访问 Layer 4 流量cloudflared不仅能发布服务还能访问由cloudflared tunnel保护的 TCP 服务Layer 4典型如 SSH、RDP、SMB。所有相关命令位于cloudflared access help下实现见 access/cmd.gocloudflared access login url对 Access 应用发起认证流程启动浏览器完成身份提供商IdP认证无头系统会提供 URL。认证成功后生成一个 JWT作用域绑定你的身份、目标应用与会话时长cloudflared将其保存在本地存储。--quiet/-q不打印 JWT--app指定应用 URL--no-verbose仅输出 JWT 到 stdout见 logincloudflared access curl url [curl args...]包装curl并自动把 JWT 注入cf-access-token请求头--allow-request/-ar允许在无 JWT 时继续请求见 curlcloudflared access token url直接产出可用于请求认证的 JWTcloudflared access tcp别名ssh/rdp/smb通过代理把数据发送到 Cloudflare 边缘用于 SSH/RDP/SMB 等 Layer 4 协议。关键选项access/cmd.go--hostname/--tunnel-host/-T应用的主机名环境变量TUNNEL_SERVICE_HOSTNAME--destinationSSH 服务器目标地址环境变量TUNNEL_SERVICE_DESTINATION--url/--listener/-L转发到边缘的本地host:port环境变量TUNNEL_SERVICE_URL--header/-H额外请求头--service-token-id/--service-token-secret使用 Access 服务令牌service token认证环境变量TUNNEL_SERVICE_TOKEN_ID/TUNNEL_SERVICE_TOKEN_SECRET--loglevel日志级别 {debug, info, warn, error, fatal}cloudflared access ssh-config打印可加入~/.ssh/config的示例配置支持--short-lived-cert生成短时证书模式见 sshConfigTemplatecloudflared access ssh-gen --hostname h为指定主机名生成短时证书。README 还提到替代方案在客户端安装 WARP client即可访问 Tunnel 背后的私有源站 Layer 4 流量无需在客户端执行cloudflared access命令——这正是第 4.3 节route ip私有路由的配套场景。7. Breaking Changes 与版本兼容策略README 明确了破坏性变更的定义与节奏定义移除 CLI flags、环境变量、配置键或命令均属于破坏性变更breaking change发布前公告此类移除必须在 Cloudflare Tunnel 的 changelogdeveloper documentation 中的 product/tunnel 分类中提前公告然后再随版本移除版本支持窗口Cloudflare 目前支持距最新发布一年以内的 cloudflared 版本超过一年的旧版本可能遭遇与功能可用性无关的破坏性变更。例如截至 2023 年 1 月支持范围是 2022.1.1 到 2023.1.1。仓库内 CHANGES.md 记录了若干近期的破坏性变更实例可作参考如 2026.4.0 将--edge-ip-version默认值从4改为auto改用系统解析器返回的第一个地址族IPv4-only 用户需显式--edge-ip-version 42026.2.0 移除了proxy-dns功能及相关命令与resolver配置段cmd.go 中proxydns.Command()的注释也印证了这一点——该命令仅保留用于向旧脚本提示错误信息。此外db-connect命令已移除cmd.go。8. 配置文件与运行模式cloudflared还支持以守护/服务模式运行无参数启动时进入 service mode见 main.go它会通过 watcher/file.go 监视配置文件并在文件变化时热重载。配置文件的搜索逻辑位于 config/configuration.go默认文件名config.yml、config.yaml用户目录~/.cloudflared、~/.cloudflare-warp、~/cloudflare-warp非 Windows 系统追加/etc/cloudflared、/usr/local/etc/cloudflaredWindows 下优先使用CFDPATH环境变量或%ProgramFiles(x86)%\cloudflared。配置模型config/model.go包含logDirectory、logLevel、forwarders客户端侧监听器含url、listener、serviceTokenID、serviceTokenSecret、destination、isFedramp用于服务模式的转发配置与tunnels字段。--config path可显式指定配置文件cloudflared tunnel run也支持从配置文件读取tunnel:字段与 ingress 规则详见 ingress/config.go。9. Development从源码开发、测试与贡献9.1 环境要求Requirements根据 README.md 与 go.modgo 1.26GNU Make构建入口capnpCapn Proto 编译器用于重新生成 tunnelrpc/proto 下的协议代码go 1.26可选工具capnpc-gocapnp Go 插件、goimportsimport 排序格式化、golangci-lint静态检查、gomocksgo.uber.org/mockmock 生成。9.2 常用命令命令作用make cloudflared构建二进制Makefilemake test运行全部测试先执行go vet以 JSON 输出并启用 race 检测见 Makefilemake fmt用 goimports/go fmt 格式化代码make lint用 golangci-lint 静态检查make mocks重新生成接口 mock入口 mocks/mockgen.gomake install-hooks安装 pre-push git hookspush 前自动执行make fmt-check lint testmake capnp重新编译 Capn Proto 协议tunnelrpc 与 quic_metadata_protocolmake fuzz运行 fuzz 测试覆盖 packet 解码、quic v3 session、tracing identity 与 validation access validator 等见 Makefile9.3 Git Hooks为减少 CI 失败可安装 pre-push hooks使每次 push 前自动运行 lint 与测试make install-hooks该命令会把 git 的core.hooksPath指向.githooks/其中的 hook 会在每次 push 前依次执行make fmt-check lint test见 Makefile。10. 附仓库源码阅读索引围绕本文主题可继续深入阅读的关键文件入口与命令注册cmd/cloudflared/main.go隧道子命令create/list/info/delete/cleanup/token/route/runcmd/cloudflared/tunnel/subcommands.go隧道命令族与运行编排cmd/cloudflared/tunnel/cmd.goQuick Tunnel 实现cmd/cloudflared/tunnel/quick_tunnel.goAccess 客户端命令cmd/cloudflared/access/cmd.go配置文件模型与默认路径config/configuration.go、config/model.go构建与打包Makefile、Dockerfile协议定义tunnelrpc/proto/tunnelrpc.capnp更新日志破坏性变更参考CHANGES.md提示以上安装、登录、隧道创建与路由、运行、测试等操作均在本机命令行完成若以只读方式浏览本仓库所有源码阅读与验证路径均可用go build/make在本地副本上复现仓库本身无需任何修改。赞分享网络通信后端CLI【免费下载链接】cloudflaredCloudflare Tunnel client项目地址https://gitcode.com/gh_mirrors/cl/cloudflared点击查看免费下载相关推荐Cloudflare Tunnel API 完全指南用 REST API 与 TypeScript SDK 程序化管理隧道Cloudflare Tunnel API 完全指南用 REST API 与 TypeScript SDK 程序化管理隧道 本篇技术指南以 Cloudflar人工智能AI 技能AI 插件Cloudflare Tunnel 实战指南出站式安全隧道、ingress 路由与生产级部署cloudflare-deploy Skill 参考Cloudflare Tunnel 实战指南出站式安全隧道、ingress 路由与生产级部署cloudflare deploy Skill 参考 本指南以人工智能AI 技能AI 插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考