与管理静态 IP 列表和路由不同,您可以使用其主机名(例如 wiki.internal.local)将用户连接到私有 HTTP 和非 HTTP 应用程序。当应用程序具有未知或临时 IP 时(这通常发生在第三方云提供商预配基础设施时),私有主机名路由特别有用。
当用户请求私有主机名时,Cloudflare Gateway 会分配来自 CGNAT 范围的初始解析 IP,以便通过您的隧道将流量路由到正确的私有 IP 地址。有关架构和数据包流的深入分析,请参阅我们的发布博客文章 ↗。
下表总结了与私有主机名路由兼容的 Cloudflare One 产品。请参阅表格图例以获取解读指南。
✅ 产品可正常工作,无注意事项
🚧 产品可使用,但有一些注意事项
❌ 产品无法使用
终端用户可以使用以下流量入口连接到私有主机名:
| On-ramp 方法 | 兼容性 |
|---|---|
| Cloudflare One 客户端 | ✅ |
| PAC 文件 | ✅ |
| 浏览器隔离(Browser Isolation) | ✅ |
| Cloudflare Mesh | ✅ |
| Cloudflare WAN | 🚧1 |
功能可用性
| 客户端模式 |
|---|
| 流量和 DNS 模式 |
| 系统 | 可用性 | 最低客户端版本 |
|---|---|---|
| Windows | ✅ | 2025.4.929.0 |
| macOS | ✅ | 2025.4.929.0 |
| Linux | ✅ | 2025.4.929.0 |
| iOS | ✅ | 1.11 |
| Android | ✅ | 2.4.2 |
| ChromeOS | ✅ | 2.4.2 |
私有主机名路由适用于以下出口。其他流量出口需要基于 IP 的路由。
| 连接器 | 兼容性 | 最低版本 |
|---|---|---|
| cloudflared | ✅ | 2025.7.0 |
| Cloudflare Mesh | ✅ | 2026.6.822.0 (Linux) |
| Cloudflare WAN | ❌ |
本节介绍如何使用 cloudflared 启用对私有主机名应用程序的远程访问。
在连接到私有主机名之前,您必须启用 Gateway 代理。
- 转到 Traffic policies(流量策略)> Traffic settings(流量设置)。
- 在 **Proxy and inspection(代理和检查)**中,开启 Allow Secure Web Gateway to proxy traffic(允许 Secure Web Gateway 代理流量)。
- 选择 TCP。
- 选择 UDP(将流量代理到内部 DNS 解析器所必需)。
- (推荐)要代理
ping和traceroute等诊断工具的流量,请选择 ICMP。您可能还需要更新您的系统以允许 ICMP 流量通过cloudflared。
-
向您的
cloudflare_api_token↗ 添加以下权限:Zero Trust Write
-
使用
cloudflare_zero_trust_device_settings↗ 资源启用 TCP 和/或 UDP 代理:resource "cloudflare_zero_trust_device_settings "global_warp_settings" { account_id = var.cloudflare_account_id gateway_proxy_enabled = true gateway_udp_proxy_enabled = true }
Cloudflare 现在将代理来自注册设备的流量,但在您的 Split Tunnel 设置中排除的流量除外。有关 Gateway 如何转发流量的更多信息,请参阅 Gateway 代理。
您的设备还必须将以下流量转发到 Cloudflare:
- 初始解析 IP:
- IPv4:
100.80.0.0/16 - IPv6:
2606:4700:0cf1:4000::/64
- IPv4:
- 针对您私有主机名的 DNS 查询
配置步骤因您的设备入口而异:
Cloudflare One 客户端
在您的 WARP 设备配置文件中,配置分流隧道(Split Tunnels),使 初始解析的 IP 通过 WARP 隧道进行路由。配置取决于您的分流隧道模式:
- 排除模式:从您的分流隧道列表中删除
100.64.0.0/10。我们建议重新添加未明确用于 Cloudflare One 服务的 IP 范围。这可以减少与可能使用 CGNAT 地址空间的现有私有网络配置发生冲突的风险。 - 包含模式:为以下 IP 地址添加分流隧道条目:
- IPv4:
100.80.0.0/16 - IPv6:
2606:4700:0cf1:4000::/64
- IPv4:
- 排除模式:从您的分流隧道列表中删除
- 在本地域回退(Local Domain Fallback)中,删除您私有主机名的顶级域。这将配置 WARP 将 DNS 查询发送到 Cloudflare Gateway 进行解析。
Cloudflare Mesh
要将主机名的流量吸引到 Mesh 节点而不是 cloudflared 隧道,请向该节点添加主机名路由。上面列出的初始解析 IP必须在 Mesh 节点和客户端设备配置文件中都通过 Cloudflare 进行路由,并且——对于私有主机名——该节点必须能够解析主机名(通过其本地 hosts 文件或 Gateway 解析器策略)。请参阅主机名路由。
Cloudflare WAN
- 确保上述列出的初始解析 IP通过 Cloudflare WAN 路由到 Cloudflare。
- 将您 Cloudflare WAN 网络的 DNS 解析器指向 Cloudflare Gateway。
-
登录 Cloudflare 仪表板,转到 Networking(网络) > Tunnels(隧道)。
Go to Tunnels ↗ -
选择 Create a tunnel(创建隧道)。
-
为您的隧道输入名称。我们建议选择能够反映您希望通过此隧道连接的资源类型的名称(例如,
enterprise-VPC-01)。 -
选择 Create Tunnel(创建隧道)。
-
选择您的操作系统,然后复制安装命令并在您的源服务器的终端上运行。
-
等待隧道连接。连接建立后,选择 Continue(继续)。
-
连接隧道后,转到隧道的 Routes(路由) 选项卡并选择 Add route(添加路由),然后选择 Private hostname(私有主机名)。
-
输入代表您应用程序的完全限定域名 (FQDN)(例如,
wiki.internal.local)。主机名格式限制
- 字符限制:必须少于 255 个字符。
- 支持的通配符:允许使用单个通配符(
*),且它必须代表一个完整的 DNS 标签。 示例:*.internal.local - 不支持的通配符:不支持以下通配符格式:
- 部分通配符,例如
*-dev.internal.local或dev-*.internal.local。 - 中间的通配符,例如
foo*bar.internal.local或foo.*.internal.local。 - 主机名中的多个通配符,例如
*.*.internal.local。
- 部分通配符,例如
- 通配符修剪:前导通配符(
*)会被修剪掉,并假定有一个隐式的点(.)。例如,*.internal.local会保存为internal.local,但会匹配通配符级别的所有子域名(涵盖foo.internal.local,但不涵盖foo.bar.internal.local)。 - 点修剪:允许前导点和尾随点(
.),但会被修剪掉。
-
选择 Save(保存)。
当 Gateway 收到对您私有主机名的请求时,它必须将该主机名解析为私有 IP 地址。根据您的网络拓扑,有两种配置方法。
默认情况下,cloudflared 使用在其主机上配置的私有 DNS 解析器(例如 Linux 上的 /etc/resolv.conf)。
如果运行 cloudflared 的机器已经可以使用本地系统解析器将 wiki.internal.local 解析为私有 IP,则无需进一步配置。您可以跳过至步骤 3。
如果您需要 cloudflared 使用与主机默认解析器不同的特定内部 DNS 服务器,您必须通过 IP/CIDR 路由将该 DNS 服务器显式连接到 Cloudflare。您还需要配置 Gateway 解析器策略以将查询路由到该特定专用 DNS 服务器。
-
要为 DNS 服务器创建 IP/CIDR 路由:
-
转到 Networking(网络) > Routes(路由)。
Go to Routes ↗ -
选择 Add CIDR route(添加 CIDR 路由)。
-
输入您内部 DNS 解析器的私有 IP 地址。
-
选择连接到该 DNS 服务器所在网络的 Cloudflare Tunnel。
-
选择 Create(创建)。
-
-
要创建解析器策略:
- 转到 Traffic policies(流量策略) > Resolver policies。
- 选择 Create a policy(创建策略)。
- 创建匹配私有主机名的表达式:
选择器 运算符 值 Host in wiki.internal.local - 在 Configure custom DNS resolvers 下,输入您内部 DNS 服务器的私有 IP 地址。
- 从下拉菜单中,选择
- Private路由选项以及分配给您在上一步中选择的隧道的虚拟网络。 - 选择 Create a policy(创建策略)。
默认情况下,注册到您的 Zero Trust 组织的所有设备都可以通过 Cloudflare Tunnel 连接到您的私有网络。您可以配置 Gateway 来检查您的网络流量,并根据用户身份和设备安全状况来阻止或允许访问。要了解有关策略设计的更多信息,请参阅保护您的第一个应用程序。
为防止 Cloudflare One Client 用户访问您的整个私有网络,我们建议为您的私有 IP 空间创建一个兜底 Gateway 阻止策略。然后,您可以在此基础上叠加更高优先级的允许策略(在 Access 或 Gateway 中),以授予用户对特定应用程序或 IP 的访问权限。
您可以为您的私有主机名创建 Access 自托管应用程序,并在此应用程序中配置 Access 策略。此选项允许您将用户访问与您的 SaaS 及其他 Web 应用程序一起进行管理。
如果您更愿意使用传统防火墙模型来保护应用程序,可以使用 SNI 或 SNI Domain 选择器构建 Gateway 网络策略。为增加一层保护,可添加 Gateway DNS 策略以允许或阻止解析 Host 或 Domain。
网络策略示例
以下示例由两个策略组成:第一个策略允许特定用户访问您的应用程序,第二个策略阻止所有其他流量。
- 允许公司员工
| 选择器 | 运算符 | 值 | 逻辑 | 操作 |
|---|---|---|---|---|
| SNI | in | wiki.internal.local |
且 (And) | 允许 (Allow) |
| 用户电子邮件 (User Email) | matches regex | .*@example.com |
- 通配阻止策略
| 选择器 | 运算符 | 值 | 操作 |
|---|---|---|---|
| 目标 IP (Destination IP) | in | 10.0.0.0/8 |
阻止 (Block) |
DNS 策略示例
| 选择器 | 运算符 | 值 | 逻辑 | 操作 |
|---|---|---|---|---|
| 主机 (Host) | in | wiki.internal.local |
且 (And) | 允许 (Allow) |
| 用户电子邮件 (User Email) | matches regex | .*@example.com |
终端用户现在可以通过访问其私有主机名来访问该应用程序。例如,要连接到私有 Web 应用程序,请打开浏览器并访问 wiki.internal.local。
如果您无法连接,请验证以下内容:
-
确认 DNS 解析 - 在设备上,确认您可以成功解析私有主机名:
nslookup wiki.internal.localServer: 127.0.2.2 Address: 127.0.2.2#53 Non-authoritative answer: Name: wiki.internal.local Address: 100.80.200.48该查询应使用 WARP 的 DNS 代理进行解析,并返回 Gateway 初始解析 IP。如果查询解析失败或返回了不同的 IP,请检查您的本地域回退(Local Domain Fallback)配置和 Gateway 解析器策略。
-
检查 Gateway 日志 - 查看您的 Gateway 网络日志以查看连接是否被策略阻止。
-
验证隧道状态 - 通过检查隧道状态确认您的隧道健康且已连接。
测试与初始解析 IP 的连接 - 当您使用私有主机名连接到应用程序时,设备应与初始解析 IP建立连接:
curl -v4 http://wiki.internal.local* Trying 100.80.200.48:80... * Connected to wiki.internal.local (100.80.200.48) port 80 ...如果请求失败,请确认初始解析 IP 通过 WARP 隧道路由。您还可以检查您的隧道日志以确认请求已路由到应用程序's 私有 IP。
从 Chrome 142 ↗ 开始,浏览器会限制来自网站对本地 IP 地址的请求,包括 Gateway 初始解析的 IP(initial resolved IP) CGNAT 范围(100.80.0.0/16)。由于该范围属于 100.64.0.0/10,Chrome 将这些地址归类为属于本地网络。当从公共 IP 加载的网站向通过初始解析 IP 解析的域发出子请求时,Chrome 会将此视为“公共到本地网络”请求,并显示提示要求用户允许访问本地网络上的设备。在用户接受此提示之前,Chrome 将拦截对这些域的请求。
这通常发生在出站(Egress)策略与广泛使用的域(例如 cloudfront.net 或 github.com)匹配时,导致来自公共页面的子请求解析为 100.80.0.0/16 范围。
如果受影响的请求源自 iframe 内部(例如嵌入在第三方门户中的应用程序),则 iframe 必须声明 local-network-access 权限,以便在父框架中显示浏览器提示:
- Chrome 142-144:在 iframe 元素上使用
allow="local-network-access"属性。 - Chrome 145+:该权限被拆分为
allow="local-network"和allow="loopback-network"。
如果 iframe 是嵌套的,则链中的每个 iframe 都必须包含相应的属性。由于第三方应用程序控制着它们自己的 iframe 属性,这可能无法由最终用户进行配置。
为避免此问题,请选择以下选项之一:
- Chrome 146+(覆盖 IP 地址空间分类):使用
LocalNetworkAccessIpAddressSpaceOverrides↗ Chrome 企业版策略将100.80.0.0/16范围重新归类为公共(public)。这是最具针对性的修复,因为它仅更改初始解析 IP 范围的分类,而不是完全停用安全检查。 - Chrome 140+(允许特定 URL):使用
LocalNetworkAccessAllowedForUrls↗ Chrome 企业版策略使特定网站免受本地网络访问检查。请注意,https://*是停用所有 URL 检查的有效条目。 - Chrome 146+(允许特定 URL):使用
LocalNetworkAllowedForUrls↗ Chrome 企业版策略,从 Chrome 146 开始,该策略会替换LocalNetworkAccessAllowedForUrls。 - Chrome 142-152(选择退出本地网络访问限制):使用
LocalNetworkAccessRestrictionsTemporaryOptOut↗ Chrome 企业版策略完全退出本地网络访问限制。这是一项临时策略,将在 Chrome 152 之后移除。 - 停用 Chrome 功能标志:转到
chrome://flags,然后将 Local Network Access Checks 标志设置为 Disabled。此方法适用于个人用户,但不适用于企业级部署。