跳转至

02 - 域名与DNS

域名与DNS

本章核心: 理解域名系统工作原理,掌握DNS解析过程和记录类型


📖 章节导航

前序章节: 01-网络基础.md 后续章节: 03-服务器与SSH.md 快速参考: 网络工具箱.md 第1章 故障排查: 故障排查手册.md 第2章


📚 目录

  1. 引言:为什么需要域名
  2. 域名结构
  3. DNS系统
  4. DNS记录类型
  5. DNS解析过程详解
  6. 实战操作
  7. 域名注册与管理
  8. 常见问题

1. 引言:为什么需要域名

1.1 IP地址的困扰

想象一下,如果你想访问某个网站,需要记住这样的地址:

Text Only
访问百度:110.242.68.66
访问谷歌:142.250.183.46
访问淘宝:47.246.43.14

😫 这太痛苦了!IP地址是一串数字,既难记又容易出错。

1.2 域名的诞生

域名系统(Domain Name System,DNS)就是为了解决这个问题而诞生的:

Text Only
访问百度:www.baidu.com
访问谷歌:www.google.com
访问淘宝:www.taobao.com

✅ 简单、易记、有语义!

1.3 DNS的核心作用

DNS 就像是互联网的电话簿

  • 人类使用:记住域名(如 www.example.com
  • 机器使用:识别IP地址(如 93.184.216.34
  • DNS的作用:将域名翻译成IP地址
Text Only
用户输入域名 → DNS查询 → 获取IP地址 → 建立连接

2. 域名结构

2.1 域名层级结构

域名采用倒树状的层级结构,从右到左依次是:

Text Only
        . (根域名)
         |
    ┌────┴────┬────────┐
    |         |        |
   com       cn      net
    |         |        |
  example   baidu    google
    |         |        |
    www     www      mail

www.example.com 为例:

Text Only
www    .    example    .    com
 ↓          ↓           ↓
主机名    二级域名    顶级域名

2.2 域名层级详解

层级 名称 示例 说明
根域名 Root . 域名树的根,通常省略不写
顶级域名 TLD .com 最高级别的域名
二级域名 SLD example 用户注册的域名
三级域名 Subdomain www 二级域名下的子域名

2.3 域名示例解析

让我们分析几个常见的域名:

Text Only
www.baidu.com
├── www: 主机名(子域名)
├── baidu: 二级域名(百度注册的域名)
└── com: 顶级域名(商业机构)

mail.google.com
├── mail: 子域名(表示邮件服务)
├── google: 二级域名
└── com: 顶级域名

blog.example.org.cn
├── blog: 子域名
├── example: 二级域名
├── org: 顶级域名(组织)
└── cn: 国家代码顶级域名(中国)

2.4 常见顶级域名

通用顶级域名(gTLD)

域名 用途 示例
.com 商业机构 google.com
.org 非营利组织 wikipedia.org
.net 网络服务 sourceforge.net
.edu 教育机构 mit.edu
.gov 政府机构 usa.gov
.io 科技/初创公司 github.io
.dev 开发者 example.dev

国家代码顶级域名(ccTLD)

域名 国家/地区 示例
.cn 中国 baidu.cn
.us 美国 example.us
.jp 日本 yahoo.co.jp
.uk 英国 bbc.co.uk
.hk 香港 example.com.hk

新通用顶级域名(New gTLD)

近年来新增的顶级域名,更具语义化:

Text Only
.tech  - 科技类网站
.shop  - 电商平台
.blog  - 博客网站
.design - 设计相关
.xyz   - 通用域名

3. DNS系统

3.1 DNS的作用和重要性

DNS 是互联网基础设施的核心组成部分:

Text Only
🔑 核心作用:
1. 域名解析:域名 ↔ IP地址
2. 负载均衡:一个域名对应多个IP
3. 邮件路由:MX记录指定邮件服务器
4. 服务发现:SRV记录定位网络服务

没有DNS会怎样?

  • ❌ 无法通过域名访问网站
  • ❌ 无法发送电子邮件
  • ❌ 网络服务无法正常工作

3.2 DNS服务器类型

DNS系统由多级服务器组成,形成分布式数据库:

Text Only
┌─────────────────────────────────────────┐
│         用户设备(浏览器)                │
└──────────────┬──────────────────────────┘
               │ 查询
┌─────────────────────────────────────────┐
│      本地DNS解析器 / 递归服务器           │
│      (ISP提供的DNS或公共DNS)             │
└──────┬───────────────────────┬───────────┘
       │                       │
       ↓                       ↓
┌─────────────┐         ┌─────────────┐
│  根域名服务器 │         │ 缓存查询     │
│  (Root)     │         └─────────────┘
└──────┬──────┘
┌─────────────────────────────────────┐
│     顶级域名服务器 (TLD)              │
│     (.com, .cn, .net等)              │
└──────┬──────────────────────────────┘
┌─────────────────────────────────────┐
│     权威域名服务器                    │
│     (域名注册商管理的服务器)          │
└─────────────────────────────────────┘

各类服务器说明

服务器类型 数量 作用 示例
根域名服务器 13组(逻辑上) DNS系统的入口,指向TLD服务器 a.root-servers.net
顶级域名服务器 数百个 管理特定顶级域名 .com的TLD服务器
权威域名服务器 无数个 存储具体域名的DNS记录 example.com的权威服务器
递归解析器 无数个 代理用户查询,缓存结果 8.8.8.8, 114.114.114.114

3.3 DNS解析流程

DNS解析有两种查询方式:

递归查询(Recursive Query)

Text Only
客户端 → DNS服务器
       "请帮我查 www.example.com 的IP"
       DNS服务器自己完成所有查询
       返回最终结果给客户端

特点:客户端只发送一次请求,等待最终结果

迭代查询(Iterative Query)

Text Only
客户端 → 根服务器
       "请告诉我 www.example.com 的IP"
       根服务器:"我不知道,去问 .com 的服务器"
客户端 → .com 服务器
       "请告诉我 www.example.com 的IP"
       .com服务器:"我不知道,去问 example.com 的服务器"
客户端 → example.com 服务器
       "请告诉我 www.example.com 的IP"
       example.com服务器:"IP是 93.184.216.34"

特点:客户端需要多次请求,逐步接近目标


4. DNS记录类型

DNS记录是存储在DNS服务器上的数据,定义了域名与各种信息的映射关系。

4.1 A记录(Address Record)

作用:将域名映射到IPv4地址

Text Only
示例:
www.example.com.  IN  A  93.184.216.34
api.example.com.  IN  A  93.184.216.35

实际应用

Text Only
访问 www.example.com → 解析到 93.184.216.34

4.2 AAAA记录(IPv6 Address Record)

作用:将域名映射到IPv6地址

Text Only
示例:
www.example.com.  IN  AAAA  2606:2800:220:1:248:1893:25c8:1946

IPv6地址特点: - 长度:128位(IPv4是32位) - 格式:8组4位十六进制数 - 示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334

4.3 CNAME记录(Canonical Name Record)

作用:域名别名,指向另一个域名

Text Only
示例:
www.example.com.  IN  CNAME  example.com.
blog.example.com. IN  CNAME  example.com.

实际应用

Text Only
访问 www.example.com → 实际访问 example.com
访问 blog.example.com → 实际访问 example.com

使用场景: - 多个子域名指向同一服务器 - 使用CDN时指向CDN服务商的域名 - 域名迁移时的过渡

4.4 MX记录(Mail Exchange Record)

作用:指定邮件服务器

Text Only
示例:
example.com.  IN  MX  10  mail1.example.com.
example.com.  IN  MX  20  mail2.example.com.

说明: - 数字(10, 20)表示优先级,数字越小优先级越高 - 可以配置多个MX记录实现邮件服务器冗余

实际应用

Text Only
发送邮件到 user@example.com
→ 查询 example.com 的MX记录
→ 得到 mail1.example.com
→ 连接邮件服务器投递邮件

4.5 TXT记录(Text Record)

作用:存储文本信息,常用于验证和安全

Text Only
示例:
example.com.  IN  TXT  "v=spf1 include:_spf.google.com ~all"

常见用途

  1. SPF(Sender Policy Framework)
    Text Only
       "v=spf1 include:_spf.google.com ~all"
       指定哪些服务器可以发送该域名的邮件
       ```
    
    2. **DKIM(DomainKeys Identified Mail)**
    ```text
       "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
       用于邮件签名验证
       ```
    
    3. **域名验证**
    ```text
       "google-site-verification=abc123xyz"
       验证域名所有权(如Google Search Console)
       ```
    
    ### 4.6 NS记录(Name Server Record)
    
    **作用**:指定该域名的权威DNS服务器
    
    ```text
    示例:
    example.com.  IN  NS  ns1.example.com.
    example.com.  IN  NS  ns2.example.com.
    

说明: - 通常配置多个NS记录实现冗余 - 域名注册商需要知道NS记录才能正确委托

4.7 其他重要记录

记录类型 名称 作用
PTR Pointer Record 反向DNS解析,IP到域名
SRV Service Record 指定特定服务的服务器
SOA Start of Authority 域名的权威信息
CAA Certification Authority Authorization 指定哪些CA可以签发该域名的证书

5. DNS解析过程详解

5.1 完整的查询流程图

Text Only
用户访问 www.example.com
┌─────────────────────────────────────┐
│  1. 检查浏览器缓存                   │
│     是否有该域名的DNS记录?          │
└──────────┬──────────────────────────┘
           │ 有:直接返回IP
           │ 无:继续
┌─────────────────────────────────────┐
│  2. 检查操作系统缓存                 │
│     /etc/hosts 或系统DNS缓存        │
└──────────┬──────────────────────────┘
           │ 有:直接返回IP
           │ 无:继续
┌─────────────────────────────────────┐
│  3. 查询本地DNS服务器(递归查询)    │
│     通常是ISP提供的DNS              │
└──────────┬──────────────────────────┘
           │ 有缓存:返回IP
           │ 无缓存:开始迭代查询
┌─────────────────────────────────────┐
│  4. 查询根域名服务器                 │
│     "告诉我 .com 的TLD服务器"        │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  5. 查询 .com 的TLD服务器           │
│     "告诉我 example.com 的权威服务器" │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  6. 查询 example.com 的权威服务器   │
│     "告诉我 www.example.com 的IP"    │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  7. 返回IP地址                       │
│     93.184.216.34                   │
└──────────┬──────────────────────────┘
    本地DNS缓存结果
    返回给用户浏览器
    建立TCP连接,访问网站

5.2 浏览器访问网站时的DNS解析步骤

让我们用实际例子说明:

场景:用户在浏览器输入 www.baidu.com

步骤1:浏览器检查缓存

Text Only
浏览器DNS缓存
├── 存储位置:浏览器内存
├── 存储时间:通常几分钟
└── 作用:快速响应重复访问

步骤2:操作系统检查

YAML
Windows: C:\Windows\System32\drivers\etc\hosts
Linux/Mac: /etc/hosts

hosts文件示例:
93.184.216.34  www.example.com
127.0.0.1      localhost

步骤3:查询本地DNS服务器

Text Only
本地DNS服务器(递归解析器)
├── 位置:ISP提供或手动配置
├── 示例:8.8.8.8(Google DNS)
└── 作用:代理用户完成DNS查询

步骤4-7:迭代查询

Text Only
本地DNS → 根服务器 → TLD服务器 → 权威服务器
         ↓            ↓            ↓
      指向.com    指向baidu.com  返回IP

5.3 本地DNS缓存的作用

缓存层次结构

Text Only
┌─────────────────────────────────────┐
│  浏览器缓存(最快,但容量小)         │
│  TTL: 几分钟                         │
└──────────────┬──────────────────────┘
               │ 未命中
┌─────────────────────────────────────┐
│  操作系统缓存(hosts + DNS缓存)     │
│  TTL: 几小时                         │
└──────────────┬──────────────────────┘
               │ 未命中
┌─────────────────────────────────────┐
│  本地DNS服务器缓存(ISP DNS)         │
│  TTL: 根据记录的TTL设置               │
└──────────────┬──────────────────────┘
               │ 未命中
┌─────────────────────────────────────┐
│  权威DNS服务器(权威数据源)          │
└─────────────────────────────────────┘

TTL(Time To Live)

TTL 决定了DNS记录的缓存时间:

Text Only
DNS记录示例:
www.example.com.  300  IN  A  93.184.216.34
                   TTL = 300秒(5分钟)

含义:
- 该记录可以被缓存300秒
- 300秒后必须重新查询
- TTL越短,DNS解析越实时,但查询越多

常见TTL值: - 300(5分钟):频繁变更的记录 - 600(10分钟):一般网站 - 3600(1小时):稳定的服务 - 86400(24小时):很少变更的记录


6. 实战操作

6.1 使用 nslookup 命令查询DNS

nslookup 是Windows和Linux都支持的DNS查询工具。

基本用法

YAML
# 查询域名的A记录
nslookup www.baidu.com

# 输出示例:
服务器:  UnKnown
Address:  192.168.1.1

非权威应答:
名称:    www.a.shifen.com
Addresses:  110.242.68.4
          110.242.68.3
Aliases:  www.baidu.com

查询特定记录类型

Text Only
# 查询MX记录(邮件服务器)
nslookup -type=MX gmail.com

# 输出示例:
gmail.com  MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com  MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com  MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com
Text Only
# 查询NS记录(名称服务器)
nslookup -type=NS baidu.com

# 输出示例:
baidu.com     nameserver = ns7.baidu.com
baidu.com     nameserver = ns4.baidu.com
baidu.com     nameserver = ns3.baidu.com
baidu.com     nameserver = dns.baidu.com
Text Only
# 查询TXT记录
nslookup -type=TXT _dmarc.example.com

# 输出示例:
_dmarc.example.com text = "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

指定DNS服务器查询

Text Only
# 使用Google的DNS服务器查询
nslookup www.example.com 8.8.8.8

# 使用阿里云的DNS服务器查询
nslookup www.example.com 223.5.5.5

6.2 使用 dig 命令查询DNS

dig 是Linux/macOS上更强大的DNS查询工具。

基本用法

Text Only
# 查询A记录
dig www.baidu.com

# 输出示例:
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;www.baidu.com.         IN  A

;; ANSWER SECTION:
www.baidu.com.      5   IN  CNAME   www.a.shifen.com.
www.a.shifen.com.   5   IN  A   110.242.68.4
www.a.shifen.com.   5   IN  A   110.242.68.3

查询特定记录类型

Text Only
# 查询MX记录
dig MX gmail.com

# 查询TXT记录
dig TXT _dmarc.example.com

# 查询NS记录
dig NS baidu.com

# 查询SOA记录
dig SOA example.com

显示详细信息

Text Only
# 显示完整的DNS响应
dig +noall +answer www.example.com

# 只显示答案部分
dig +short www.example.com

# 追踪DNS解析过程
dig +trace www.example.com

6.3 查看本地DNS缓存

Windows系统

Text Only
# 查看DNS缓存
ipconfig /displaydns

# 清除DNS缓存
ipconfig /flushdns

输出示例

Text Only
Windows IP 配置

    www.baidu.com
    ----------------------------------------
    记录名称. . . . . . : www.baidu.com
    记录类型. . . . . . : 1 (A)
    生存时间 . . . . . : 300
    数据长度 . . . . . : 4
    部分 . . . . . . . : 0
    记录标志. . . . . . : 0
    记录(CPU) . . . . . :
    记录(CPU) . . . . . :
    IP 地址 . . . . . : 110.242.68.4

Linux/macOS系统

Bash
# 查看systemd-resolved缓存(Ubuntu 18.04+)
sudo systemd-resolve --statistics

# 清除systemd-resolved缓存
sudo systemd-resolve --flush-caches

# macOS清除DNS缓存
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

6.4 修改 hosts 文件

Windows系统

文件位置C:\Windows\System32\drivers\etc\hosts

修改步骤: 1. 以管理员身份运行记事本 2. 打开文件:C:\Windows\System32\drivers\etc\hosts 3. 添加记录(格式:IP 域名

示例

Text Only
# 本地测试
127.0.0.1       localhost
127.0.0.1       test.local

# 屏蔽网站
0.0.0.0         www.example.com

# 指定IP
192.168.1.100   dev.example.com

注意: - 修改后可能需要清除DNS缓存 - hosts文件优先级高于DNS查询

Linux/macOS系统

文件位置/etc/hosts

修改步骤

Bash
# 编辑hosts文件
sudo nano /etc/hosts

# 或使用vim
sudo vim /etc/hosts

示例

Text Only
127.0.0.1       localhost
127.0.1.1       my-computer

# 本地开发
192.168.1.100   dev.example.com
192.168.1.101   test.example.com

6.5 配置DNS服务器

Windows系统

通过图形界面配置: 1. 打开"控制面板" → "网络和共享中心" 2. 点击"更改适配器设置" 3. 右键点击网络连接 → "属性" 4. 选择"Internet 协议版本 4 (TCP/IPv4)" → "属性" 5. 选择"使用下面的DNS服务器地址"

常用DNS服务器

YAML
Google DNS:
首选DNS: 8.8.8.8
备用DNS: 8.8.4.4

阿里云DNS:
首选DNS: 223.5.5.5
备用DNS: 223.6.6.6

腾讯云DNS:
首选DNS: 119.29.29.29
备用DNS: 182.254.116.116

114 DNS:
首选DNS: 114.114.114.114
备用DNS: 114.114.115.115

通过命令行配置

Text Only
# 查看当前DNS配置
ipconfig /all

# 设置网络接口的DNS(需要管理员权限)
netsh interface ip set dns "以太网" static 8.8.8.8
netsh interface ip add dns "以太网" 8.8.4.4 index=2

Linux系统

Ubuntu/Debian

Bash
# 编辑网络配置
sudo nano /etc/systemd/resolved.conf

# 添加DNS服务器
[Resolve]
DNS=8.8.8.8 8.8.4.4

# 重启服务
sudo systemctl restart systemd-resolved

CentOS/RHEL

Bash
# 编辑网络配置
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

# 添加DNS配置
DNS1=8.8.8.8
DNS2=8.8.4.4

# 重启网络服务
sudo systemctl restart network

临时修改

Bash
# 编辑resolv.conf
sudo nano /etc/resolv.conf

# 添加nameserver
nameserver 8.8.8.8
nameserver 8.8.4.4

macOS系统

Bash
# 通过系统偏好设置
1. 打开"系统偏好设置"  "网络"
2. 选择网络连接  "高级"
3. 切换到"DNS"标签
4. 点击"+"添加DNS服务器

# 通过命令行
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

7. 域名注册与管理

7.1 如何注册域名

域名注册商

国内常用域名注册商:

注册商 网址 特点
阿里云 wanwang.aliyun.com 国内主流,服务完善
腾讯云 dnspod.cloud.tencent.com 与微信生态结合
万网 www.net.cn 阿里云旗下
新网 www.xinnet.com 老牌注册商

国际常用域名注册商:

注册商 网址 特点
Namecheap namecheap.com 价格便宜,界面友好
GoDaddy godaddy.com 全球最大,促销多
Cloudflare dash.cloudflare.com 免费DNS,速度快

域名注册步骤

以阿里云为例:

步骤1:查询域名

Text Only
1. 访问 wanwang.aliyun.com
2. 输入想要注册的域名
3. 查询是否可注册

步骤2:选择域名

Text Only
示例:
- example.com    ✅ 可注册
- example.cn     ✅ 可注册
- example.net    ❌ 已被注册

步骤3:购买域名

Text Only
1. 选择注册年限(1-10年)
2. 填写域名所有者信息
3. 实名认证(国内要求)
4. 支付费用

步骤4:域名实名认证

Text Only
国内要求:
- 个人:身份证信息
- 企业:营业执照信息

认证后域名才能正常使用

域名价格参考

域名类型 首年价格 续费价格
.com ¥50-80 ¥60-90
.cn ¥30-50 ¥40-60
.net ¥60-90 ¥70-100
.org ¥60-90 ¥70-100
.io ¥300-500 ¥400-600

7.2 域名解析配置

阿里云DNS配置

步骤1:登录阿里云控制台

Text Only
1. 登录阿里云
2. 进入"域名" → "域名列表"
3. 找到你的域名,点击"解析"

步骤2:添加解析记录

A记录配置

YAML
记录类型: A
主机记录: www
记录值: 192.168.1.100
TTL: 600(10分钟)

CNAME记录配置

YAML
记录类型: CNAME
主机记录: blog
记录值: example.com
TTL: 600

MX记录配置

YAML
记录类型: MX
主机记录: @
记录值: mail.example.com
优先级: 10
TTL: 600

实际配置示例

Text Only
域名: example.com

记录列表:
┌──────────┬─────────┬─────────────────┬──────┬────────┐
│ 主机记录 │ 记录类型│ 记录值          │ TTL  │ 优先级 │
├──────────┼─────────┼─────────────────┼──────┼────────┤
│ @        │ A       │ 192.168.1.100   │ 600  │ -      │
│ www      │ A       │ 192.168.1.100   │ 600  │ -      │
│ blog     │ CNAME   │ example.com     │ 600  │ -      │
│ @        │ MX      │ mail.example.com│ 600  │ 10     │
│ @        │ MX      │ mail2.example.com│ 600 │ 20     │
│ @        │ TXT     │ v=spf1...      │ 600  │ -      │
│ _dmarc   │ TXT     │ v=DMARC1...    │ 600  │ -      │
└──────────┴─────────┴─────────────────┴──────┴────────┘

腾讯云DNS配置

步骤1:登录腾讯云控制台

Text Only
1. 登录腾讯云
2. 进入"DNSPod" → "我的域名"
3. 点击域名进入解析页面

步骤2:添加记录

界面与阿里云类似,配置方式相同。

DNSPod配置(独立DNS服务)

如果使用DNSPod的独立服务:

Text Only
1. 注册DNSPod账号
2. 添加域名
3. 在域名注册商处修改NS记录为DNSPod的NS:
   - f1g1ns1.dnspod.net
   - f1g1ns2.dnspod.net
4. 在DNSPod中配置解析记录

7.3 域名备案(针对国内服务器)

为什么需要备案?

根据中国法律法规,使用国内服务器托管网站必须进行ICP备案:

Text Only
国内服务器 → 必须备案
国外服务器 → 不需要备案

备案流程

步骤1:准备材料

Text Only
个人备案:
- 身份证正反面照片
- 手持身份证照片
- 备案核验单(签字)

企业备案:
- 营业执照
- 法人身份证
- 网站负责人身份证
- 备案核验单(盖章)

步骤2:提交备案申请

Text Only
1. 登录阿里云/腾讯云备案系统
2. 填写主体信息(个人或企业)
3. 填写网站信息
4. 上传材料
5. 提交申请

步骤3:管局审核

Text Only
时间:通常7-20个工作日
流程:
1. 服务商初审(1-3天)
2. 管局审核(5-15天)
3. 备案成功

步骤4:备案成功

Text Only
获得:
- 备案号(如:京ICP备12345678号)
- 备案密码

网站底部需要显示备案号

备案注意事项

Text Only
⚠️ 重要提示:
1. 备案期间网站无法访问
2. 备案信息必须真实准确
3. 备案后信息变更需重新备案
4. 未备案网站会被关停
5. 备案主体与域名所有者需一致

常见问题

Q:国外服务器需要备案吗?

Text Only
A:不需要。但访问速度可能较慢。

Q:个人可以备案几个域名?

Text Only
A:通常个人可以备案1-5个域名,具体看各地管局要求。

Q:备案需要多长时间?

Text Only
A:通常7-20个工作日,高峰期可能更长。


8. 常见问题

8.1 DNS污染和劫持

DNS污染

定义:DNS污染是指恶意篡改DNS解析结果,将用户引导到错误的网站。

常见场景

Text Only
正常情况:
www.example.com → 93.184.216.34

DNS污染:
www.example.com → 1.2.3.4(恶意网站)

如何检测

Text Only
# 使用不同DNS服务器查询,对比结果
nslookup www.example.com 8.8.8.8
nslookup www.example.com 114.114.114.114

# 如果结果不同,可能存在DNS污染

如何防范

Text Only
1. 使用可信的DNS服务器(如8.8.8.8)
2. 启用DNS over HTTPS (DoH)
3. 使用VPN或代理
4. 配置本地hosts文件

DNS劫持

定义:DNS劫持是指攻击者控制用户的DNS查询,将用户引导到钓鱼网站。

攻击方式

Text Only
1. 路由器劫持:修改路由器DNS设置
2. 恶意软件:感染设备,修改DNS配置
3. 中间人攻击:拦截DNS查询

防范措施

Text Only
1. 定期检查路由器DNS设置
2. 使用强密码保护路由器
3. 安装杀毒软件,定期扫描
4. 使用DNS over TLS (DoT)

8.2 DNS缓存如何清除

Windows系统

Text Only
# 清除DNS缓存
ipconfig /flushdns

# 输出示例:
Windows IP 配置

已成功刷新 DNS 解析缓存。

Linux系统

Bash
# Ubuntu/Debian (systemd-resolved)
sudo systemd-resolve --flush-caches

# 检查缓存统计
sudo systemd-resolve --statistics

# CentOS/RHEL (nscd)
sudo systemctl restart nscd

# 清除dnsmasq缓存
sudo systemctl restart dnsmasq

macOS系统

Bash
# macOS 10.12 (Sierra) 及更高版本
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# macOS 10.11 (El Capitan) 及更低版本
sudo discoveryutil mdnsflushcache
sudo discoveryutil udnsflushcaches

浏览器清除DNS缓存

Chrome浏览器

Text Only
1. 访问 chrome://net-internals/#dns
2. 点击"Clear host cache"

Firefox浏览器

Text Only
1. 访问 about:networking#dns
2. 点击"Clear DNS Cache"

8.3 为什么有时需要等待DNS生效

DNS传播时间

DNS记录修改后,全球生效需要时间,这称为DNS传播。

原因

Text Only
1. TTL未过期:各地的DNS缓存还在有效期内
2. 分布式系统:全球DNS服务器数量庞大
3. 更新延迟:不同服务器更新时间不同

传播时间

Text Only
TTL = 600秒(10分钟)
→ 最快:立即(部分用户)
→ 最慢:10分钟(所有用户)

TTL = 86400秒(24小时)
→ 最快:立即
→ 最慢:24小时

如何加快DNS生效

Text Only
1. 修改前降低TTL
   - 提前几天将TTL改为300秒
   - 修改记录后再改回原来的TTL

2. 使用低TTL
   - 开发环境:60-300秒
   - 生产环境:600-3600秒

3. 清除本地缓存
   - 清除浏览器、操作系统、本地DNS缓存

检查DNS是否生效

Text Only
# 使用不同DNS服务器查询
nslookup www.example.com 8.8.8.8
nslookup www.example.com 114.114.114.114

# 使用在线工具
- https://www.whatsmydns.net/ <!-- ⚠️ 可能需要登录 -->
- https://dnschecker.org/

8.4 什么是CDN与DNS的关系

CDN(Content Delivery Network)简介

CDN是内容分发网络,通过在全球部署边缘节点,加速内容访问。

Text Only
用户访问网站
DNS解析到最近的CDN节点
CDN节点返回内容(有缓存)
用户快速获得响应

DNS在CDN中的作用

智能DNS解析

Text Only
传统DNS:
www.example.com → 192.168.1.100(固定IP)

CDN DNS:
www.example.com → 根据用户位置返回不同IP
  - 北京用户 → 1.2.3.4(北京节点)
  - 上海用户 → 5.6.7.8(上海节点)
  - 海外用户 → 9.10.11.12(海外节点)

CNAME配置

Text Only
使用CDN时,需要配置CNAME记录:

www.example.com  CNAME  example.com.cdn.cloudflare.net

实际流程:
1. 用户访问 www.example.com
2. DNS查询返回CNAME
3. 查询 example.com.cdn.cloudflare.net
4. CDN的DNS返回最近的节点IP

CDN工作流程图

Text Only
用户请求 www.example.com
┌─────────────────────────────────────┐
│  1. DNS查询                          │
│     www.example.com → CNAME          │
│     example.com.cdn.cloudflare.net   │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  2. CDN智能DNS                       │
│     根据用户IP、地理位置、负载情况    │
│     返回最近的CDN节点IP               │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  3. 访问CDN节点                      │
│     北京用户 → 北京节点              │
│     上海用户 → 上海节点              │
└──────────┬──────────────────────────┘
┌─────────────────────────────────────┐
│  4. 返回内容                         │
│     节点有缓存 → 直接返回            │
│     节点无缓存 → 回源获取            │
└─────────────────────────────────────┘

常见CDN服务商

服务商 DNS配置 特点
Cloudflare CNAME到cdn.cloudflare.net 免费,全球节点多
阿里云CDN CNAME到aliyuncs.com 国内加速效果好
腾讯云CDN CNAME到dnsv1.com 与微信生态结合
Akamai CNAME到akamai.net 企业级,价格高

CDN与DNS的最佳实践

Text Only
1. 使用CNAME记录
   - 不要直接使用A记录
   - CNAME指向CDN服务商的域名

2. 配置合理的TTL
   - CDN域名:较短TTL(300-600秒)
   - 源站域名:较长TTL(3600-86400秒)

3. 启用HTTPS
   - CDN支持SSL证书
   - 配置HTTPS加速

4. 监控DNS解析
   - 使用DNS监控工具
   - 确保CDN节点正常工作

📝 总结

核心要点

  1. DNS是互联网的电话簿
  2. 将域名转换为IP地址
  3. 分布式、层次化的系统

  4. 域名采用倒树状结构

  5. 根域名 → 顶级域名 → 二级域名 → 子域名
  6. 示例:www.example.com

  7. DNS解析有缓存机制

  8. 浏览器缓存 → 操作系统缓存 → 本地DNS → 权威DNS
  9. TTL决定缓存时间

  10. DNS记录类型多样

  11. A/AAAA:IP地址
  12. CNAME:别名
  13. MX:邮件服务器
  14. TXT:文本信息

  15. 实战操作必备

  16. nslookup/dig:查询DNS
  17. hosts文件:本地解析
  18. 配置DNS服务器:8.8.8.8、114.114.114.114

  19. 域名管理要点

  20. 注册域名:阿里云、腾讯云
  21. 配置解析:A记录、CNAME、MX记录
  22. 国内服务器需要ICP备案

  23. 常见问题处理

  24. DNS污染/劫持:使用可信DNS
  25. DNS缓存:定期清除
  26. DNS生效:等待TTL过期
  27. CDN加速:通过CNAME配置

学习建议

Text Only
🎯 初学者:
1. 理解DNS的基本概念
2. 掌握nslookup命令
3. 学会配置hosts文件

🎯 进阶者:
1. 理解DNS解析流程
2. 掌握dig命令的高级用法
3. 学习域名解析配置

🎯 高级者:
1. 理解DNS安全(DNSSEC、DoH)
2. 掌握CDN与DNS的配合
3. 学习自建DNS服务器

推荐资源

Text Only
📚 文档:
- RFC 1034/1035:DNS协议标准
- Cloudflare DNS Learning Center

🛠️ 工具:
- nslookup:Windows/Linux内置
- dig:Linux/macOS内置
- DNSChecker:在线DNS查询

🌐 在线资源:
- https://www.whatsmydns.net/ <!-- ⚠️ 可能需要登录 -->
- https://dnschecker.org/

恭喜!你已经掌握了域名与DNS的核心知识! 🎉

现在你可以: - ✅ 理解域名系统的运作原理 - ✅ 配置和管理DNS记录 - ✅ 排查DNS相关问题 - ✅ 优化DNS解析性能

继续学习网络知识,成为一名优秀的开发者!💪