合法且注重隐私的发布

使用 Cloudflare 隧道和 VPN 在家匿名托管网站

本指南展示如何通过 Cloudflare 隧道发布本地网站,隐藏家庭 IP,且可选择先通过 VPN 路由 cloudflared。

隐私边界很重要:访客无需知道你的住宅 IP,但 Cloudflare 仍知晓你的账户,VPN 提供商也能知道你连接了 Cloudflare。

本文仅支持合法隐私保护。

本文针对合法的自托管、测试、发布和研究,不支持欺诈、恶意软件、钓鱼、骚扰或其他非法活动。

此设置实际保护内容

实际目标不是从所有服务商消失,而是阻止普通访客、扫描器和常规 DNS 查询获知你的住宅 IP 或直接访问路由器。

隐藏访客的住宅 IP

DNS 可指向 Cloudflare 而非家庭地址,避免随意查询暴露托管位置。

保持路由器关闭

命名隧道仅支持出站,因此网站本身无需进行入站端口转发。

限制直接暴露源站

你的网站可以保持在 localhost 或其他私有接口,Cloudflare 负责公共访问。

保持现实的威胁模型

这是针对访客的隐私保护,不是对 Cloudflare、VPN 提供商或你账户轨迹的隐身。

谁还能识别你

思考匿名家庭托管的最佳方式是分离受众,每个受众了解故事的不同部分。

访客

  • 他们能看到你的公共主机名、TLS 表面,以及你有意暴露的内容、头信息、分析和 Cookie。
  • 当 DNS 仅指向隧道时,他们通常看到的是 Cloudflare 边缘 IP,而非你的家庭 IP。
  • 如果你从同一设备或浏览器配置登录同一后台,他们仍能识别管理员浏览器指纹。

Cloudflare

  • Cloudflare 知晓账户、区域、隧道 UUID、配置的主机名及隧道健康状态。
  • Cloudflare 还能看到 cloudflared 用于连接的源 IP,可能是你的家庭 IP 或 VPN 出口 IP。
  • VPN 可以隐藏 Cloudflare 看到的住宅源 IP,但无法消除与 Cloudflare 账户的关联。

VPN 提供商

  • VPN 提供商仍能看到你的设备与 Cloudflare 之间保持加密流量。
  • 如果 VPN 绑定了你的常用邮箱或支付身份,隧道外仍存在关联。
  • VPN 会改变 Cloudflare 看到的源 IP,但不会消除你对 VPN 提供商的信任。

你更广泛的身份轨迹

  • 域名注册信息、恢复邮箱、支付记录和重复用户名仍可能将项目关联到你。
  • 从个人浏览器登录管理面板可能将网站与日常身份关联。
  • 实际上,匿名性既依赖于隧道,也依赖于操作纪律。

流量路径工作原理

清晰路径很简单:公共端在 Cloudflare 终止,私有端保持本地服务,仅 cloudflared 可访问。

01 访客

请求你的主机名并到达 Cloudflare 边缘网络。

02 Cloudflare

终止 HTTPS,应用规则,并将请求转发到命名隧道。

03 cloudflared.exe

维护从 Windows 机器到 Cloudflare 的仅出站隧道连接。

04 本地网站

在 localhost 或其他私有源地址响应,未直接暴露于互联网。

VPN 所在位置

如果 cloudflared 先使用 VPN,Cloudflare 会将 VPN 出口 IP 视为连接源 IP。若 VPN 断开且无杀开关,cloudflared 可能通过普通 ISP 路由重新连接。

cloudflared.exe 在 Windows 上的作用

cloudflared.exe 不是 VPN,也非匿名网络。它是 Cloudflare 连接器,负责隧道认证、保持长连接,并将公共主机名映射到本地服务。

创建并认证命名隧道

你可以登录一次,创建命名隧道,并复用它以获得稳定主机名,而非依赖一次性链接。

维护冗余的出站连接

Cloudflare 文档说明每个隧道保持多个长连接,确保路径在某条线路断开时依然稳定。

将主机名映射到私有服务

配置文件可以将 app.example.com 指向 http://localhost:3000,而不会将 localhost 变成公共源。

可交互运行或作为 Windows 服务运行

你可以先在终端测试隧道,之后再转换为常驻 Windows 服务。

支持多种服务,不仅限网站

Cloudflare 隧道可发布 HTTP、HTTPS、TCP、SSH、RDP 等私有服务,本指南仅聚焦网站。

Windows 设置:cloudflared.exe 逐步指南

此流程假设网站已在本地运行,且域名已使用 Cloudflare DNS。示例使用 app.example.com 和本地 3000 端口服务。

以下所有命令请使用 PowerShell 7,复制前替换示例主机名、隧道名和本地服务。

