域名解析原理与网络接入
12.4 DNS解析实战
Tip
浏览器不知道google.com 在哪,它只知道 IP 地址。DNS (Domain Name System) 就是互联网的电话本/通讯录,负责把人名 (域名) 翻译成电话号码 (IP)。
1. 为什么要学这个?
你刚买了解析,访问网站报错 DNS_PROBE_FINISHED_NXDOMAIN。
你迁移了服务器,换了 IP,结果有的用户能访问,有的用户访问的还是旧 IP。
这通常不是你的服务器坏了,而是 DNS 缓存在作祟。不懂 DNS,查 Bug 就像在像刻舟求剑。
2. 核心概念:全球接力跑
当你输入 example.com 时,发生了一次环球旅行(递归查询):
- Browser Cache: 浏览器自问:“我刚访问过吗?”
- Local DNS: 问路由器/运营商:“你知道它在哪吗?”
- Root Server: 问根服务器:“你知道
.com归谁管吗?” - Auth Server: 问权威服务器 (如 Cloudflare):“它的 IP 是多少?”
- Answer: 权威服务器回答:“是
1.2.3.4”。
每一层都会缓存结果。这就是为什么你改了解析,别人不一定马上能看到。
3. 解决方案 (HOW)
3.1 配置 Vercel 解析
- Type: CNAME
- Name:
www - Value:
cname.vercel-dns.com - TTL: 自动 (或 60s)
3.2 验证解析 (dig 命令)
不要只用浏览器试(有缓存)。用专业工具 dig (Linux/Mac) 或 nslookup (Windows)。
# 查询 A 记录
dig google.com A
# 查询 CNAME
dig www.google.com CNAME
# 指定 8.8.8.8 查 (绕过本地缓存)
dig @8.8.8.8 google.com
3.3 DNS 解析流程图
graph TD
User["用户电脑"] -->|"Step 1: 查 hosts/缓存"| Local["Local DNS"]
Local -->|"Step 2"| Root["根 DNS (.)"]
Root -->|"Step 3"| TLD["顶级域 DNS (.com)"]
TLD -->|"Step 4"| Auth["权威 DNS (Cloudflare)"]
Auth --"Step 5: 1.2.3.4"--> Local
Local --"Step 6: 返回 IP"--> User
style User fill:#fff9c4,stroke:#fbc02d
style Local fill:#ffcc80,stroke:#ef6c00
style Auth fill:#c8e6c9,stroke:#2e7d32
4. 避坑指南
| ❌ 不要这样做 | ✅ 应该这样做 | 为什么 |
|---|---|---|
| 改了 IP 就急眼 | 等待 TTL 生效 | 全球 DNS 生效通常需要 10-60 分钟,甚至 24 小时。急也没用。 |
| 小 TTL | 迁移时调短 TTL | 如果你计划明天迁服务器,今天先把 TTL 改成 60秒。这样明天切的时候生效快。平时保持 1小时即可。 |
| 改 Hosts 忘删 | 清理 Hosts | 很多人为了测试在 hosts 文件里写死过 IP,结果半年后排查问题排查了一天,发现是本地 hosts 背锅。 |
5. 真实案例
Story
2021年,Facebook 消失的一天
2021年,Facebook 全球宕机 6 小时。工程师不仅连不上服务器,甚至刷不开门禁卡(因为内网门禁也依赖 DNS)。 原因:由于路由配置错误,Facebook 的权威 DNS 服务器从互联网上“消失”了。这就相当于有人把电话本里“Facebook”这一页给撕了,虽然服务器还在那,但没人能找到号码。
Vibe 心法:DNS 是互联网的咽喉。修改解析时的每一秒 TTL 都关乎用户访问的连贯性。学会使用 dig 命令去刺破缓存的迷雾,而不是在浏览器的刷新按钮上寻找心理慰藉。
6. 本章小结
- TTL (Time To Live):决定了缓存存活多久。修改解析前先调小 TTL。
- Dig:学会用
dig或nslookup诊断网络,而不是用浏览器傻等。 - 耐心:DNS 缓存无处不在,有时候解决办法就是“等一会儿”。