首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >甲方又报警了:443 端口“消失”之谜——一次境外 HTTPS 被墙的血泪排查录

甲方又报警了:443 端口“消失”之谜——一次境外 HTTPS 被墙的血泪排查录

原创
作者头像
高老师
发布2025-09-13 22:09:57
发布2025-09-13 22:09:57
6600
代码可运行
举报
运行总次数:0
代码可运行

一、故障背景(一句话版本)

晚上 21:00,用户群炸锅: “小程序打不开图片了!” “网页白屏!” 我打开监控,发现所有 境外 HTTPS 请求 443 端口集体 Timeout,境内服务安然无恙。 ——得,经典“被墙”套餐。


二、现场环境(省得你问)

条目

出口

阿里云香港 ECS → 上海办公区

协议

HTTPS(TLS1.3)

端口

443(废话)

域名

cdn.anonl.cn(示例)

证书

Let's Encrypt 通配符,离过期 47 天,排除证书锅

客户端

全国三大运营商 + 海外 CDN 节点


三、复现姿势(3 行命令)

代码语言:javascript
代码运行次数:0
运行
复制
# 1. 本地 dig 一把
dig cdn.anonl.cn +short
104.21.4.99        # Cloudflare IP,正常

# 2. curl 直接测
curl -I https://cdn.anonl.cn/logo.png
#  hangs 30 s → Connection timed out

# 3. 换 80 端口
curl -I http://cdn.anonl.cn/logo.png
#  200 OK,瞬间返回

结论:80 能通,443 被丢包,典型的“协议阻断”。


四、排查流水账(按时间线直播)

时间

操作

结果

21:10

Zabbix 触发“境外 HTTPS 响应时间 > 30 s”告警

值班手机震到桌脚

21:15

全国拨测平台 → 选 20 个节点

电信/移动/联通 443 全红,海外节点全绿

21:20

mtr -P 443 -T cdn.anonl.cn

跳点 4(202.97.x.x)之后丢包 100%

21:25

openssl s_client -connect

第一次握手 ClientHello 发出去无响应

21:30

换 IP 复测

把域名解析到 172.67.209.53 → 依旧 timeout

21:35

改 Hosts 走境内 CDN

秒开,确认业务无宕机

21:40

官方工单

阿里云回复:“非我司骨干问题,建议检查是否命中运营商管控策略。”(甩锅成功)


五、根因定位(甩锅给 GFW 的实锤)

  1. 只在中国大陆方向 443 被丢包
  2. 换 IP 无效 → 不是 IP 封,是 SNI 特征封
  3. cdn.anonl.cn 改成 假域名 cdn.anonl.xyz(境外解析相同 IP)→ 立即复活
  4. 再改回原名 → 继续 timeout

实锤:SNI 字段命中了某关键字,被 RST 复位。


六、应急止血(10 分钟搞定)

方案 A: 域前置(Domain Fronting)——用 Cloudflare 的大牌域名当跳板

代码语言:javascript
代码运行次数:0
运行
复制
Client Hello SNI = cf-cache.xxxxx.com
Host 头 = cdn.anonl.cn

成本 0,5 分钟生效,甲方先睡觉。

方案 B: 境内 CDN 全量接管——把图片预热到阿里云 CDN,443 走国内节点,境外源站当备份。 (次日白天再搞,省的半夜背锅)


七、复盘小结(拿去写 PPT 直接贴)

  1. 现象:境外 443 端口集体超时,80 正常 → 99% 被墙
  2. 定位:mtr + openssl s_client 三板斧,10 分钟锁定丢包点
  3. 验证:换域名 / 改 SNI / 境内 CDN 对比,排除业务故障
  4. 应急:域前置兜底,用户侧 0 改动
  5. 长久:
    • 敏感域名拆分,静态资源用“无公害”子域
    • 多 CDN 热备,自动 failover
    • 监控再加“SNI 探测”指标,下次比用户先知道

八、彩蛋:一行命令检测是否被墙

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
domain=$1
echo | timeout 3 openssl s_client -connect ${domain}:443 -servername ${domain} 2>/dev/null
if [ $? -ne 0 ]; then
  echo "${domain} 443 被墙 or 服务挂"
else
  echo "${domain} 443 正常"
fi

保存为 wall-or-not.sh,以后值班先跑一遍,别再背冤枉锅。


九、结语

凌晨 2:30,甲方在群里回复: “图片又能看了,你们运维真玄学。” 我默默把聊天记录截图扔进“年度背锅图鉴”。

443 端口不会无缘无故消失,它只是在 GFW 的黑名单里旅了个游。 记住这篇流水账,下次 10 分钟定位,5 分钟止血,剩下的时间—— 去睡觉,别和墙较劲。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、故障背景(一句话版本)
  • 二、现场环境(省得你问)
  • 三、复现姿势(3 行命令)
  • 四、排查流水账(按时间线直播)
  • 五、根因定位(甩锅给 GFW 的实锤)
  • 六、应急止血(10 分钟搞定)
  • 七、复盘小结(拿去写 PPT 直接贴)
  • 八、彩蛋:一行命令检测是否被墙
  • 九、结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档