跳转到内容
搜索文档

连接私有主机名

最后更新 查看 MarkdownAgent 设置

与管理静态 IP 列表和路由不同,您可以使用其主机名(例如 wiki.internal.local)将用户连接到私有 HTTP 和非 HTTP 应用程序。当应用程序具有未知或临时 IP 时(这通常发生在第三方云提供商预配基础设施时),私有主机名路由特别有用。

当用户请求私有主机名时,Cloudflare Gateway 会分配来自 CGNAT 范围的初始解析 IP,以便通过您的隧道将流量路由到正确的私有 IP 地址。有关架构和数据包流的深入分析,请参阅我们的发布博客文章

支持的入口/出口

下表总结了与私有主机名路由兼容的 Cloudflare One 产品。请参阅表格图例以获取解读指南。

✅ 产品可正常工作,无注意事项
🚧 产品可使用,但有一些注意事项
❌ 产品无法使用

设备连接

终端用户可以使用以下流量入口连接到私有主机名:

功能可用性

客户端模式
流量和 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

Footnotes

  1. ECMP 路由不兼容。要使基于主机名的路由正常工作,DNS 查询和生成的网络流量必须通过相同的 IPsec/GRE 隧道到达 Cloudflare。

私有网络连接

私有主机名路由适用于以下出口。其他流量出口需要基于 IP 的路由。

连接器 兼容性 最低版本
cloudflared 2025.7.0
Cloudflare Mesh 2026.6.822.0 (Linux)
Cloudflare WAN

连接私有主机名

本节介绍如何使用 cloudflared 启用对私有主机名应用程序的远程访问。

前提条件

在连接到私有主机名之前,您必须启用 Gateway 代理。

  1. 转到 Traffic policies(流量策略)> Traffic settings(流量设置)
  2. 在 **Proxy and inspection(代理和检查)**中,开启 Allow Secure Web Gateway to proxy traffic(允许 Secure Web Gateway 代理流量)
  3. 选择 TCP
  4. 选择 UDP(将流量代理到内部 DNS 解析器所必需)
  5. (推荐)要代理 pingtraceroute 等诊断工具的流量,请选择 ICMP。您可能还需要更新您的系统以允许 ICMP 流量通过 cloudflared
  1. 向您的 cloudflare_api_token 添加以下权限:

    • Zero Trust Write
  2. 使用 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
  • 针对您私有主机名的 DNS 查询

配置步骤因您的设备入口而异:

Cloudflare One 客户端

  1. 在您的 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
  2. 本地域回退(Local Domain Fallback)中,删除您私有主机名的顶级域。这将配置 WARP 将 DNS 查询发送到 Cloudflare Gateway 进行解析。

Cloudflare Mesh

要将主机名的流量吸引到 Mesh 节点而不是 cloudflared 隧道,请向该节点添加主机名路由。上面列出的初始解析 IP必须在 Mesh 节点和客户端设备配置文件中都通过 Cloudflare 进行路由,并且——对于私有主机名——该节点必须能够解析主机名(通过其本地 hosts 文件或 Gateway 解析器策略)。请参阅主机名路由

Cloudflare WAN

  1. 确保上述列出的初始解析 IP通过 Cloudflare WAN 路由到 Cloudflare。
  2. 将您 Cloudflare WAN 网络的 DNS 解析器指向 Cloudflare Gateway。

1. 将应用程序连接到 Cloudflare

  1. 登录 Cloudflare 仪表板,转到 Networking(网络) > Tunnels(隧道)

    Go to Tunnels ↗
  2. 选择 Create a tunnel(创建隧道)

  3. 为您的隧道输入名称。我们建议选择能够反映您希望通过此隧道连接的资源类型的名称(例如,enterprise-VPC-01)。

  4. 选择 Create Tunnel(创建隧道)

  5. 选择您的操作系统,然后复制安装命令并在您的源服务器的终端上运行。

  6. 等待隧道连接。连接建立后,选择 Continue(继续)

  1. 连接隧道后,转到隧道的 Routes(路由) 选项卡并选择 Add route(添加路由),然后选择 Private hostname(私有主机名)

  2. 输入代表您应用程序的完全限定域名 (FQDN)(例如,wiki.internal.local)。

    主机名格式限制

    • 字符限制:必须少于 255 个字符。
    • 支持的通配符:允许使用单个通配符(*),且它必须代表一个完整的 DNS 标签。 示例:*.internal.local
    • 不支持的通配符:不支持以下通配符格式:
      • 部分通配符,例如 *-dev.internal.localdev-*.internal.local
      • 中间的通配符,例如 foo*bar.internal.localfoo.*.internal.local
      • 主机名中的多个通配符,例如 *.*.internal.local
    • 通配符修剪:前导通配符(*)会被修剪掉,并假定有一个隐式的点(.)。例如,*.internal.local 会保存为 internal.local,但会匹配通配符级别的所有子域名(涵盖 foo.internal.local,但不涵盖 foo.bar.internal.local)。
    • 点修剪:允许前导点和尾随点(.),但会被修剪掉。
  3. 选择 Save(保存)

