找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1593

积分

0

好友

205

主题
发表于 2026-2-11 00:28:58 | 查看: 129| 回复: 0

去做,去错,去尝试。对于许多拥有家庭实验室(Homelab)的用户而言,将内网的服务安全地暴露到互联网上,一直是一个既实用又颇具挑战的需求。无论是想在外访问家里的媒体服务器,还是远程管理部署的服务,传统的端口转发和动态DNS方案不仅配置复杂,还可能带来安全风险。

Cloudflare Tunnel,作为Cloudflare Zero Trust套件的一部分,提供了一种更优雅、安全的解决方案。它通过在您的内部资源与Cloudflare全球网络之间建立出站连接(隧道),从根本上改变了流量路由方式。您无需在家庭路由器上配置端口转发,也无需担心动态公网IP的问题。

运行原理

Cloudflared隧道代理的工作原理,是将流量从Cloudflare的边缘网络安全地引向您的内网服务。

整个流程大致如下:用户的浏览器向域名 example.com 发起HTTP请求。该请求首先到达Cloudflare全球网络的边缘服务器。边缘服务器检查配置,根据主机名到隧道的映射关系,建立连接。请求随后通过已建立的隧道,被转发到您本地网络中的服务器。在您的服务器上,运行的Cloudflared服务(假设命名为“mytunnel”)接收请求。最终,请求被代理到本地实际运行的服务,例如 localhost:8080

隧道本身是一个持久对象,用于将流量路由到您的DNS记录。您可以在同一个隧道中运行多个Cloudflared进程(连接器),这些进程会与最近的Cloudflare数据中心建立连接,从而实现高可用和低延迟。

准备工作

在开始配置前,请确保满足以下条件:

  • 一台内网服务器:用于托管您希望暴露的服务(如Ubuntu Server)。
  • 已安装Docker:虽然Cloudflared可以独立运行,但使用Docker容器化部署更为便捷和一致。
  • 拥有一个Cloudflare托管域名:您需要在Cloudflare账户中添加并管理您的域名(本文示例使用 org870b.ga)。

创建Cloudflare隧道

第一步是在Cloudflare Zero Trust面板中创建隧道实例。

  1. 登录您的Cloudflare仪表盘,在左侧导航栏中找到并点击“Zero Trust”。
  2. 进入Zero Trust面板后,在左侧菜单中依次选择“Access” -> “Tunnels”,然后点击蓝色的“Create a tunnel”按钮。
  3. 接下来为隧道命名。建议使用描述性名称,例如“homelab”,表示这是为家庭实验室网络创建的隧道。输入名称后,点击“Save tunnel”。

安装并运行隧道连接器(Connector)

隧道创建完成后,需要在您的内网服务器上安装并运行连接器,以建立到Cloudflare的出站连接。

  1. 在连接器的安装环境选择页面,您可以看到Windows、Mac、Linux(Debian/Red Hat)和Docker等选项。本例选择Docker方式。
  2. 页面上会显示一个用于安装和运行连接器的Docker命令。该命令包含了用于认证的令牌(Token)。为了管理方便,我们可以在运行前为命令添加 -d(后台运行)和 --name(指定容器名)参数。修改后的命令如下:
    docker run -d --name homelab_tunnel cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiTjFiYwFjMDYzMDN1OTU3NmU4MmvVkZwVlZTQ0M2ZhYjQiLCJ0IjoiN2I1NjA2NjYtODk3NS00ZDkzLWli3MMQtYzYyYmUwOGYxYjVhIiwicyI6IllpHTXhOamcZTxpjdE56WTB0aTAwTVRRMExXSmhOVEV0WjTOakItSX1OREkxTnpBeCJ9

    注意:上述令牌仅为示例格式,实际操作中请使用页面上生成的唯一令牌。

  3. 在您的服务器终端中执行上述命令。Docker会从Docker Hub拉取 cloudflare/cloudflared:latest 镜像并启动容器。输出会显示拉取进度和最终的容器ID。
  4. 使用以下命令确认容器正在运行:
    docker ps -f 'name=homelab_tunnel'

    输出应显示容器状态为“Up”。

  5. 返回Cloudflare Tunnel管理页面,稍等片刻,您应该能看到连接器状态变为“Connected”,并且显示了连接器ID、状态、所在数据中心(例如HKG, DEL)、原始IP和Cloudflared版本等信息。点击“Next”继续。

