HAI PA.CC

海帕

记录折腾 CloudFlare 大陆加速

CDN CF CloudFlare GoEdge IMGINK Linux ONO 主题 前女友 图床 建站 挂机 汇丰 爱情 脚本

项目上已经用了一年多 CF 了(目前本博客也在使用),目前的方案我认为还是性能损耗太大,需要占用多台机器作负载均衡来分流来自大陆的攻击流量。

目前 CF 网络的拓补图
目前结构拓补图

这里面其实需要解释到的是国内请求为什么不直接接入 CF 边缘网络。由于我们的 IP 是三网直连的线路,如果直接通过负载均衡器接入 CF,会发生被白嫖的事件。每天有数千台服务器在对所有公网 IP 地址进行探测以选出“优选节点”,如果直接接入 CF ,意味着任何域名解析到我们的 IP 均可以正常使用,这是我们无法接受的(流量费用)。通过 10 台服务器搭建的自有 cdn ,可以实现对域名的过滤,仅允许我们设置的域名在大陆方向继续传输到 CF 边缘网络。

但是这存在一个问题,性能消耗过大,因为来自大陆的所有流量都需要在 10 台服务器里进行解密再加密转发到 CF 边缘网络,根据一年来的受攻击记录,每台服务器最大承受攻击频率为 8000 QPS ,对于较大的僵尸网络袭击捉襟见肘。我们尝试关闭 cdn 节点的一切 waf 模块与日志记录,收效甚微,根本原因还是在于加密再加密时的性能损耗。

最近我在尝试新的方法,使用 TCP 协议转发不作解密加密,直接将原数据包转发给 CF 边缘网络。尝试了两款开源程序,HAProxy 和 Envoy ,两款程序均能够通过获取 TLS 握手时发送的 Client Hello 中的 server name 即 SNI 来进行鉴权,符合我们设置的白名单则转发,不符合便直接丢弃。在性能测试时,我们在 Envoy 测试时做到了 40K QPS (与现有 cdn 反代方案相同情景)。不过性能瓶颈得到了改善,但新的问题又出现了,由于直接转发的 TLS 数据包,无法做到向 CF 边缘网络透传客户 IP,会导致 CF WAF 模块中基于 IP 请求的速率限制不可用,且源站也无法获取到访客 IP,这大大降低了后端业务的安全性。 我们再三确认了 CF CDN 不支持 PROXY Protocol ,这个方法宣告失败。

未来有空时,会试着从 F5 负载均衡器中抓取数据包,尝试通过 irules 识别 SSL 握手时的 SNI 信息并进行放行或丢弃操作(相关文档 )。如果可行,在验证性能达标的前提后可以彻底抛弃 cdn 反代方案,节省大量服务器成本。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

* 特别说明:匿名评论发布后无法自动通过,需审批后才能显示,请勿重复提交
** 匿名评论系统由WordPress提供;