分流隧道可以配置为排除或包含 IP 地址或域,使其不通过 Cloudflare One Client(前身为 WARP)。此功能通常用于与 VPN 协同运行 Cloudflare One Client(在排除模式下),或提供对特定私有网络的访问(在包含模式下)。
由于分流隧道在网络级别控制 Gateway 的可见性,我们建议在向最终用户推出更新之前测试所有更改。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队和资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)。
- 找到您要修改的设备配置文件,然后选择 Configure(配置)。
- 向下滚动到 Split Tunnels。
- (可选)要查看您现有的 Split Tunnel 配置,请选择 Manage(管理)。根据您选择的模式,您将看到 Cloudflare Zero Trust 排除或包含的 IP 和域列表。我们建议备份您的 Split Tunnel 条目,因为切换模式后它们将恢复为默认值。
- 在 Split Tunnels 下,选择一个模式:
- Exclude IPs and domains —(默认)除您指定的 IP 和域外,所有流量都将发送到 Cloudflare Gateway。
- Include IPs and Domains — 只有发往您指定的 IP 或域的流量才会被发送到 Cloudflare Gateway。所有其他流量都将绕过 Gateway,不再受您的网络或 HTTP 策略过滤。要使用某些功能,您需要手动添加 Zero Trust 域。
-
向您的
cloudflare_api_token↗ 添加以下权限:Zero Trust Write
-
选择要修改的
cloudflare_zero_trust_device_default_profile↗ 或cloudflare_zero_trust_device_custom_profile↗ 资源,或者创建新的设备配置文件。 -
在您的设备配置文件中,配置
exclude或include参数。在一个给定的设备配置文件中,您不能同时设置exclude和include。a. 要管理 Exclude 模式下的 Split Tunnel 路由,请使用
exclude参数:resource "cloudflare_zero_trust_device_custom_profile" "exclude_example" { account_id = var.cloudflare_account_id name = "Custom profile in Split Tunnels Exclude mode" enabled = true precedence = 101 service_mode_v2 = {mode = "warp"} match = "identity.email == \"[email protected]\"" exclude = [{ address = "10.0.0.0/8" description = "Example route to exclude from WARP tunnel" }] }在此示例中,除了发往
10.0.0.0/8的流量之外,所有流量都将发送到 Cloudflare Gateway。要排除 Cloudflare 推荐的默认 IP 和域,请参阅添加路由。b. 要管理 Include 模式下的 Split Tunnel 路由,请使用
include参数:resource "cloudflare_zero_trust_device_custom_profile" "include_example" { account_id = var.cloudflare_account_id name = "Custom profile in Split Tunnels Include mode" enabled = true precedence = 101 service_mode_v2 = {mode = "warp"} match = "identity.email == \"[email protected]\"" include = [{ address = "10.0.0.0/8" description = "Example route to include in WARP tunnel" }] }在此示例中,只有发往
10.0.0.0/8的流量才会被发送到 Cloudflare Gateway。
具有此设备配置文件的所有客户端现在都将切换到新模式及其默认路由配置。接下来,从您的 Split Tunnel 配置中添加或移除路由。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队和资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)。
-
找到您要修改的设备配置文件,然后选择 Configure(配置)。
-
在 Split Tunnels 下,检查您的 Split Tunnels 模式是设置为 Exclude 还是 Include。
-
选择 Manage(管理)。
-
您可以根据 IP 地址或域排除或包含路由。在可能的情况下,我们建议添加 IP 地址而不是域。要了解添加域的后果,请参阅基于域的 Split Tunnels。
要向 Split Tunnels 添加 IP 地址:
- 选择 IP Address。
- 输入您要排除或包含的 IP 地址或 CIDR。
- 选择 Save destination(保存目标)。
发往此 IP 地址的流量现在已从 WARP 隧道中排除或包含。
要向 Split Tunnels 添加域:
- 选择 Domain。
- 输入有效域以进行排除或包含。
- 选择 Save destination(保存目标)。
- (可选)如果您的域没有公共 DNS 记录,请创建一个 Local Domain Fallback 条目,以允许私有 DNS 服务器处理域名解析。
当用户访问该域时,系统会根据您的 Local Domain Fallback 配置(由 Gateway 或您的私有 DNS 服务器)解析该域。然后,Split Tunnels 将动态包含或排除 DNS 查找中返回的 IP 地址。
-
向您的
cloudflare_api_token↗ 添加以下权限:Zero Trust Write
-
选择要修改的
cloudflare_zero_trust_device_default_profile↗ 或cloudflare_zero_trust_device_custom_profile↗ 资源,或者创建新的设备配置文件。 -
(可选)创建一个可以在多个设备配置文件中重复使用的 Split Tunnel 路由列表。例如,您可以在与设备配置文件相同的模块中声明本地值:
split-tunnels.local.tftf locals { global_exclude_list = [ # Cloudflare 推荐的默认 Split Tunnel 条目 { address = "ff05::/16" }, { address = "ff04::/16" }, { address = "ff03::/16" }, { address = "ff02::/16" }, { address = "ff01::/16" }, { address = "fe80::/10" description = "IPv6 Link Local" }, { address = "fd00::/8" }, { address = "255.255.255.255/32" description = "DHCP Broadcast" }, { address = "240.0.0.0/4" }, { address = "224.0.0.0/24" }, { address = "192.168.0.0/16" }, { address = "192.0.0.0/24" }, { address = "172.16.0.0/12" }, { address = "169.254.0.0/16" description = "DHCP Unspecified" }, { address = "100.64.0.0/10" }, { address = "10.0.0.0/8" } ] } -
在设备配置文件中,根据 IP 地址或域排除或包含路由:
device-profiles.tftf resource "cloudflare_zero_trust_device_custom_profile" "example" { account_id = var.cloudflare_account_id name = "Example custom profile with split tunnels" enabled = true precedence = 101 service_mode_v2 = {mode = "warp"} match = "identity.email == \"[email protected]\"" exclude = concat( # 全局条目 local.global_exclude_list, # 特定于配置文件的条目 [ { address = "192.0.2.0/24" description = "要从 WARP 排除的示例 IP" }, { host = "example.com" description = "要从 WARP 排除的示例域" } ] ) }在可能的情况下,我们建议添加 IP 地址而不是域。要了解添加域的后果,请参阅基于域的 Split Tunnels。
新更新的设置可能需要多达 10 分钟才能传播到设备。
我们建议保持 Split Tunnels 列表简短,因为每个条目都需要时间供客户端解析。特别地,域的执行速度比 IP 地址慢,因为它们需要进行即时的 IP 查找以及路由表/本地防火墙更改。较短的列表也将使您的配置更易于理解和调试。有关设备配置文件限制的信息,请参阅账户限制。
当您需要为某个网站完全绕过 Gateway,或允许流量通过 Cloudflare One Client 创建的防火墙 时,请使用分割隧道。常见场景包括:
- 连接到需要终端用户设备真实 IP 地址的第三方应用程序(例如,Microsoft 365)。
- 优化语音和视频。
- 连接到 第三方 VPN 端点。
如果您希望在 Gateway 日志中看到流量,请不要将网站排除在分割隧道之外。特别是不建议使用分割隧道来:
- 解决与特定网站的连接问题。有关配置指导,请参阅我们的 故障排除指南。
- 解决与特定网站的性能问题。由于 Cloudflare 的运营范围在连接互联网的人口的 95% 处的 50 毫秒以内,因此通常通过我们发送流量会更快。如果您遇到与性能相关的问题,最好先研究您的 Gateway 策略或联系支持人员。
许多 Cloudflare Zero Trust 服务都依赖于通过 Cloudflare One Client 的流量,例如 设备姿态检查 和 设备客户端会话时长。如果您在包含模式下使用分割隧道,则需要手动添加 Cloudflare Zero Trust 域和 IP,以便这些功能正常运行。
如果您在包含模式下使用分割隧道,则必须包含以下域:
- 用于对 Cloudflare Zero Trust 进行身份验证的 IdP
<your-team-name>.cloudflareaccess.com- 受 Access 或 Gateway 策略保护的应用程序
- 如果使用 Browser Isolation,则包括
edge.browser.run
如果您在包含模式下使用分割隧道,并且启用了带有 阻止页面 的 DNS 策略,则必须包含被阻止域解析到的 IP。除非您使用的是 专用或自用 IP(BYOIP)解析器 IP,否则阻止页面将解析为:
162.159.36.12162.159.46.12
在 仅流量模式 下,您无法向分割隧道 添加域。如果您在包含模式下使用分割隧道,则必须包含解析为 <your-team-name>.cloudflareaccess.com 的 IP:
104.19.194.29104.19.195.29
基于域名的分割隧道在组织中部署之前,有几点需要注意:
- 从 Cloudflare One Client 和 Gateway 的可见性中排除或包含的路由可能会逐日发生变化,并且根据每位用户所在位置的不同,其路由也会有所不同。
- 您可能会在无意中排除或包含共享相同 IP 地址的其他主机名。如果您添加由 CDN 或大型互联网提供商(例如 Cloudflare、AWS 或 Azure)托管的域,这种情况经常发生。例如,如果您想排除托管在 AWS 上的 VPN,请不要添加
*.amazonaws.com,因为这会向 AWS 上的所有流量开放您的设备。相反,应该添加具体的 VPN 端点(*.cvpn-endpoint-<UUID>.prod.clientvpn.us-west-2.amazonaws.com)。 - 大多数服务都是主机名的集合。在分割隧道模式支持 应用类型(App Types) 之前,您需要手动添加特定应用程序或服务使用的所有域。
- Cloudflare One Client 必须处理该域的 DNS 查找请求。如果 DNS 结果先前已被操作系统缓存,或被其他方式拦截(例如,通过浏览器的安全 DNS 设置),则该 IP 地址不会被动态添加到您的分割隧道中。
| 分割隧道域 | 匹配 | 不匹配 |
|---|---|---|
example.com |
精确匹配 example.com |
子域,例如 www.example.com |
example.example.com |
精确匹配 example.example.com |
example.com 或子域,例如 www.example.example.com |
*.example.com |
子域,例如 www.example.com 和 sub2.sub1.example.com |
example.com |
在移动客户端上,基于域名的分割隧道的工作方式与在桌面客户端上不同。如果移动和桌面客户端都需要连接到您的组织,建议使用基于 IP 地址或 CIDR 的分割隧道,这些规则在所有平台上的工作方式均相同。
这些平台上的客户端工作原理是,在解析出域名的 IP 地址后,立即将其动态插入到路由表中以进行分割隧道。这使得桌面客户端能够支持通配符域前缀(例如 *.example.com),而不只是单个域(如 example.com 或 www.example.com)。
由于平台差异,移动客户端只能在最初启动隧道时应用分割隧道规则。这意味着:
- 基于域名的分割隧道规则是在隧道建立时,根据当时该域名的 IP 地址创建的。每次建立隧道时,路由都会被刷新。
- 仅当通配符域前缀(例如
*.example.com)具有有效的通配符 DNS 记录时才受支持。不支持其他通配符域,因为客户端在启动隧道时无法将通配符域与主机名匹配。不受支持的通配符域前缀仍可存在于您的配置中,但在移动平台上将被忽略。
- 在 Cloudflare 仪表板 ↗ 中,转到 Zero Trust > Team & Resources(团队和资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)。
- 找到您要修改的 设备配置文件(device profile) 并选择 Edit(编辑)。
- 在 **Split Tunnels(分割隧道)**下,选择 Manage(管理)。
- 在列表中找到 IP 地址或主机名,然后选择 **Action(操作)**按钮。从下拉菜单中选择 Delete(删除)。
新更新的设置可能需要多达 10 分钟才能传播到设备。
如果您需要恢复为 Cloudflare 推荐的默认分割隧道条目,请选择 Restore default entries(还原默认条目)。
- 本地域回退(Local Domain Fallback) - 通过本地 DNS 解析所选域,而不是 Cloudflare Gateway。
- 防火墙后的 Cloudflare One Client - 了解要允许哪些 IP、域和端口,以便用户在防火墙后成功部署并连接 Cloudflare One Client。