Skip to content

最优雅的 Homelab 远程访问方案:Cloudflare Tunnel 零信任实践 ​

Homelab 异常断电修复实录:从半夜关机到 vCenter 重生示意图

从外网安全访问家里的 ESXi 和 vCenter,不需要公网 IP,不需要开放端口,只需要一个域名。

为什么需要这样的方案? ​

在 Homelab 的实践中,一个很现实的需求是:当你不在家时,如何安全地访问家里的服务器?

传统的做法通常涉及:

  • DDNS + 端口转发:需要在路由器上开放端口,存在一定的安全风险。
  • VPN 服务器:需要配置 WireGuard/OpenVPN,对网络环境有一定要求。
  • 内网穿透服务:通常需要安装客户端,且依赖第三方服务。

而我这次想分享的,是一个更优雅、更安全、也更符合现代 Web 安全理念的方案——Cloudflare Tunnel。

这个方案能做什么? ​

  • 安全访问 ESXi:https://esxi.your-domain.com -> 家里的 ESXi 管理界面
  • 安全访问 vCenter:https://vcenter.your-domain.com -> 家里的 vCenter 界面
  • 可扩展:未来添加 GitLab、K8s Dashboard 等服务,只需在配置文件中新增一行规则

方案原理简析 ​

Cloudflare Tunnel 会在你家里的服务器和 Cloudflare 边缘节点之间建立一条加密的、持久的隧道。外部用户通过域名访问时,请求会先到达 Cloudflare 边缘节点,再通过这条隧道安全地转发到你的内网服务。

整体架构如下:

  1. 家里的 Homelab 上运行轻量级守护进程(cloudflared),主动连接到 Cloudflare 边缘节点。
  2. 外部用户访问你的域名(如 esxi.your-domain.com)时,DNS 解析指向 Cloudflare。
  3. Cloudflare 边缘节点通过加密隧道,将请求转发到内网的 cloudflared。
  4. cloudflared 将请求转发到对应的内网服务(如 ESXi 的 192.168.0.201:443)。
  5. 响应数据沿原路返回,全程加密。

准备工作 ​

在开始之前,确保你已经具备以下条件:

条件说明
Cloudflare 账号你拥有的域名已在 Cloudflare 上托管
一台 Linux 虚拟机用于运行 cloudflared 守护进程(如 Ubuntu 22.04 LTS)
内网服务信息ESXi、vCenter 等服务的 IP 地址和端口

部署步骤 ​

第一步:在 Linux 虚拟机上安装 cloudflared ​

登录到你的 Linux 虚拟机(例如 k8s-infra-224),执行以下命令:

bash
# 下载并安装 cloudflared
wget -q https://github.com/cloudflare/cloudflared/releases/download/2026.7.2/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

# 验证安装
cloudflared --version

第二步:认证并绑定域名 ​

bash
cloudflared tunnel login

命令执行后会返回一个授权链接。在浏览器中打开该链接,选择你的 Cloudflare 域名,完成授权。

提示:授权成功后,cloudflared 会在你的虚拟机中生成一个 cert.pem 证书文件,用于后续的身份验证。

第三步:创建隧道并配置访问规则 ​

3.1 创建隧道 ​

bash
# 创建一个名为 homelab 的隧道
cloudflared tunnel create homelab

执行后会生成一个 Tunnel UUID 和一个 credentials 文件(如 <Tunnel UUID>.json),请妥善保管。

3.2 配置隧道路由规则 ​

在虚拟机中创建配置文件 ~/.cloudflared/config.yml:

yaml
tunnel: <你的 Tunnel UUID>   # 替换为刚才生成的 UUID
credentials-file: /root/.cloudflared/<Tunnel UUID>.json

ingress:
  # 将 esxi.your-domain.com 指向 ESXi 管理界面
  - hostname: esxi.your-domain.com
    service: https://192.168.0.201:443
    originRequest:
      noTLSVerify: true       # ESXi 使用自签名证书,需跳过校验

  # 将 vcenter.your-domain.com 指向 vCenter 管理界面
  - hostname: vcenter.your-domain.com
    service: https://192.168.0.202:443
    originRequest:
      noTLSVerify: true

  # 默认规则:其他请求返回 404
  - service: http_status:404