通过隧道暴露Web应用(以Cockpit为例)

假设您在内网服务器(IP 192.168.1.20)上运行了Cockpit管理面板,本地访问地址为 https://192.168.1.20:9090。现在我们将通过隧道将其暴露到公网。

  1. 在配置公共主机名的页面,进行如下设置:
    • Subdomain: 输入子域,例如 cockpit
    • Domain: 从下拉列表中选择您在Cloudflare托管的域名,例如 org870b.ga
    • Service Type: 选择 HTTPS
    • URL: 填写您服务的内部地址,例如 192.168.1.20:9090
  2. 点击“Additional application settings”展开高级选项。由于Cockpit可能使用自签名证书,需要在此处启用“No TLS Verify”开关,以禁用对来源服务器证书的TLS验证。最后点击“Save tunnel”或“Save hostname”。

配置完成后,您可以在隧道列表页面看到名为“homelab”的隧道,状态为“HEALTHY”,路由地址为 cockpit.org870b.ga。Cloudflare会自动在您的DNS区域中创建一条指向该隧道专用地址(类似UUID.cfargotunnel.com)的CNAME记录,且代理状态为“Proxied”。

现在,您可以通过浏览器访问 https://cockpit.org870b.ga 来远程登录您家庭服务器的Cockpit管理界面,整个过程如同访问任何普通网站一样。

通过隧道暴露SSH服务

Cloudflare Tunnel不仅支持HTTP/HTTPS服务,也支持其他协议如SSH。这意味着您可以在不开放路由器22端口的情况下,安全地进行远程SSH访问。

  1. 在隧道列表页面,找到您的“homelab”隧道,点击右侧的“Configure”。
  2. 在隧道配置页面,切换到“Public Hostname”标签页,点击“Add a public hostname”。
  3. 在新的公共主机名配置中填写:
    • Subdomain: 例如 terminal
    • Domain: 同样选择您的域名,如 org870b.ga
    • Service Type: 选择 SSH
    • URL: 填写您服务器的内网SSH地址和端口,例如 192.168.1.20:22
  4. 点击“Save hostname”。

至此,您已为SSH服务添加了公共主机名 terminal.org870b.ga。要使用它进行连接,您需要在客户端计算机上安装 cloudflared 二进制文件,并配置SSH客户端。

客户端连接配置(以Windows为例)

  1. 从Cloudflare开发者页面下载适用于您操作系统的 cloudflared 客户端,例如Windows的可执行文件。
  2. 将其放在一个固定路径,例如 C:\Tools\cloudflared-windows-amd64.exe
  3. 编辑SSH客户端的配置文件(~/.ssh/config),添加以下内容(请替换为您的主机名和可执行文件路径):
    Host terminal.org870b.ga
        ProxyCommand C:\Tools\cloudflared-windows-amd64.exe access ssh --hostname %h
  4. 保存配置文件后,即可在终端中使用以下命令连接:
    ssh <你的用户名>@terminal.org870b.ga

    系统会通过Cloudflare隧道安全地建立SSH连接。

总结与场景展望

Cloudflare Tunnel为家庭实验室和云原生应用的公网访问提供了一种革命性的方案。它免去了复杂的网络配置,利用Cloudflare强大的边缘网络作为安全屏障,极大地简化了内网服务暴露的流程。

您可以基于此方案,安全地将家庭网络中的多种服务对外开放,例如:

  • 个人密码管理器(如Vaultwarden)
  • 媒体服务器(如Jellyfin, Plex)
  • 代码仓库(如Gitea)
  • 物联网控制面板

这意味着无论您身在何处,都能安全、便捷地访问和管理您的私有服务,真正实现了“家庭实验室上云”的体验。对于开发者和运维人员而言,这无疑是一个提升个人生产力和服务可用性的强大工具。

参考资料

[1] Cloudflare隧道:将家庭网络安全地暴露到互联网上, 微信公众号:mp.weixin.qq.com/s/cjXsfvKsb3uHB2lBRT-0iQ

版权声明:本文由 云栈社区 整理发布,版权归原作者所有。




上一篇:腾讯会议AI纪要被玩家“玩坏”:从办公工具到游戏战地记者的技术解析
下一篇:SDPA统一原理:从最优传输到强化学习与信息几何的深度联系
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 14:18 , Processed in 0.645752 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表