Skip to content

🔍 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.66

DNS 记录类型

类型全称含义示例
AAddress域名 → IPv4kb.sirenzhuli.cn → 124.222.126.171
AAAAAddress v6域名 → IPv6kb.sirenzhuli.cn → 240e::1
CNAMECanonical Name别名www.example.com → example.com
MXMail Exchange邮件服务器@ → mail.example.com
NSName Server该域名的 DNS 服务器example.com NS dns1.xxx
TXTText验证文本SPF/DKIM/域名验证
SRVService服务定位_sip._tcp.example.com
PTRPointerIP → 域名(反向解析)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.cn

dig(更详细)

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+)
加载练习题中...

有问题或补充?欢迎留言