3.3 配置 DNS 记录 ​

执行以下命令,将域名指向你的隧道:

bash
cloudflared tunnel route dns homelab esxi.your-domain.com
cloudflared tunnel route dns homelab vcenter.your-domain.com

这一步会自动在 Cloudflare DNS 中添加 CNAME 记录,指向你的隧道。配置完成后,需等待 1-2 分钟 DNS 生效。

3.4 运行隧道 ​

bash
cloudflared tunnel run homelab

如果一切正常,你可以在浏览器中访问 https://esxi.your-domain.com,看到 ESXi 的登录界面。

3.5 配置为系统服务(持久运行) ​

如果你希望隧道在后台持久运行,可以将 cloudflared 安装为系统服务:

bash
sudo cloudflared service install

访问流程说明 ​

  1. 你在外网浏览器中访问 https://esxi.your-domain.com。
  2. DNS 解析指向 Cloudflare 边缘节点。
  3. Cloudflare 边缘节点通过已建立的加密隧道,将请求转发到你家里的 cloudflared 守护进程。
  4. cloudflared 将请求转发到内网的 ESXi IP(192.168.0.201)。
  5. 响应数据沿原路返回,整个传输过程都通过 Cloudflare 的全球网络加速。

这个方案的优势 ​

特性说明
无需开放端口不需要在路由器上配置任何端口转发,减少了被扫描攻击的风险
自动 HTTPSCloudflare 自动提供 SSL 证书,支持强制 HTTPS 访问
零信任架构结合 Cloudflare Zero Trust,可以添加访问策略(如邮箱验证码)
可扩展添加新服务只需在 config.yml 的 ingress 中新增一行
稳定可靠即使你的公网 IP 变化,隧道也会自动重建
免费额度Cloudflare Tunnel 对 Homelab 使用者完全免费

一些需要注意的地方 ​

  • TLS 验证:noTLSVerify: true 是必要的,因为 ESXi 和 vCenter 使用自签名证书。这不会降低安全性,因为隧道本身已经加密。
  • 延迟:所有流量经过 Cloudflare 边缘节点,会增加几十到一百毫秒的延迟,对管理访问来说可以接受。
  • 免费流量:Cloudflare Tunnel 本身免费,但有合理的流量限制。对于 Homelab 管理访问,几乎不可能触及。

扩展:添加更多服务 ​

假设你后续部署了 GitLab(http://172.16.0.10:80),只需在 config.yml 的 ingress 中添加:

yaml
  - hostname: gitlab.your-domain.com
    service: http://172.16.0.10:80

然后执行 cloudflared tunnel route dns homelab gitlab.your-domain.com,重启隧道即可。

测试与验证 ​

  1. 本地测试:在虚拟机内执行 curl https://esxi.your-domain.com -k,确认能返回响应。
  2. 外网测试:手机开启 5G 网络,关闭 WiFi,访问 https://esxi.your-domain.com,验证能否正常打开 ESXi 登录界面。
  3. 查看日志:cloudflared tunnel run homelab 会实时输出请求日志,便于排查问题。

结语 ​

现在,你的域名已经成为通往 Homelab 的私人专用通道。无论你身处何地,只要网络可达,就能安全地访问家中的 ESXi、vCenter 以及任何你想暴露的服务。

这套方案的核心价值在于:它把如何安全暴露内网服务这个问题,从开放端口、配置防火墙的运维思维,转变为基于身份和域名的零信任访问的现代安全思维。 希望这份实践记录能为你提供一些参考。


附录:相关 IP 地址参考

  • ESXi 管理地址:https://192.168.0.201
  • vCenter 管理地址:https://192.168.0.202
  • Linux 虚拟机(运行 cloudflared):172.16.0.224
最后更新2026/07/22 11:33
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal