一次 CloudFlare 配置阿里云 ALB 源站返回 504 超时的排查记录(用户当地运营商封锁IP)

1. 起因

有孟加拉的用户反馈,无法正常登录APP,会提示网络相关的错误提示,开启VPN能够正常使用。
APP使用的网络组件是okhttp,界面错误信息如下:

1
2
3
failed to connect to app-api.xx.xx/
172.66.xxx.xxx (port 443) from / 192.168.0.101 (port 38784) after
10000ms

2. 现有架构

域名在Cloud Flare进行解析,解析的CNAME为阿里云的ALB地址,具体的服务在阿里云服务器上。

3. 排查步骤

  • 与移动端确认错误信息原因,172.66.xxx.xxx (port 443)表示Cloud Flare边缘服务器的IP,有显示表明域名解析成功。192.168.0.101 (port 38784)表示用户IP,配合用户提供的截图是用户有连Wi-Fi。
  • 尝试让用户不连Wi-Fi,用手机移动网络是否能正常访问,结果依旧有网络错误。且确认用户不开VPN能够正常访问谷歌商店以及其他APP。
  • 本地(国内)ping边缘服务器能够正常ping通,沟通用户用下载网络链路测试APP工具PingTools,显示全链路不通
  • 结合网上案例,基本确认是用户本地 ISP 到 Cloudflare 这段路径有问题,当地电信运营商封锁/限制了部分 Cloudflare IP 段。

4. 尝试的解决方法

  1. 从网上了解到,Cloud Flare有一个路由优化的服务Argo Smart Routing,登录CF的管理后台,发现本来就有开启这个服务。进一步了解,这个玩意主要是优化CF内部链路的,没法解决用户到边缘服务器的链路问题。
  2. 老老实实提工单,尝试让CF的技术人员调整下分配的边缘服务器,但结果是让我先提供用户的MTR结果。
  3. 时间上已经等不及了,上面已经明确了是用户到CF边缘服务器的链路问题,那么更直接的方法是不用CF的代理,不用CDN加速和WAF,但是这个有暴露源站的风险。原本计划用阿里云的国际加速,但是需要额外费用(固定+按量付费)。后面去AWS问了下,有按量付费的服务,而且AWS有分发策略功能,也有CND加速和AWS,刚好匹配阿里云的ALB。

5. 具体实施步骤

  1. 登录AWS管理后台,切换到 us-east-1 区域!切换到 us-east-1 区域!!切换到 us-east-1 区域!!!这一步很重要。
  2. ACM → 请求证书 → 公有证书
  3. 填写之前在CF中解析的域名
  4. 验证方式选 DNS 验证
  5. 创建后,把给出的 CNAME 记录添加到 DNS
  6. 等待状态变为 ISSUED
  7. 创建 CloudFront 分发策略
  8. 分发创建后会生成一个 dxxxxxx.cloudfront.net 域名
  9. 登录CF后台,原本的域名解析由代理(橙色云)模式改为仅解析模式(灰色云),解析值由原来的ALB地址改为分发的AWS域名,这一步我是直接全量切换的,如果有区域需求,可以使用Route53做精细化分流,比如说某些国家还是走CF代理

6. 注意事项

  1. 创建 CloudFront 分发时,要注意无论是用CLI还是GUI页面创建,PriceClass这个参数要注意下,需要涉及到分发的服务器分布,会影响链路的速度。
  2. 另外还有一点要注意的,ViewerProtocolPolicy,如果之前兼容http的话,不要设置为https-only,或者设置为http转https
  3. 我这种操作,需要切换到us-east-1 区域,可能是由于当初AWS初始的服务器在这个区域,所以有些服务这个区域才有
  4. 另外个人感觉切换为AWS做分发后,虽然据说AWS的边缘服务器比CF的多,但是感觉响应速度没有之前快了,就算PriceClass调整后,效果也不大
0%