01

步骤 1:定义将复用的值

在 PowerShell 7 中启动,替换示例主机名、隧道名和本地服务为你的值后继续。

CLIPowerShell 7
$TunnelName = "ghostly-home-site"
$PublicHostname = "app.example.com"
$LocalService = "http://localhost:3000"
$CloudflaredHome = "C:\Cloudflared\bin"
$ConfigPath = "$env:USERPROFILE\.cloudflared\config.yml"
02

步骤 2:准备 cloudflared.exe

重命名下载的二进制文件,创建专用文件夹并复制可执行文件进去。

CLIPowerShell 7
Rename-Item "$env:USERPROFILE\Downloads\cloudflared-windows-amd64.exe" "cloudflared.exe"
New-Item -ItemType Directory -Force $CloudflaredHome
Copy-Item "$env:USERPROFILE\Downloads\cloudflared.exe" "$CloudflaredHome\cloudflared.exe"
03

步骤 3:切换到工作文件夹并验证二进制文件

进入文件夹,确认 cloudflared.exe 能正常启动后再进行认证。

CLIPowerShell 7
Set-Location $CloudflaredHome
.\cloudflared.exe --version
04

步骤 4:登录并授权 Cloudflare 区域

此操作会打开浏览器以便你批准区域,账户证书写入默认的 .cloudflared 目录。

CLIPowerShell 7
.\cloudflared.exe tunnel login
05

步骤 5:创建命名隧道并保存其 UUID

创建隧道后,将命令输出的 UUID 粘贴到下方变量,供后续命令复用。

CLIPowerShell 7
.\cloudflared.exe tunnel create $TunnelName
$TunnelId = "<paste-the-tunnel-uuid-from-the-create-output>"
06

步骤 6:逐行编写 config.yml

这些命令在你的 Windows 配置文件中构建本地 config.yml,使隧道知道哪个公共主机名应转发到哪个本地服务。

CLIPowerShell 7
Set-Content $ConfigPath "tunnel: $TunnelId"
Add-Content $ConfigPath "credentials-file: $env:USERPROFILE\.cloudflared\$TunnelId.json"
Add-Content $ConfigPath ""
Add-Content $ConfigPath "ingress:"
Add-Content $ConfigPath "  - hostname: $PublicHostname"
Add-Content $ConfigPath "    service: $LocalService"
Add-Content $ConfigPath "  - service: http_status:404"
07

步骤 7:审查并验证配置

打印文件以便检查,然后让 cloudflared 验证入口规则,再发布 DNS。

CLIPowerShell 7
Get-Content $ConfigPath
.\cloudflared.exe tunnel ingress validate
08

步骤 8:创建 DNS 路由并检查隧道

这告诉 Cloudflare 哪个主机名应指向命名隧道,供你开始提供线上流量前使用。

CLIPowerShell 7
.\cloudflared.exe tunnel route dns $TunnelName $PublicHostname
.\cloudflared.exe tunnel info $TunnelName
09

步骤 9:前台运行隧道

测试时保持此 PowerShell 7 窗口打开,完成后按 Ctrl+C 停止。

CLIPowerShell 7
.\cloudflared.exe tunnel run $TunnelName
可选:将隧道转换为 Windows 服务

仅在交互式隧道正常工作后执行此操作。请在提升权限的 PowerShell 7 窗口运行以下命令,因服务使用系统配置路径和注册表项。

01

服务步骤 1:安装 Windows 服务外壳

为此可选步骤打开提升权限的 PowerShell 7 窗口,先安装 Cloudflared 服务。

CLIPowerShell 7 (Admin)
Set-Location $CloudflaredHome
.\cloudflared.exe service install
02

服务步骤 2:将 cert.pem、凭据和配置复制到系统配置文件夹

Windows 服务运行于系统配置文件夹,因此需要独立的 .cloudflared 文件夹,包含证书、隧道凭据和 config.yml。

CLIPowerShell 7 (Admin)
$SystemCloudflaredHome = "C:\Windows\System32\config\systemprofile\.cloudflared"
New-Item -ItemType Directory -Force $SystemCloudflaredHome
Copy-Item "$env:USERPROFILE\.cloudflared\cert.pem" "$SystemCloudflaredHome\cert.pem"
Copy-Item "$env:USERPROFILE\.cloudflared\$TunnelId.json" "$SystemCloudflaredHome\$TunnelId.json"
Set-Content "$SystemCloudflaredHome\config.yml" "tunnel: $TunnelId"
Add-Content "$SystemCloudflaredHome\config.yml" "credentials-file: $SystemCloudflaredHome\$TunnelId.json"
Add-Content "$SystemCloudflaredHome\config.yml" ""
Add-Content "$SystemCloudflaredHome\config.yml" "ingress:"
Add-Content "$SystemCloudflaredHome\config.yml" "  - hostname: $PublicHostname"
Add-Content "$SystemCloudflaredHome\config.yml" "    service: $LocalService"
Add-Content "$SystemCloudflaredHome\config.yml" "  - service: http_status:404"
03

