主题
🔍 DNS 域名解析
DNS 是互联网的电话簿——把
baidu.com翻译成110.242.68.66
DNS 是什么
全称 Domain Name System,核心功能:域名 ↔ IP 互查。
你在浏览器敲 baidu.com
↓
1. 查本地 hosts 文件 → 没找到
2. 问本地 DNS 缓存 → 没缓存
3. 问运营商的 DNS 服务器(114.114.114.114)
4. 运营商去根 → com → baidu.com 逐级查
5. 返回 110.242.68.66
↓
浏览器连 110.242.68.66:443整个过程通常 50-200ms。
DNS 解析流程(完整版)
本地 hosts 文件
↓ 未命中
本机 DNS 缓存
↓ 未命中
本地 DNS 服务器(路由器/运营商 114.114.114.114)
↓ 未命中
根域名服务器(.)
↓ 返回 .com 的 NS
.com 顶级域服务器
↓ 返回 baidu.com 的 NS
baidu.com 权威 DNS 服务器
↓ 返回 110.242.68.66DNS 记录类型
| 类型 | 全称 | 含义 | 示例 |
|---|---|---|---|
| A | Address | 域名 → IPv4 | kb.sirenzhuli.cn → 124.222.126.171 |
| AAAA | Address v6 | 域名 → IPv6 | kb.sirenzhuli.cn → 240e::1 |
| CNAME | Canonical Name | 别名 | www.example.com → example.com |
| MX | Mail Exchange | 邮件服务器 | @ → mail.example.com |
| NS | Name Server | 该域名的 DNS 服务器 | example.com NS dns1.xxx |
| TXT | Text | 验证文本 | SPF/DKIM/域名验证 |
| SRV | Service | 服务定位 | _sip._tcp.example.com |
| PTR | Pointer | IP → 域名(反向解析) | 171.222.126.124 → kb.sirenzhuli.cn |
DNS 排故工具
nslookup(最常用)
bash
# 查 A 记录
nslookup kb.sirenzhuli.cn
# Server: 127.0.0.53
# Address: 124.222.126.171
# 指定 DNS 服务器查
nslookup kb.sirenzhuli.cn 8.8.8.8
# 查 MX 记录
nslookup -type=MX sirenzhuli.cn
# 查 NS 记录
nslookup -type=NS sirenzhuli.cn
# 查所有记录
nslookup -type=ANY sirenzhuli.cndig(更详细)
bash
# 基本查询
dig kb.sirenzhuli.cn
# 只看答案
dig kb.sirenzhuli.cn +short
# → 124.222.126.171
# 追踪完整解析链路
dig kb.sirenzhuli.cn +trace
# 查指定记录类型
dig sirenzhuli.cn MX
dig sirenzhuli.cn TXT/etc/hosts(本地强制解析)
bash
# 加一条本地解析,绕过 DNS
echo "124.222.126.171 kb.sirenzhuli.cn" >> /etc/hosts
# 测试(排故时常用,确认 DNS 没问题才改 hosts 绕过)
ping kb.sirenzhuli.cn常见 DNS 问题排查
问题1:网站打不开,nslookup 查不到
bash
# 1. 确认域名没过期
whois sirenzhuli.cn | grep -i "expir"
# 2. 查 DNS 服务器是否正
dig sirenzhuli.cn NS +short
# 3. 查权威 DNS 服务器是否在线
dig @权威DNS sirenzhuli.cn +short问题2:解析的 IP 不对
bash
# 1. 清本地 DNS 缓存
sudo systemd-resolve --flush-caches
# 2. 查 hosts 里有没有旧记录
grep sirenzhuli /etc/hosts
# 3. 换 DNS 服务器测试
nslookup sirenzhuli.cn 8.8.8.8
nslookup sirenzhuli.cn 114.114.114.114
# 两个结果都变了吗?→ DNS 记录生效了
# 一个变一个没变?→ 没变的 DNS 缓存未过期问题3:DNS 污染/劫持
bash
# 国内 DNS 和国外 DNS 结果不一致
nslookup example.com 114.114.114.114 # 国内
nslookup example.com 8.8.8.8 # 国外
# 结果不同 → 可能被劫持(GFW 或运营商)
# 解决:用 DoH(DNS over HTTPS)或 VPN配置域名解析(实战)
以腾讯云 DNSPod 为例,添加一条 A 记录:
主机记录:kb
记录类型:A
记录值:124.222.126.171
TTL:600(10分钟,调试时设短,稳定后改 3600)| TTL | 含义 | 适用 |
|---|---|---|
| 60-300 | 调试期 | 改 IP 时快速生效 |
| 600 | 正常 | 一般网站 |
| 3600+ | 长期不变 | CDN/固定 IP |
TTL 不是越小越好
TTL 太短 → DNS 查询量暴涨 → 可能被限流。调试时设 60 秒,上线改 600+。
🎯 本章要点
- DNS 排故三件套:
nslookup(快查)、dig +trace(完整链路)、/etc/hosts(绕过) - A 记录 = 域名→IP;CNAME = 别名;MX = 邮箱
- 解析 IP 不对:先清缓存,再换 DNS 服务器对比测试
- DNS 污染:国内/国外 DNS 查出来 IP 不一样
- TTL 调试设低(60-300),上线恢复正常(600+)
加载练习题中...