Sukka's Blog

童话只美在真实却从不续写

关于 Cloudflare Warp 的一些细节以及是否暴露访客真实 IP 的测试

Sukka's Avatar 2019-11-27 创作集

  1. 1. Warp 名字的由来
  2. 2. Warp 加速的原理
    1. 2.1. Cloudflare 的 CDN 是怎么回源的
    2. 2.2. Warp 如何利用 Cloudflare 的网络
  3. 3. 所以 Warp 是否会暴露你的 IP 给网站?

Cloudflare 在今年 9 月终于上线了 Warp 业务、并与他们的 DNS over TLS 应用 1.1.1.1 应用整合在一起发布。Warp 提供了安全加密的传输服务、同时又使网络连接更加快速和稳定,而且是免费的。

Warp 名字的由来

Warp 这个产品名称最早出现在 2017 年 9 月 28 日。在 Cloudflare 博客的「Introducing Cloudflare Warp: Hide Behind The Edge」这篇文章中,Cloudflare 提出一个产品,将 Cloudflare 的 Argo 就近回源更进一步实现内网回源。这项产品在 2018 年 4 月 5 日正式上线,上线前夕被更名为 Argo Tunnel。
但是 Warp 这个名称并未消失。在去年(2018 年)的 4 月 1 日,Cloudflare 上线了「4 个 1」业务:全球最快的递归 DNS 解析服务器 1.1.1.1。与此同时,Cloudflare 内部开始了一个计划:一个改善移动设备用户的网络连接稳定性、减少网络抖动的产品。Warp 这个名字现在被分配给了新产品,现在我们知道这个产品是什么了。

Warp 加速的原理

在这里只粗略说明 Warp 加速的思路。关于 Warp 的技术细节,可以参考 Cloudflare 博客的这篇文章:「The Technical Challenges of Building Cloudflare WARP」。

Cloudflare 的 CDN 是怎么回源的

在了解 Cloudflare Warp 是如何使你更快地在互联网上冲浪之前,我们需要了解一下 Cloudflare 的 CDN 业务是怎么回源的。一般的,Cloudflare 回源的方式是 由访客命中的数据中心进行回源

我在这里做一个测试。我们已经知道 Cloudflare 回源时使用的 IP 位于 X-Forwarded-For 中,因此我写了一个可以读取 X-Forwarded-For 并以 JSON 返回的 API、部署在我的几台服务器上,套一层 Cloudflare。接下来,我写了一个前端页面将 API 的结果显示出来。通过澳门 CTM 访问这个页面,可以看到结果如下所示:

cf-cdn-fetch-ip-1.png

其中,第一行 CF-Ray 末尾的 MFM 指的是我当前的请求命中了 Cloudflare 的 MFM 数据中心,也就是澳门数据中心;第二行的 Cloudflare Datacenter 的内容就是根据 CF-Ray 中的 MFM 判断的;第三行表明我的源站服务器位于新加坡 DigitalOcean;第四行表明 Cloudflare 回源时使用的 IP 是 172.69.74.57,GeoIP 定位表明这个 IP 位于澳门、属于 Cloudflare。
也就是说,虽然我的源站服务器在香港,但是我访问的是 Cloudflare 澳门数据中心、所以 Cloudflare 会直接使用澳门数据中心回源,也就是「由访客命中的数据中心进行回源」。

Cloudflare 的增值产品 Argo 提供了就近回源,即 由 Cloudflare 认为距离你源站 IP 最近最快的 Cloudflare 数据中心回源。现在让我们看看开通 Argo 以后是什么样的:

cf-cdn-fetch-ip-2.png

由于我仍在使用澳门 CTM 访问,因此我依然命中的是 Cloudflare 的澳门数据中心。但是此时回源 IP 属于 Cloudflare 的新加坡数据中心。开通 Argo 后 Cloudflare 会通过距离源站服务器距离更近的新加坡数据中心回源。Cloudflare 新加坡和澳门的数据中心之间使用的是 Cloudflare 自己的网络,比直接走公网更稳定快速。

了解了开通 Argo 前后的区别,也就了解了 Cloudflare 免费的 Warp 和需要收费的 Warp+(Warp Plus)之间的区别了。

Warp 如何利用 Cloudflare 的网络

作为一款改善网络体验的产品、Warp 依赖 Cloudflare 庞大的网络。Cloudflare 的每一个数据中心都会接入当地不止一个互联网交换中心(Internet Exchange 或 IX),并和当地的数十个 ISP 进行对等互联(Peer)。Warp 加速的理念就是:你的 ISP 到你的目标网站服务器所在的网络不一定稳定,但是你的 ISP 到距离你最近的一个 Cloudflare 数据中心的连接足够稳定,Cloudflare 数据中心到目标网站服务器的连接也足够稳定,因此虽然中间经过 Cloudflare 的中转,却可以起到加速的效果。

