跳转到内容
搜索文档

托管网络

最后更新 查看 MarkdownAgent 设置

功能可用性

系统 可用性 最低客户端版本
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 才会重试检测。超时会触发回退到默认设备配置文件,而不会进行进一步的重试。

1. 选择 TLS 终点

TLS 终点是您网络上提供 TLS 证书的主机。TLS 终点就像一个网络位置信标——当设备连接到网络时,设备上的 Cloudflare One Client 会检测 TLS 终点,并根据 SHA-256 指纹(如果已指定)或本地证书存储来验证 TLS 证书,以检查其是否由公共证书颁发机构签名。

TLS 证书可以由您网络上的任何设备托管。但是,网络位置以外的用户必须无法访问该终点。Cloudflare One Client 会自动从所有设备配置文件中排除托管网络终点,以确保用户无法通过 Cloudflare Tunnel 连接到此终点。我们建议选择物理上位于办公室且远程用户不需要访问的主机,例如打印机。

创建新的 TLS 终点

如果您的网络上还没有 TLS 终点,可以按以下步骤进行设置:

  1. 生成 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 格式的证书及其私钥。将这些文件保存在安全的地方。

  2. 配置您网络上的 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
  3. 要测试 TLS 服务器是否正常工作,请从最终用户的设备运行 curl 命令:

    curl --verbose --insecure https://<private-server-IP>:3333/

    您需要传递 --insecure 选项,因为我们使用的是自签名证书。如果设备已连接到网络,该请求应返回 200 状态码。

Windows IIS

要使用 Windows Internet Information Services (IIS) 管理器创建 TLS 终点:

  1. 以管理员身份运行 PowerShell。

  2. 生成自签名证书:

    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
  3. 提取证书的 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 指纹。

  4. 打开 IIS 管理器。

  5. Connections(连接) 窗格中,右键单击 Sites(站点) 节点并选择 Add Website(添加网站)

  6. Site name(站点名称) 中,输入 TLS 服务器的任何名称(例如,Managed Network Server)。

  7. Physical path(物理路径) 中,输入包含 .htm.html 文件的任何目录,例如 C:\inetpub\wwwroot。Cloudflare 不会验证该目录中的内容。

  8. 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
  9. 要测试 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 支持的密码套件之一。

2. 提取 SHA-256 指纹

仅当您的 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

3. 将托管网络添加到 Cloudflare One

  1. Cloudflare 仪表板中,转到 Zero Trust > Team & Resources(团队与资源) > Devices(设备) > Device profiles(设备配置文件)

  2. 选择 Managed networks(托管网络) 并选择 Add new managed network(添加新托管网络)

  3. 命名您的 network 位置。

  4. Host and Port(主机和端口) 中,输入您的 TLS 终点的私有 IP 地址和端口号(例如,192.168.185.198:3333)。

  5. (可选)在 TLS Cert SHA-256(TLS 证书 SHA-256) 中,输入 TLS 证书的 SHA-256 指纹。只有自签名证书才需要此字段。如果未提供 TLS 指纹,Cloudflare One Client 将根据本地证书存储验证证书,并检查其是否由公共证书颁发机构签名。

  6. 选择 Save(保存)

  1. 将以下权限添加到您的 cloudflare_api_token 中:

    • Zero Trust Write
  2. 使用 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 将不会自动排除它。

4. 配置设备配置文件

  1. Cloudflare 仪表板中,转到 Zero Trust > Team & Resources(团队与资源) > Devices(设备) > Device profiles(设备配置文件) > General profiles(常规配置文件)

  2. 创建新配置文件或编辑现有配置文件。

  3. 要在设备连接到您的网络时应用此配置文件,请添加以下规则:

    选择器 运算符
    Managed network(托管网络) is(是) <NETWORK-NAME>
  4. 保存配置文件。

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 都会确定其网络位置并应用相应的设置配置文件。

5. 验证托管网络

要检查 Cloudflare One Client 是否检测到网络位置:

  1. 连接 Cloudflare One Client。
  2. 断开连接并重新连接到网络。
  3. 打开终端并运行 warp-cli debug alternate-network

相关资源

这篇文档对您有帮助吗?