服务步骤 3:将 ImagePath 指向系统配置并启动服务

Cloudflare Windows 服务文档要求 Cloudflared ImagePath 指向系统配置文件。

CLIPowerShell 7 (Admin)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Cloudflared" -Name ImagePath -Value "C:\Cloudflared\bin\cloudflared.exe --config=C:\Windows\System32\config\systemprofile\.cloudflared\config.yml tunnel run"
sc.exe start cloudflared

这与 Cloudflare Windows 服务流程一致:将 cert.pem 和隧道凭据复制到系统配置文件夹,编写系统配置的 config.yml,然后将 Cloudflared 服务的 ImagePath 指向该配置。

VPN 部署与加固规则

隧道的隐私性取决于其下层路由。若想让 Cloudflare 看到 VPN 出口 IP 而非住宅 IP,VPN 必须在 cloudflared 启动前成为连接路径的一部分。

在 cloudflared 之前启动 VPN

先验证主机的公网 IP,若机器仍显示 ISP IP,隧道连接时 Cloudflare 也会看到该 IP。

使用真正的杀开关

若 VPN 断开且无防火墙限制,cloudflared 可能通过普通住宅路由重新连接。

保持源站本地化

尽可能将网站服务绑定到 localhost 或私有接口,确保隧道是唯一的公共访问路径。

将日志视为敏感信息

Cloudflare 文档警告调试日志可能记录请求 URL、方法、协议、内容长度和头信息,日常操作请使用普通日志。

可选 VPN 方案及对比

想要快速 VPN 方案或更全面对比?

如果想快速开始,下面的轮换 VPN 按钮会打开一个当前选项。若想先比较多个方案,请使用完整的提供商目录。

当前轮换选择: Proton VPN

隧道停止但 DNS 记录仍有效时,访客通常会看到 Cloudflare 错误,直到连接器恢复。虽有噪音,但优于悄悄泄露家庭 IP。

信任前的验证清单

不要因为网站能加载就认为设置是私密的,要像运维一样检查路由,而非营销人员。

DNS 解析到 Cloudflare,而非你的家庭 IP

快速的外部查询应显示面向 Cloudflare 的记录,而非住宅地址。

隧道启动前,主机显示 VPN 出口 IP

先检查机器的公网 IP,了解 Cloudflare 连接端看到的地址。

网站可在其他网络访问,无需端口转发

从移动数据或其他外部网络测试,避免被本地路由捷径误导。

VPN 断开时不会允许回退到住宅网络

模拟一次失败情况。如果 cloudflared 通过 ISP 路由重新连接,隐私模型即被破坏。

何时选择更简单的 GhostlyShare 方案

GhostlyShare

如果只需临时公开预览、快速客户演示或 webhook 回调,GhostlyShare 是更简单的方案,避免大量手动配置 Cloudflare 面板、DNS 和 config.yml。

需要完全控制隧道、DNS、服务账户路径及长期家庭托管时,使用手动 cloudflared。若更注重速度而非流程,使用 GhostlyShare。

查看 GhostlyShare

匿名家庭托管常见问题

Cloudflare 还知道我是谁吗

是的。Cloudflare 仍知晓账户、区域、隧道及到达其边缘的源 IP。VPN 可替换 Cloudflare 看到的住宅源 IP,但无法消除账户关联。

访客会看到我的家庭 IP 吗

通常不会,如果你的 DNS 只指向 Cloudflare,且未以其他方式暴露源站。访客访问的是 Cloudflare 边缘和公共主机名,而非隧道后的住宅 IP。

我需要路由器端口转发吗

不需要。Cloudflare 隧道仅支持出站,连接器主动连接 Cloudflare,而非等待互联网入站流量。

我可以只在需要时运行 cloudflared.exe 吗

是的。仅临时使用时可在 PowerShell 交互式运行隧道,若需登出或重启后保持可用,再转换为 Windows 服务。

VPN 断开会怎样

没有杀开关,cloudflared 可能通过普通住宅路由重新连接,Cloudflare 会看到家庭 ISP IP,因此失败情况和成功情况同样重要。

这足以让整个项目匿名吗

不行。域名注册、支付、恢复邮箱、浏览器指纹和管理员行为仍能识别你,隧道只解决了暴露问题的一部分。

相关指南