19
2025
06
19:51:15

Cloudflare WARP 网络原理

坦白说,我第一次听说 Cloudflare 是因为他们提供的 Cloudflare WARP 服务。如今,你肯定听说过 Cloudflare 能提供最快、最私密的网络。如果我说 Cloudflare 实现“最快”的第一步是通过访问任何网站时都使用的全球最快公共 DNS 1.1.1.1,你大概就能猜到那个“私密”服务的提供者了,没错,就是 Cloudflare WARP。所以,本文我将进一步介绍 Cloudflare WARP 以及如何使用它。

什么是 Cloudflare WARP

实际上,你可以把它看作一个专用网络应用,它基于 WireGuard 协议,其实现被称为 BoringTun

为什么我们使用 Cloudflare WARP

通过 WARP,你的流量会被加密并发送到 Cloudflare 的网络,然后再发送到目标服务器,确保中间没有任何人可以窥探你的网络活动。

此外,如果目标网站也是 Cloudflare 的客户,资源将通过 CDN 网络立即返回。否则,对于 WARP+ 用户,它将使用 Argo 智能路由以最快速度访问数据中心

通常情况下,应用程序和网站之间的连接是加密的,但 DNS 查询过程却不是。为了解决这个问题,你可以使用 DNS-over-HTTPS 或 DNS-over-TLS 来加密 DNS 查询过程。如果你对这些不熟悉,可以参考我之前的文章DNS 简介[2]

Cloudflare WARP 的原理是什么

简而言之,Cloudflare 路由器监听在公网上广播的 Anycast IP 地址。因此,当用户连接到托管在 Cloudflare 上的资源时,他们数据包经过的每个网络设备都会选择到最近的 Cloudflare 数据中心的最短路径。

连接过程将使用 WireGuard 协议来加密流量。因为 WireGuard 基于 UDP 协议,它使用通过公钥加密协商的会话密钥来保护 UDP 数据包的内容。

基本上,你可以认为 WARP 就是 将 TCP 报文包装在加密的 UDP 数据包中

为什么用 UDP 包装 TCP 报文?

这个解决方案是基于性能和稳定性之间的权衡。

我们知道,大多数通信使用 TCP 协议。TCP 协议是可靠、有序的,并引入了端口的概念。

场景

想象一下,如果你向谷歌发送一个搜索请求,会发生什么?我想大多数学过网络课程的人都会知道,你会从你的设备端口(比如 ip:12.34.56.78, port:52111)发送一个 TCP 数据包到谷歌服务器(例如 ip:198.41.215.162, port:443 https)。

然而,这是一个非常理想的场景。IPv4 地址已经分配完毕,所以不是每个人都能拥有公网 IP 地址。于是,ISP 引入了 NAT(网络地址转换)来解决这个问题。

这里,我强烈推荐来自 Cloudflare 博客[3] 的这张图。

NAT
NAT

如你所见,NAT 路由器会为你的设备分配一个本地地址和端口,然后使用路由器的公共 IP 和端口将你的请求转发到目标地址,同时路由器会保留你的设备本地 IP 端口与目标 IP 端口之间的映射关系。每次你发送请求时,路由器会替换请求的源 IP 和端口;当你收到响应时,路由器会用你的本地 IP 和端口替换响应的目标 IP 和端口。


然而,问题就在这里。对于 WARP 会话,这个过程至少会持续 30 秒。但是当会话过期时,路由器会删除映射,并等待下一个请求。你可能会好奇为什么 Cloudflare 不使用 TCP 长连接?

别忘了,长连接确实可以在某种程度上解决问题,但 WARP 大多数用在移动设备上。如果你的移动设备总是在发送 Keep-Alive 消息,你的电池会消耗得更快。我想这和你永远不希望你的手机一直处于流媒体或直播状态是同样的情况。此外,你的网络连接会一直变化,如果你把数据从 WiFi 切换到蜂窝网络,连接就必须重新建立。

UDP

我们知道 UDP 是为实时通信设计的协议。它不可靠,也无序,但速度快。所以使用 UDP 包装 TCP 报文是最佳选择。UDP 用于连接,TCP 用于保证报文的可靠性。(如果 UDP 数据包丢失,则重新发送。这比 TCP-over-TCP 加密更有效率。)

WireGuard 基于 UDP 协议。它使用通过公钥加密协商的会话密钥来保护 UDP 数据包的内容。为了使 Cloudflare 的负载均衡技术起作用,需要在解密之前有一种方法来识别 WARP 数据包与哪个客户端相关联。

