功能可用性
| 客户端模式(Client modes) | Zero Trust 套餐 ↗ |
|---|---|
| 所有模式 | 所有计划 |
| 系统 | 可用性 | 最低客户端版本 |
|---|---|---|
| Windows | ✅ | 2025.1.861.0 |
| macOS | ✅ | 2025.1.861.0 |
| Linux | ✅ | 2025.1.861.0 |
| iOS | ✅ | 1.0 |
| Android | ✅ | 1.0 |
| ChromeOS | ✅ | 1.0 |
Cloudflare One Client(前身为 WARP)允许您在设备连接到已知网络位置(例如办公室)时,有选择地应用特定的设备配置文件和设备客户端设置。为了检测设备处于哪个网络,Cloudflare One Client 会连接到您在该网络上托管的 TLS 终点并验证其证书。如果证书匹配,则说明该设备处于您的托管网络上,并会接收相应的设备配置文件(如果已为该网络配置了设备配置文件)。
在此页面上,您将学习如何:
- 在您的受信任网络上创建一个 TLS 终点。
- 在 Zero Trust 中配置 TLS 终点以设置托管网络。
- 当 Cloudflare One Client 检测到设备处于您的托管网络上时,向其应用相应的设备配置文件。
- Cloudflare One Client 会在操作系统的默认路由发生变化、活动 Wi-Fi 连接的 SSID 发生变化或默认接口的 DNS 服务器发生变化时扫描托管网络。为最大程度减少对性能的影响,请在多个位置重用同一个 TLS 终点,除非您需要为每个位置配置不同的设置配置文件。
- 确保设备在任何给定时间只能访问一个托管网络。如果配置并可访问多个托管网络,则无法确定设备将接收哪个设置配置文件。
当您配置托管网络时,Cloudflare One Client 会使用 TLS 终点来确定设备是否在该网络上。
应用正确的设备配置文件所需的时间取决于 TLS 终点响应的速度。
如果 TLS 终点在 5 秒后超时,Cloudflare One Client 将确定设备不在托管网络上,并将应用默认的设备配置文件。只有在发生非超时错误时,Cloudflare One Client 才会重试检测。超时会触发回退到默认设备配置文件,而不会进行进一步的重试。
TLS 终点是您网络上提供 TLS 证书的主机。TLS 终点就像一个网络位置信标——当设备连接到网络时,设备上的 Cloudflare One Client 会检测 TLS 终点,并根据 SHA-256 指纹(如果已指定)或本地证书存储来验证 TLS 证书,以检查其是否由公共证书颁发机构签名。
TLS 证书可以由您网络上的任何设备托管。但是,网络位置以外的用户必须无法访问该终点。Cloudflare One Client 会自动从所有设备配置文件中排除托管网络终点,以确保用户无法通过 Cloudflare Tunnel 连接到此终点。我们建议选择物理上位于办公室且远程用户不需要访问的主机,例如打印机。
如果您的网络上还没有 TLS 终点,可以按以下步骤进行设置:
-
生成 TLS 证书:
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout key.pem -out cert.pem -subj "/CN=example.com" -addext "subjectAltName=DNS:example.com"该命令将输出 PEM 格式的证书及其私钥。将这些文件保存在安全的地方。
-
配置您网络上的 HTTPS 服务器以使用此证书和密钥。以下示例演示了如何从 Docker 中的 nginx 容器提供 TLS 证书:
a. 创建一个名为
nginx.conf的 nginx 配置文件:nginx.conftxt events { worker_connections 1024; } http { server { listen 443 ssl; ssl_certificate /certs/cert.pem; ssl_certificate_key /certs/key.pem; location / { return 200; } } }如果需要,将
/certs/cert.pem和/certs/key.pem替换为您的证书和密钥所在的位置。b. 将 nginx 镜像添加到您的 Docker compose 文件中:
docker-compose.ymlyml services: nginx: image: nginx:latest ports: - 3333:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./certs:/certs:ro如果需要,将
./nginx.conf和./certs替换为您的 nginx 配置文件和证书所在的位置。c. 启动服务器:
docker compose up -d -
要测试 TLS 服务器是否正常工作,请从最终用户的设备运行 curl 命令:
curl --verbose --insecure https://<private-server-IP>:3333/您需要传递
--insecure选项,因为我们使用的是自签名证书。如果设备已连接到网络,该请求应返回200状态码。
Windows IIS
要使用 Windows Internet Information Services (IIS) 管理器创建 TLS 终点:
-
以管理员身份运行 PowerShell。
-
生成自签名证书:
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "office-name.example.internal" -FriendlyName "Cloudflare Managed Network Certificate" -NotAfter (Get-Date).AddYears(10)PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- 0660C4FCD15F69C49BD080FEEA4136B3D302B41B CN=office-name.example.internal -
提取证书的 SHA-256 指纹:
[System.BitConverter]::ToString([System.Security.Cryptography.SHA256]::Create().ComputeHash((Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.FriendlyName -eq "Cloudflare Managed Network Certificate" }).RawData)) -replace "-", ""DD4F4806C57A5BBAF1AA5B080F0541DA75DB468D0A1FE731310149500CCD8662您将需要 SHA-256 指纹来在 Zero Trust 中配置托管网络。不要使用
New-SelfSignedCertificate命令生成的默认 SHA-1 指纹。 -
打开 IIS 管理器。
-
在 Connections(连接) 窗格中,右键单击 Sites(站点) 节点并选择 Add Website(添加网站)。
-
在 Site name(站点名称) 中,输入 TLS 服务器的任何名称(例如,
Managed Network Server)。 -
在 Physical path(物理路径) 中,输入包含
.htm或.html文件的任何目录,例如C:\inetpub\wwwroot。Cloudflare 不会验证该目录中的内容。 -
在 Binding(绑定) 下,配置以下字段:
- Type(类型):https
- IP address(IP 地址):All Unassigned(全部未分配)
- Port(端口):
443 - Host name(主机名):输入证书的通用名称 (CN)。我们示例证书的 CN 是
office-name.example.internal。 - Require Server Name Indication(需要服务器名称指示):已启用
- SSL certificate(SSL 证书):选择您的 TLS 证书名称。我们的示例证书名为
Cloudflare Managed Network Certificate。
-
要测试 TLS 服务器是否正常工作,请从最终用户的设备运行 curl 命令:
curl --verbose --insecure --resolve office-name.example.internal:443:<private-server-IP> https://office-name.example.internal您需要传递
--insecure选项,因为我们使用的是自签名证书。--resolve选项允许您连接到服务器的私有 IP,但同时将主机名传递给服务器以进行 SNI 和证书验证。如果设备已连接到网络,该请求应返回您目录的默认主页(C:\inetpub\wwwroot\iisstart.htm)。
Cloudflare One Client 使用 Rustls ↗ 建立 TLS 连接。请确保您的 TLS 终点接受 Rustls 支持的密码套件 ↗之一。
仅当您的 TLS 终点使用自签名证书时,才需要 SHA-256 指纹。
要获取本地证书的 SHA-256 指纹:
openssl x509 -noout -fingerprint -sha256 -inform pem -in cert.pem | tr -d :输出将类似于:
SHA256 Fingerprint=DD4F4806C57A5BBAF1AA5B080F0541DA75DB468D0A1FE731310149500CCD8662要测试连接性并获取远程服务器的 SHA-256 指纹:
openssl s_client -connect <private-server-IP>:443 < /dev/null 2> /dev/null | openssl x509 -noout -fingerprint -sha256 | tr -d :输出将类似于:
SHA256 Fingerprint=DD4F4806C57A5BBAF1AA5B080F0541DA75DB468D0A1FE731310149500CCD8662-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队与资源) > Devices(设备) > Device profiles(设备配置文件)。
-
选择 Managed networks(托管网络) 并选择 Add new managed network(添加新托管网络)。
-
命名您的 network 位置。
-
在 Host and Port(主机和端口) 中,输入您的 TLS 终点的私有 IP 地址和端口号(例如,
192.168.185.198:3333)。 -
(可选)在 TLS Cert SHA-256(TLS 证书 SHA-256) 中,输入 TLS 证书的 SHA-256 指纹。只有自签名证书才需要此字段。如果未提供 TLS 指纹,Cloudflare One Client 将根据本地证书存储验证证书,并检查其是否由公共证书颁发机构签名。
-
选择 Save(保存)。
-
将以下权限添加到您的
cloudflare_api_token↗ 中:Zero Trust Write
-
使用
cloudflare_zero_trust_device_managed_network↗ 资源添加托管网络:resource "cloudflare_zero_trust_device_managed_networks" "office" { account_id = var.cloudflare_account_id name = "Office managed network" type = "tls" config = { tls_sockaddr = "192.168.185.198:3333" sha256 = "DD4F4806C57A5BBAF1AA5B080F0541DA75DB468D0A1FE731310149500CCD8662" } }
如果将 TLS 终点指定为私有 IP 地址,Cloudflare One Client 将自动从所有设备配置文件中排除该终点。此排除可防止远程用户通过任何端口上的 WARP 隧道访问该终点。如果将 TLS 终点指定为主机名而不是私有 IP,Cloudflare One Client 将不会自动排除它。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队与资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)。
-
创建新配置文件或编辑现有配置文件。
-
要在设备连接到您的网络时应用此配置文件,请添加以下规则:
选择器 运算符 值 Managed network(托管网络) is(是) <NETWORK-NAME> -
保存配置文件。
在 cloudflare_zero_trust_device_custom_profile ↗ 中,使用 network 选择器配置一个 match 表达式。例如,以下设备配置文件将匹配所有连接到特定托管网络的设备:
resource "cloudflare_zero_trust_device_custom_profile" "office" {
account_id = var.cloudflare_account_id
name = "Office"
description = "Devices connected to the office network"
precedence = 1
service_mode_v2 = {mode = "warp"}
match = trimspace(replace(<<-EOT
network == "${cloudflare_zero_trust_device_managed_networks.office.name}"
EOT
, "\n", " "))
}托管网络现已启用。每次您组织中的设备连接到网络时(例如,在唤醒设备或更改 Wi-Fi 网络时),Cloudflare One Client 都会确定其网络位置并应用相应的设置配置文件。
要检查 Cloudflare One Client 是否检测到网络位置:
- 连接 Cloudflare One Client。
- 断开连接并重新连接到网络。
- 打开终端并运行
warp-cli debug alternate-network。
- 设备配置文件 - 如何创建和管理通过托管网络应用的设备配置文件。
- 设备客户端设置 - 定义 Cloudflare One Client 的行为方式以及用户可以执行的操作。
- Cloudflare One Client 故障排除指南 - 排除常见的 Cloudflare One Client 问题。