凌晨被叫起来:一次 DNS 缓存投毒导致全站 HTTPS 握手失败的排查实录

发布时间:2026/11/5 23:34:31

凌晨被叫起来:一次 DNS 缓存投毒导致全站 HTTPS 握手失败的排查实录 凌晨被叫起来一次 DNS 缓存投毒导致全站 HTTPS 握手失败的排查实录凌晨 2:17手机狂震。打开监控一看全站 HTTPS 握手失败率飙到 87%。用户刷不出页面支付链路全断。这个锅_DNS 缓存投毒_背了。事情是怎么发生的两周前我们做了一次灰度发布把部分流量切到了新 CDN 供应商。新供应商的 DNS 配置里有个坑TTL 设了 24 小时但他们在全球不同节点的 A 记录返回了不一致的 IP。更坑的是我们的 Nginx 反代层开启了resolver缓存默认缓存时间是 5 分钟。当某个节点的 IP 被运营商 DNS 投毒后Nginx 的 resolver 缓存把这个脏 IP 牢牢锁了 5 分钟。5 分钟在凌晨是 eternity。排查时间线真实记录02:17告警触发HTTPS 握手失败率 87%错误码SSL_ERROR_SYSCALL。02:21我登上故障机器先抓了个包tcpdump-ianyhost故障IP-w/tmp/dns_fail.pcapWireshark 一看TLS ClientHello 发出去服务端直接 RST。根本不是我们的证书链。02:28怀疑证书问题但证书没过期。排查证书路径openssl s_client-connect故障IP:443-servernameourdomain.com返回的证书是*.somecdn.net根本不是我们的通配符。IP 被劫持了。02:35确认 DNS 解析异常# 不同 DNS 服务器返回不同结果dig8.8.8.8 ourdomain.com Adig223.5.5.5 ourdomain.com Adig114.114.114.114 ourdomain.com A三个结果两个是脏 IP。运营商 DNS 缓存被投毒了。02:42紧急止血切回旧 CDNDNS 切换5 分钟生效清空 Nginx resolver 缓存nginx -s reload临时把被污染域名写进/etc/hosts指向已知干净的 IP02:50握手失败率降到 3%业务恢复。03:10开始根因定位。发现新 CDN 的 DNS 配置问题不同 Anycast 节点返回不同 A 记录且 TTL 不一致。运营商 DNS 在递归解析时某些区域拿到了被投毒的结果。根因分析DNS 缓存投毒的三层防线是怎么破的第一层DNSSEC我们没有开。开了 DNSSEC 的域名运营商 DNS 在返回结果时会校验 RRSIG 签名投毒难度指数级上升。但 DNSSEC 在国内普及率不到 5%很多解析商甚至不支持。第二层HTTPS 证书校验浏览器在 TLS 握手阶段会校验证书域名。如果 IP 被劫持到钓鱼站点证书域名对不上浏览器会拦截。但我们的问题更隐蔽劫持到的 IP 也是 CDN 节点证书是*.somecdn.net虽然域名不匹配但某些老版本客户端或内部 API 调用没有严格校验 SNI导致握手失败而不是安全拦截。第三层应用层健康检查我们的 Nginx upstream 健康检查是 30 秒一次 TCP 连通性探测。TCP 能通但 TLS 握手失败健康检查没报异常。这是个盲区。修复方案四层加固1. DNS 层DNSSEC 多解析商# 在域名注册商开启 DNSSECdnssec-keygen-aRSASHA256-b2048-fKSK ourdomain.com dnssec-keygen-aRSASHA256-b1024-fZSK ourdomain.com# 上传 DS 记录到注册商同时部署两个独立解析商主 备任何一方异常可快速切换。2. Nginx 层缩短 resolver 缓存 SNI 严格校验resolver 8.8.8.8 223.5.5.5 valid10s; # 默认 5 分钟改为 10 秒牺牲一点点性能换实时性 # 强制 SNI 校验不匹配直接 444 server { listen 443 ssl; server_name ourdomain.com; if ($host ! $server_name) { return 444; } }3. 监控层HTTPS 握手成功率 证书域名校验# Prometheus 告警规则-alert:HTTPSHandshakeFailureRateexpr:|( sum(rate(nginx_http_requests_total{status~4..|5..}[1m])) / sum(rate(nginx_http_requests_total[1m])) ) 0.05for:30slabels:severity:criticalannotations:summary:HTTPS 握手失败率超过 5%再加一个主动探测#!/bin/bash# check_ssl.shforhostinourdomain.com api.ourdomain.com;docert_name$(echo|openssl s_client-connect$(dig short $host|head-1):443-servername$host2/dev/null|openssl x509-noout-subject2/dev/null|grep-oPCN\K[^,])if[$cert_name!*.ourdomain.com];thenechoALERT:$hostcert mismatch:$cert_namefidone4. 架构层DNS-over-HTTPSDoH兜底在移动端和内部服务集成 DoH 客户端绕过运营商 DNS// Go 示例transport:http.Transport{DialContext:func(ctx context.Context,network,addrstring)(net.Conn,error){// 使用 DoH 解析returndohResolver.DialContext(ctx,network,addr)},}踩坑记录Nginx resolver 缓存默认 5 分钟很多人不知道resolver指令的valid参数默认缓存时间是由 DNS 响应的 TTL 决定。如果上游 DNS 返回 24 小时 TTLNginx 也会缓存 24 小时。dig 命令不显示 DNS 缓存层级dig trace才能看到完整的递归解析路径普通dig只返回最终结果看不出是哪层缓存出了问题。SSL 证书不匹配 ≠ 浏览器拦截某些内部 API 客户端比如老版本 curl、Java 8 默认不校验 SNI只会握手失败日志里很难直接看出是 DNS 问题。DNS 切换后不要急着走A 记录 TTL 是 24 小时切换解析后全球 DNS 缓存刷新需要的时间 TTL 传播延迟。我们第一次切回旧 CDN 后5 分钟就以为恢复了结果欧洲节点 20 分钟后还在连脏 IP。写在最后DNS 是互联网的「基石」但也是最容易被忽视的环节。这次事故教会我三件事DNS 配置要审计不要只盯着代码和服务器DNS 解析链、TTL 设置、多供应商策略都是生产环境的一部分。监控要覆盖握手层TCP 连通不代表服务可用TLS 握手、证书校验、HTTP 响应内容都应该在监控里。止血要快要全清空 Nginx 缓存、切解析、写 hosts三板斧一起上不要一步一步试。DNS 投毒不常见但一旦发生就是全站级别。希望这篇记录能帮你在凌晨 2 点少熬一个小时。附排查 Checklistdig trace检查完整解析路径openssl s_client验证证书链tcpdump抓包确认 RST 来源nginx -s reload清空 resolver 缓存检查 DNSSEC 状态dig dnssec ourdomain.com DNSKEY
延伸阅读

更多相关文章

2026/11/5 14:04:07

15分钟完成黑苹果EFI配置:OpCore-Simplify图形化工具完全指南

15分钟完成黑苹果EFI配置:OpCore-Simplify图形化工具完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而头…

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