所以在解密内容之前,你可以检查的是 IP 头部、UDP 头部和 WireGuard 头部。实际上我们无法获得四元组信息(源 IP 端口,目标 IP 端口)。所以我们必须找到一种方法来识别客户端。WireGuard 头部如下所示:

图片

Cloudflare 使用保留的字节作为客户端 ID,该 ID 由 Cloudflare 认证服务器生成。它只有 3 个字节,大约 24 位,这对于所有客户端来说是不够的,但这并不是用于追踪,只是像路由器中的映射一样,所以这些字节对于负载均衡来说已经足够了。

关于技术细节,我强烈推荐阅读 构建 Cloudflare WARP 的技术挑战[4]

WARP+

那么 WARP 和 WARP+ 有什么区别呢?我找到了一个例子[5]可以解释它。

通常,当用户发送请求访问源服务器时,如果请求没有命中 CDN,那么 CDN 数据中心需要将请求转发到源服务器。

在这个例子中,用户从香港向位于新加坡的服务器发送请求。请求没有命中 CDN 缓存,所以数据中心(用户首次命中的数据中心)将请求发送到源服务器。简而言之,在 WARP 中,到源服务器的请求是由用户首次命中的数据中心发送的。

而同样的请求,如果使用 WARP+,请求将由离源服务器最近的数据中心发送(换句话说,最近的数据中心和用户首次命中的数据中心之间的通信使用的是 Cloudflare 自家的线路,称为 Argo[6],即最佳路由)。

WARP+ 示意图
WARP+ 示意图

Teams

在 Cloudflare 中,你可以创建一个团队,通过它你可以获得 50 个免费使用 WARP+ 服务的席位(准确地说,是 WARP for Teams)。

当你使用 Cloudflare Zero Trust 的 WARP for Teams 时,你的 IP 将是 Cloudflare 的初始数据中心(首次命中)的 IP。例如,当我在深圳连接到 WARP 时,请求目标网站所显示的 IP 地址是 Cloudflare 上海数据中心的 IP。


在中国大陆,你有时可能有机会连接到 WARP 服务器。如果遇到任何错误,可以参考故障排除[7]获取更多详细信息。

关于隐私

现在,你肯定从上面的例子中学到了很多。你可能会好奇,既然你的请求是由 Cloudflare 数据中心的代理服务器转发的,那么代理服务器会暴露你的真实 IP 地址吗?

正如 Cloudflare 的博客文章 WARP is here (sorry it took so long)[8] 中所说:从技术角度看,WARP 是一个专用网络。但它的设计面向与传统网络完全不同的受众。WARP 的设计目的不是让你在旅行时访问有地理限制的内容。它不会向你访问的网站隐藏你的 IP 地址。

但是,正如我们上面分析的,只有你和 Cloudflare 之间的通信是通过 WireGuard 协议加密的。实际上,你的请求最终会发送到源服务器,如果源服务器:

  • • 是 Cloudflare 的客户:你的 IP 可能会由 Cloudflare 提供。
  • • 不是 Cloudflare 的客户:TCP 连接将在 Cloudflare 代理服务器和源服务器之间建立,因此源服务器不会知道你的真实 IP 地址。

你可以访问这个网站:https://www.cloudflare.com/cdn-cgi/trace 来检查你的 IP 是否正在使用 WARP。

然后你可以请求该网站来检查它是否托管在 Cloudflare 上。一些托管在 Cloudflare 上的网站会显示你的真实 IP 地址。但对于那些没有的,它只会显示 Cloudflare 的 IP 地址。

引用链接

[1] Cloudflare Warp:https://blog.timerring.com/posts/cloudflare-warp/
[2]DNS 简介:https://blog.timerring.com/posts/a-brief-introduction-to-dns/
[3]Cloudflare 博客:https://blog.cloudflare.com/warp-technical-challenges/
[4]构建 Cloudflare WARP 的技术挑战:https://blog.cloudflare.com/warp-technical-challenges/
[5]一个例子:https://blog.skk.moe/post/something-about-cf-warp/
[6]Argo:https://www.cloudflare.com/application-services/products/argo-smart-routing/
[7]故障排除:https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/troubleshooting/client-errors/#CF_HAPPY_EYEBALLS_MITM_FAILURE
[8]WARP is here (sorry it took so long):https://blog.cloudflare.com/announcing-warp-plus/




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://www.hqyman.cn/post/11712.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: