DNS与CDN
DNS 是互联网的「电话簿」,把人类可读的域名翻译成机器能识别的 IP。CDN 则是互联网的「就近快递仓」,把内容缓存到离用户最近的节点。二者结合构成了现代 Web 加速与防护的基础。在网络安全中解析DNS 全流程、记录类型、安全威胁。
一、DNS
1.1 什么是 DNS、为什么需要 DNS
DNS(Domain Name System,域名系统)是互联网的「电话簿」,负责把人类可读的域名(如 www.example.com)翻译成机器能识别的 IP 地址(如 93.184.216.34)。
为什么需要 DNS:人记不住一串数字 IP,但记得住域名;机器只能用 IP 路由,不能用域名。DNS 就是这个翻译官。没有 DNS,你访问任何网站都得背 IP。
DNS 工作在应用层,默认基于 UDP 端口 53(响应小、快;区域传送和超大响应用 TCP)。UDP 适合 DNS------查询报文小,丢了重发即可,建 TCP 连接太亏。
1.2 DNS 域名层次结构
域名呈树状结构:
markdown
根域 (.)
│
┌──────────┼──────────┐
com org cn ← 顶级域 TLD
│ │ │
example.com example.org example.cn ← 二级域
│
www.example.com ← 三级域/主机
- 根域 (
.):通常省略不写,完整域名其实是www.example.com.(最后那个点); - 顶级域 TLD (Top-Level Domain):
.com、.org、.cn、.net等; - 二级域 :
example.com,通常是企业注册的域名; - 三级域/主机 :
www.example.com、mail.example.com。
1.3 DNS 解析流程详解(递归 + 迭代)
当浏览器请求 www.example.com 时,完整解析流程如下:
css
① 浏览器缓存 → 操作系统 hosts 文件 → 本地 DNS 缓存
│ 未命中
▼
② 客户端向【本地域名服务器】(递归解析器,通常是 ISP 或 8.8.8.8)发起查询
│
▼
③ 本地 DNS → 根域名服务器(迭代查询)
根返回 .com TLD 服务器的 IP
│
▼
④ 本地 DNS → .com 顶级域名服务器
返回 example.com 权威服务器的 IP
│
▼
⑤ 本地 DNS → example.com 权威服务器
返回 www.example.com 的 A 记录(IP)
│
▼
⑥ 本地 DNS 把结果缓存(按 TTL),返回给客户端
⑦ 客户端拿到 IP,发起 TCP 连接
两种查询方式:
- 递归查询:客户端只发一次请求,本地 DNS 负责「查到底」,最终返回最终结果。客户端 → 本地 DNS 就是递归(「我帮你查到底」);
- 迭代查询:本地 DNS 依次向根、TLD、权威查询,每次得到「下一跳地址」自己去问,直到拿到结果。本地 DNS → 根/TLD/权威就是迭代(「你自己去问」)。
类比:递归像你找客服,客服帮你把所有事办完再回你;迭代像客服告诉你「这事归 A 部门」,你得自己跑去 A 部门,A 部门又说「归 B 部门」,你再跑去 B......
缓存层级 :浏览器缓存 → OS 缓存(hosts 优先)→ 本地 DNS 缓存 → 各级权威。命中缓存只需几毫秒,全量解析可能上百毫秒。每条记录都有 TTL(Time To Live),过期前直接用缓存,过期后重新查。
1.4 DNS 记录类型
| 类型 | 作用 | 示例 |
|---|---|---|
| A | 域名 → IPv4 地址 | www IN A 1.2.3.4 |
| AAAA | 域名 → IPv6 地址 | www IN AAAA 2001:db8::1 |
| CNAME | 域名别名,指向另一个域名 | cdn IN CNAME cdn.cloudflare.net |
| MX | 邮件服务器 | IN MX 10 mail.example.com |
| TXT | 任意文本,常用于 SPF、DKIM、域名所有权验证 | IN TXT "v=spf1 include:_spf.google.com ~all" |
| NS | 该域名由哪些权威 NS 解析 | IN NS ns1.example.com |
| SOA | 区域授权起始,含管理信息 | 含主 NS、管理员邮箱、序列号、刷新间隔 |
| PTR | IP → 域名(反向解析) | 4.3.2.1.in-addr.arpa IN PTR www.example.com |
| SRV | 服务记录,指明服务端口 | _sip._tcp IN SRV 10 60 5060 sip.example.com |
| CAA | 指定允许哪些 CA 给此域名签证书 | IN CAA 0 issue "letsencrypt.org" |
安全常用:
- 查 A 记录看 IP(
nslookup、dig); - 查 CNAME 链判断是否接入 CDN;
- 查 TXT 记录找 SPF/DKIM,或发现域名所有权验证痕迹;
- 查 PTR 反查域名(IP 反查)。
1.5 DNS 安全威胁
- DNS 劫持 :篡改 DNS 响应(路由器、ISP、恶意软件、注册商账号被盗),把用户引到假站点。例如把
bank.com解析到攻击者 IP; - DNS 污染(DNS 投毒) :在用户请求 DNS 时,攻击者抢先注入伪造响应,让缓存服务器记下错误记录(GFW 的原理之一)。著名的「519 断网事件」就是 DNSPod 遭 DDoS 后引发的连锁故障,导致全国大量网站无法解析;
- DNS 隧道 :把数据编码进 DNS 查询子域名,绕过防火墙(如
data.evil.com),常被 C2 通信、数据外发利用。特征:异常长的子域名、高频查询; - DNS 放大攻击 :利用开放 DNS 解析器反射 UDP 大响应,做 DDoS 放大。攻击者伪造源 IP(受害者)向开放解析器查
ANY记录,解析器返回大响应打到受害者; - DNS 重绑定攻击(DNS Rebinding) :攻击者控制的域名先解析到攻击者 IP(同源策略放行 JS),短 TTL 过期后重新解析到内网 IP(如 127.0.0.1、192.168.x.x),浏览器认为还是同源,JS 就能访问内网服务------绕过同源策略实现内网穿透。
防御:
- DNSSEC:对 DNS 记录做数字签名,防篡改、防伪造(但不加密查询内容);
- DoH/DoT(DNS over HTTPS/TLS):加密 DNS 查询,防窃听和污染;
- 内网 DNS 限制递归来源(不开放给公网);
- 监控异常长子域名(隧道特征)、高频查询;
- 浏览器对短 TTL 域名做 pinning,防重绑定。
二、CDN
2.1 什么是 CDN
CDN(Content Delivery Network,内容分发网络)是一组分布在全球的边缘节点服务器,把源站内容缓存到离用户最近的节点,让用户从就近节点取数据,从而加速访问、减轻源站压力。
类比:你在全国连锁奶茶店买奶茶,不用每次从总部发货,就近门店就有。CDN 节点就是这些「就近门店」,源站是「总部」。
2.2 CDN 工作原理
objectivec
① 网站管理员把域名(如 cdn.example.com)CNAME 到 CDN 厂商域名
cdn.example.com → CNAME → xxx.cloudcdn.net
② 用户访问 cdn.example.com 时,DNS 解析根据用户 IP 返回【最近的边缘节点 IP】(智能调度)
③ 边缘节点检查缓存:
命中 → 直接返回缓存内容
未命中 → 回源取数据,缓存后返回
④ 后续相同请求都从边缘节点响应
CDN 的好处:
- 加速:就近访问,降低延迟;
- 抗 DDoS:流量打到 CDN 节点,源站受保护;
- 隐藏源站 IP:用户只能看到 CDN 节点 IP,看不到真实服务器 IP;
- 节省带宽:缓存命中不回源,源站带宽压力小。
2.3 CDN 如何隐藏真实 IP
用户访问域名时,DNS 返回的是 CDN 边缘节点 IP,而非源站 IP。所有流量先到 CDN,CDN 再回源。攻击者直接 ping 域名只能看到 CDN 节点,无法直接拿到源站 IP。这就是 CDN 的「隐藏源站」效果------但也并非无懈可击。
三、绕过CDN 暴露真实 IP 的风险点
历史 DNS 记录暴露:早期网站可能直接把 A 记录指向源站,后来才上 CDN。历史解析记录会暴露曾经的源站 IP。
子域名解析暴露 :主站上了 CDN,但子站(如 mail.example.com、test.example.com、admin.example.com、api.example.com)可能没上,直接解析到源站。
邮件服务器暴露 :让网站发一封邮件(注册、找回密码、订阅),查看邮件原始头中的 Received 字段,里面的 IP 往往就是源站(邮件服务器常和 Web 同机或同网段)。
SSL 证书查询暴露:源站若部署了 SSL 证书,证书里会绑定域名。通过反查某 IP 上有哪些证书,证书包含的域名能定位源站。
被动 DNS(Passive DNS)暴露:被动收集全球 DNS 解析历史,找出该域名曾经解析过的所有 IP。即使现在上了 CDN,历史记录里仍有源站 IP。
网站漏洞泄露:利用网站自身的漏洞或信息泄露页面,让服务器主动暴露自己的 IP。
- SSRF:让服务器请求攻击者控制的地址,攻击者收到请求看源 IP;
- phpinfo() :PHP 信息页暴露
SERVER_ADDR(源站内网/真实 IP); - probe 文件 :
php探针、tz.php、probe.php等环境检测脚本; - 配置文件泄露 :
.env、config.json等含数据库/服务器 IP; - 错误页:某些报错页会暴露服务器内网 IP。
F5 LTM 解码暴露 :F5 BIG-IP 负载均衡器会在 Cookie 里编码客户端真实 IP(或内网 IP)。F5 的 BIGipServer Cookie 用一种简单的 XOR+轮转编码,可解码出内网 IP。
APP网络请求暴露:网站上了 CDN,但 APP 可能直连真实 IP(开发者图省事或 CDN 配置遗漏)。抓 APP 的网络请求,可能直接看到源站 IP。
国外节点访问暴露:部分 CDN 只对国内加速,国外访问可能回源或解析到真实 IP。
HTTP访问暴露 :某些 CDN 只代理 HTTPS,用 http:// 直接访问可能拿到源站。
favicon hash暴露:用 favicon 图标的 hash 在 fofa 等搜索引擎反查同图标站点,可能找到未上 CDN 的同源站。