那么 Warp+ 呢?通过在 bgp.he.net 上检索 AS13335 可以看到,目前 Cloudflare 的 171 个数据中心组成的庞大网络接入了将近 200 个 IX,和超过 400 个 ISP 实现了对等互联。如果流量传输中需要利用到全部这 400 多个 ISP,那么就需要流量能够在 Cloudflare 的 171 个数据中心之间互相传输,Cloudflare 在这里就运用了 Argo。

cf-warp-plus.png

上文的 171 这个数字并不包括位于中国大陆的 23 个数据中心、因为这 23 个数据中心由百度云加速运营和维护,不属于 Cloudflare 网络。

除了在公网上搭建隧道,Cloudflare 最近还为几个地区的数据中心之间建立了物理的专线。利用公网隧道和物理专线,Cloudflare 成功组建了属于他们自己的 Private Backbone(私有骨干网),详情可以查看 Cloudflare 的这篇博客:「Argo and the Cloudflare Global Private Backbone

所以 Warp 是否会暴露你的 IP 给网站?

今年(2019 年)9 月 25 日,Cloudflare 的 CEO 再次在 Cloudflare 博客上发布文章、正式宣布 Cloudflare Warp 上线:「WARP is here (sorry it took so long)」。有趣的是,在这篇文章的「What WARP Is Not」章节中,说了这些内容:

From a technical perspective, WARP is a VPN. But it is designed for a very different audience than a traditional VPN. WARP is not designed to allow you to access geo-restricted content when you’re traveling. It will not hide your IP address from the websites you visit.

理论上来讲 Warp 是一种 VPN,但是 Warp 将不会帮助你解锁地域限制内容、也不会向你访问的网站隐藏你的 IP 地址。

等等?不隐藏你的 IP 地址?

让我们简单地思考一下:目标网站的服务器肯定不会全部安装 Cloudflare Warp,所以 Warp 只会用于你和 Cloudflare 的数据中心通讯。不论 Cloudflare 怎么实现的服务端,Cloudflare 数据中心到目标网站的服务器肯定要使用传统的 TCP 协议。所以目标网站的服务器只会收到 Cloudflare 的 TCP 连接,那么理应可以隐藏你的 IP。
但是,如果目标网站直接就在使用 Cloudflare 呢?你已经连接到了 Cloudflare 数据中心,Cloudflare 就可以和其它的 CDN 服务商一样、将你的 IP 通过约定的方式告诉目标网站的源站服务器。

现在让我们再做一个测试。这个测试很简单,你也可以跟着我一起试试。

1. 下载 Cloudflare 1.1.1.1 App 并启用 Warp

cf-warp-on.png

当 Warp 启用以后,用浏览器访问 https://www.cloudflare.com/cdn-cgi/trace

/cdn-cgi/trace Cloudflare 的 CDN 调试接口之一,所有托管在 Cloudflare 上的网站都存在

cf-warp-cdn-cgi-trace.png

如果最后一行看到 warp=onwarp=plus 则说明 Cloudflare Warp 已经连接成功、你正在通过 Cloudflare Warp 访问网站。
你应该能够注意到,在第三行 ip 可以看到你的「真实 IP」。

2. 访问 ip.gs 和 ip.cn 查看 IP 信息

截至到本文写就,ip.cnip.gs 均在使用 Cloudflare。虽然你在通过 Warp 访问这两个网站,但是这两个网站都给出了你的真实 IP。

cf-warp-ip.png

3. 访问 ip.sb 查看 IP 信息

截至到本文写就,ip.sb 并没有在使用 Cloudflare。在 ip.sb 上只能查看到 Cloudflare Warp 的 IPv4 和 IPv6 信息。

cf-warp-ipsb.png


看起来结果已经很明确了,对于托管在 Cloudflare 的网站,Cloudflare Warp 并不能隐藏你的 IP。但是对于并非使用 Cloudflare 的网站则只能获取 Cloudflare Warp 的 IP 而不是你的。

Firefox 之前推出了仍在 Beta 阶段的 Private Network 就是一个定制版 Cloudflare Warp。你也可以使用 Firefox Private Network 重复上述测试,结果是完全不一样的:www.cloudflare.com/cdn-cgi/trace 最后一行是 warp=offip.gsip.cnip.sb 也都只能给出 Cloudflare Warp 的 IP。

本文作者 : Sukka
本文采用 CC BY-NC-SA 4.0 许可协议。转载和引用时请注意遵守协议!
本文链接 : https://blog.skk.moe/post/something-about-cf-warp/

本文最后更新于 天前,文中所描述的信息可能已发生改变