# 域名解析进阶:A / AAAA / CNAME / MX / NS / TXT 记录一次讲透
很多人买了域名、配了 DNS,但一看到 A 记录、CNAME 就头大。别怕,今天用最通俗的语言 + 实际场景 + dig 命令验证,把这些记录彻底讲明白。
读完这篇,你不仅能配好 DNS,还能用命令行自己排查解析问题。
---
## 一、DNS 解析的基础概念
DNS(Domain Name System)可以理解成互联网的电话本。你输入 zjunwei.com,DNS 把这个人类可读的名字翻译成机器可读的 IP 地址(如 1.2.3.4)。
DNS 记录就是这本电话本里的"条目",每种记录有不同的用途。核心有 6 种:
| 记录类型 | 作用 | 类比 |
|---------|------|-----|
| A | 域名 → IPv4 地址 | 家庭住址 |
| AAAA | 域名 → IPv6 地址 | 新版家庭住址 |
| CNAME | 域名 → 另一个域名 | 别名/外号 |
| MX | 指定邮件服务器 | 邮局地址 |
| NS | 指定 DNS 服务器 | 电话本管理员 |
| TXT | 存储文本信息 | 备注栏 |
---
## 二、A 记录(Address Record)
**作用**:把域名指向一个 IPv4 地址。
**实际场景**:你的服务器 IP 是 123.45.67.89,你想让 zjunwei.com 指向它。
配置示例(Cloudflare / 阿里云 DNS 后台):
```text
类型:A
名称:@(代表根域名)
内容:123.45.67.89
TTL:600
```
**常见子域名 A 记录**:
```text
名称:www → 内容:123.45.67.89
名称:api → 内容:10.0.0.5
名称:cdn → 内容:203.0.113.1
```
**dig 验证**:
```bash
dig zjunwei.com A
```
输出关键行:
```text
zjunwei.com. 600 IN A 123.45.67.89
```
---
## 三、AAAA 记录(IPv6 Address Record)
**作用**:把域名指向 IPv6 地址。
**什么时候用**:你服务器有 IPv6 地址,或者你想让网站在纯 IPv6 环境下也能访问。
配置示例:
```text
类型:AAAA
名称:@
内容:2001:db8::1
```
**dig 验证**:
```bash
dig zjunwei.com AAAA
```
输出:
```text
zjunwei.com. 600 IN AAAA 2001:db8::1
```
**注意**:如果只配了 AAAA 没配 A,IPv4 用户无法访问。目前建议 A 和 AAAA 同时配置。
---
## 四、CNAME 记录(Canonical Name Record)
**作用**:把域名指向另一个域名,而不是 IP。
**为什么不用 A 记录**:假设你用 GitHub Pages 托管博客,它的 IP 地址可能会变。如果你配 A 记录指向它当前的 IP,IP 变了你的网站就挂了。用 CNAME 指向 yourname.github.io,GitHub 那边自动更新 IP,你完全不用管。
配置示例:
```text
类型:CNAME
名称:www
内容:yourname.github.io
```
**CNAME 的重要规则(容易踩坑)**:
- 根域名(@)不能配 CNAME,只能用 A 记录。这是 DNS 协议规定
- CNAME 不能和其他记录共存。配了 CNAME 就不能再配 A/AAAA/MX
**dig 验证**:
```bash
dig www.zjunwei.com CNAME
```
输出:
```text
www.zjunwei.com. 600 IN CNAME yourname.github.io.
```
---
## 五、MX 记录(Mail Exchange Record)
**作用**:告诉全世界你的域名的邮件该送到哪个服务器。
**实际场景**:你用了 Google Workspace 或腾讯企业邮箱,需要配置 MX 记录让邮件能正常收发。
Google Workspace 的 MX 配置:
```text
类型:MX 名称:@ 内容:ASPMX.L.GOOGLE.COM 优先级:1
类型:MX 名称:@ 内容:ALT1.ASPMX.L.GOOGLE.COM 优先级:5
类型:MX 名称:@ 内容:ALT2.ASPMX.L.GOOGLE.COM 优先级:5
```
**优先级含义**:数字越小优先级越高。邮件系统会先尝试 1 号服务器,不可用再尝试 5 号。
**dig 验证**:
```bash
dig zjunwei.com MX
```
输出:
```text
zjunwei.com. 300 IN MX 1 aspmx.l.google.com.
zjunwei.com. 300 IN MX 5 alt1.aspmx.l.google.com.
```
---
## 六、NS 记录(Name Server Record)
**作用**:指定由哪个 DNS 服务器来管理你的域名解析。
**什么时候配**:更换 DNS 服务商时(比如从阿里云 DNS 换成 Cloudflare DNS)。
配置位置:**不在 DNS 管理后台配,而是在域名注册商后台配。**
举例:把 DNS 从阿里云换到 Cloudflare:
```text
类型:NS
名称:@
内容:alice.ns.cloudflare.com
内容:bob.ns.cloudflare.com
```
**dig 验证**:
```bash
dig zjunwei.com NS
```
输出:
```text
zjunwei.com. 86400 IN NS alice.ns.cloudflare.com.
zjunwei.com. 86400 IN NS bob.ns.cloudflare.com.
```
---
## 七、TXT 记录(Text Record)
**作用**:存储任意文本信息。虽然叫"文本记录",但主要用途是安全验证。
**三大实际用途**:
### 1. SPF(防邮件伪造)
告诉邮件接收方,哪些 IP 或服务器有权用你的域名发邮件:
```text
类型:TXT
名称:@
内容:v=spf1 include:_spf.google.com ~all
```
### 2. DKIM(邮件签名验证)
公钥存在 TXT 记录里,邮件接收方用来验签:
```text
类型:TXT
名称:google._domainkey
内容:v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQ...
```
### 3. 域名所有权验证
Google Search Console / SSL 证书验证 / 第三方服务验证:
```text
类型:TXT
名称:@
内容:google-site-verification=AbCdEf123456
```
**dig 验证**:
```bash
dig zjunwei.com TXT
```
输出:
```text
zjunwei.com. 300 IN TXT "v=spf1 include:_spf.google.com ~all"
```
---
## 八、实战:用 dig 排查 DNS 问题
### 场景 1:网站打不开,先看解析对不对
```bash
dig zjunwei.com A
```
检查返回的 IP 是不是你的服务器 IP。如果不是 → DNS 配置错误或被劫持。
### 场景 2:改完 DNS 不生效
```bash
dig zjunwei.com A @8.8.8.8
```
@8.8.8.8 指定用 Google 的公共 DNS 查询(不走本地缓存)。如果这个结果正确,说明 DNS 已生效,你的本地还没刷新。
### 场景 3:追踪完整解析路径
```bash
dig zjunwei.com +trace
```
从根 DNS 一路追踪到最终的 A 记录,能看到每一步的 DNS 服务器。
---
## 九、速查表
| 需求 | 用什么记录 | 示例值 |
|------|----------|-------|
| 网站指向服务器 | A | 123.45.67.89 |
| 网站指向 IPv6 | AAAA | 2001:db8::1 |
| 子域名指向另一个网站 | CNAME | other.example.com |
| 配置企业邮箱 | MX | mx.example.com |
| 换 DNS 服务商 | NS | ns1.example.com |
| SSL 验证 / 邮件签名 | TXT | 各种验证字符串 |
---