2. 配置 DNS 解析

当 Gateway 收到对您私有主机名的请求时,它必须将该主机名解析为私有 IP 地址。根据您的网络拓扑,有两种配置方法。

方案 A:使用系统解析器(默认)

默认情况下,cloudflared 使用在其主机上配置的私有 DNS 解析器(例如 Linux 上的 /etc/resolv.conf)。

如果运行 cloudflared 的机器已经可以使用本地系统解析器将 wiki.internal.local 解析为私有 IP,则无需进一步配置。您可以跳过至步骤 3

方案 B:使用特定的私有 DNS 服务器(高级)

如果您需要 cloudflared 使用与主机默认解析器不同的特定内部 DNS 服务器,您必须通过 IP/CIDR 路由将该 DNS 服务器显式连接到 Cloudflare。您还需要配置 Gateway 解析器策略以将查询路由到该特定专用 DNS 服务器。

  1. 要为 DNS 服务器创建 IP/CIDR 路由:

    1. 转到 Networking(网络) > Routes(路由)

      Go to Routes ↗
    2. 选择 Add CIDR route(添加 CIDR 路由)

    3. 输入您内部 DNS 解析器的私有 IP 地址。

    4. 选择连接到该 DNS 服务器所在网络的 Cloudflare Tunnel。

    5. 选择 Create(创建)

  2. 要创建解析器策略:

    1. 转到 Traffic policies(流量策略) > Resolver policies
    2. 选择 Create a policy(创建策略)
    3. 创建匹配私有主机名的表达式:
      选择器运算符
      Hostinwiki.internal.local
    4. Configure custom DNS resolvers 下,输入您内部 DNS 服务器的私有 IP 地址。
    5. 从下拉菜单中,选择 - Private 路由选项以及分配给您在上一步中选择的隧道的虚拟网络
    6. 选择 Create a policy(创建策略)

3. (推荐)使用 Gateway 过滤网络流量

默认情况下,注册到您的 Zero Trust 组织的所有设备都可以通过 Cloudflare Tunnel 连接到您的私有网络。您可以配置 Gateway 来检查您的网络流量,并根据用户身份和设备安全状况来阻止或允许访问。要了解有关策略设计的更多信息,请参阅保护您的第一个应用程序

为防止 Cloudflare One Client 用户访问您的整个私有网络,我们建议为您的私有 IP 空间创建一个兜底 Gateway 阻止策略。然后,您可以在此基础上叠加更高优先级的允许策略(在 Access 或 Gateway 中),以授予用户对特定应用程序或 IP 的访问权限。

选项 1:Access 应用程序(推荐)

您可以为您的私有主机名创建 Access 自托管应用程序,并在此应用程序中配置 Access 策略。此选项允许您将用户访问与您的 SaaS 及其他 Web 应用程序一起进行管理。

选项 2:Gateway 防火墙策略

如果您更愿意使用传统防火墙模型来保护应用程序,可以使用 SNISNI Domain 选择器构建 Gateway 网络策略。为增加一层保护,可添加 Gateway DNS 策略以允许或阻止解析 HostDomain

网络策略示例

以下示例由两个策略组成:第一个策略允许特定用户访问您的应用程序,第二个策略阻止所有其他流量。

  1. 允许公司员工
选择器 运算符 逻辑 操作
SNI in wiki.internal.local 且 (And) 允许 (Allow)
用户电子邮件 (User Email) matches regex .*@example.com
  1. 通配阻止策略
选择器 运算符 操作
目标 IP (Destination IP) in 10.0.0.0/8 阻止 (Block)

DNS 策略示例

选择器 运算符 逻辑 操作
主机 (Host) in wiki.internal.local 且 (And) 允许 (Allow)
用户电子邮件 (User Email) matches regex .*@example.com

4. 测试连接

终端用户现在可以通过访问其私有主机名来访问该应用程序。例如,要连接到私有 Web 应用程序,请打开浏览器并访问 wiki.internal.local

故障排除

如果您无法连接,请验证以下内容:

  1. 确认 DNS 解析 - 在设备上,确认您可以成功解析私有主机名:

    nslookup wiki.internal.local
    Server:		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 解析器策略

  2. 检查 Gateway 日志 - 查看您的 Gateway 网络日志以查看连接是否被策略阻止。

  3. 验证隧道状态 - 通过检查隧道状态确认您的隧道健康且已连接。

  4. 测试与初始解析 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。

限制

Google Chrome 限制对私有主机名的访问

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.netgithub.com)匹配时,导致来自公共页面的子请求解析为 100.80.0.0/16 范围。

Iframe

如果受影响的请求源自 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。此方法适用于个人用户,但不适用于企业级部署。

这篇文档对您有帮助吗?