当前位置: 首页 > news >正文

DNS学习笔记

DNS 基础概念

1.1 什么是 DNS?

DNS(Domain Name System) 是互联网的"电话簿",将容易记忆的域名(如 google.com)转换为机器可读的 IP 地址(如 142.250.190.78)。

1.2 核心功能

  • 域名解析:域名 → IP 地址
  • 反向解析:IP 地址 → 域名
  • 邮件路由:MX 记录指导邮件传输
  • 负载均衡:通过多个 A 记录分发流量
  • 服务发现:SRV 记录定位服务

1.3 DNS 的重要性

![[Pasted image 20260128221423.png]]

DNS 记录类型详解

2.1 基础记录类型

记录类型 描述 示例 用途
A IPv4 地址记录 www IN A 192.0.2.1 域名到 IPv4 的映射
AAAA IPv6 地址记录 www IN AAAA 2001:db8::1 域名到 IPv6 的映射
CNAME 规范名称记录 blog IN CNAME www 域名别名,指向另一个域名
MX 邮件交换记录 IN MX 10 mail.example.com 指定邮件服务器
NS 名称服务器记录 IN NS ns1.example.com 指定域名的权威 DNS 服务器
TXT 文本记录 IN TXT "v=spf1 ..." 验证、SPF、DKIM 等
SOA 起始授权机构 包含域名的管理信息 域名的元数据
PTR 指针记录 1.2.0.192.in-addr.arpa IN PTR www 反向 DNS 查找
SRV 服务定位记录 指定服务的主机和端口 定位特定服务
CAA 证书颁发机构授权 指定允许的 CA SSL/TLS 证书安全

2.2 高级记录详解

CNAME 记录的特殊性

# CNAME 链示例
www.example.com.  IN CNAME  lb.example.com.
lb.example.com.   IN CNAME  prod-lb.us-east-1.elb.amazonaws.com.
prod-lb.us-east-1.elb.amazonaws.com. IN A 54.192.1.1

重要规则

  • CNAME 不能与其他记录共存(MX、TXT、A 等)
  • CNAME 指向的域名必须有 A/AAAA 记录
  • CNAME 链不宜过长(影响解析速度)

MX 记录优先级

# 数字越小优先级越高
example.com.  IN  MX  10  mail1.example.com.
example.com.  IN  MX  20  mail2.example.com.

TXT 记录的多重用途

# SPF 记录
example.com.  IN  TXT  "v=spf1 include:_spf.google.com ~all"# DKIM 记录
google._domainkey.example.com.  IN  TXT  "k=rsa; p=MIGfMA0GCSq..."# DMARC 记录
_dmarc.example.com.  IN  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

DNS 架构与原理

3.1 DNS 层次结构

![[Pasted image 20260128221505.png]]

3.2 DNS 解析流程

# 完整解析过程(以 www.example.com 为例)
1. 客户端查询本地缓存
2. 查询本地 hosts 文件
3. 查询本地 DNS 解析器(如 8.8.8.8)
4. 递归查询根域名服务器(得到 .com 的 NS)
5. 查询 .com TLD 服务器(得到 example.com 的 NS)
6. 查询 example.com 权威服务器
7. 返回 A/AAAA 记录
8. 结果缓存并返回客户端

3.3 查询类型对比

查询类型 描述 使用场景
递归查询 解析器负责完成整个查询 客户端向 ISP DNS 查询
迭代查询 每次返回下一个 NS 地址 DNS 服务器之间的查询
非递归查询 直接从缓存回答 快速响应已知查询

3.4 TTL(生存时间)

# TTL 值设置示例
example.com.  IN  A  192.0.2.1    ; TTL=3600 (1小时)
cdn.example.com.  IN  A  203.0.113.1  ; TTL=300 (5分钟)

TTL 策略

  • 静态资源:较长 TTL(如 86400 = 1天)
  • 动态/CDN:较短 TTL(如 300 = 5分钟)
  • 计划变更:提前降低 TTL

DNS 安全与攻击

5.1 常见 DNS 攻击

攻击类型 描述 防护措施
DNS 劫持 篡改 DNS 响应 DNSSEC、使用可信 DNS
DNS 污染 缓存投毒攻击 随机源端口、DNSSEC
DDoS 攻击 攻击 DNS 服务器 Anycast、限速、CDN
DNS 隧道 通过 DNS 泄露数据 DNS 过滤、流量监控
子域名接管 未使用的 CNAME 记录 定期检查、及时清理

5.2 DNSSEC 详解

# DNSSEC 记录类型
RRSIG     # 资源记录签名
DNSKEY    # DNSSEC 公钥
DS        # 委托签名者
NSEC/NSEC3 # 否定存在证明# 验证 DNSSEC
dig example.com +dnssec
dig DS example.com

5.3 DNS 安全配置

SPF 配置

# 推荐的 SPF 记录
example.com. IN TXT "v=spf1 include:_spf.google.com include:spf.mailgun.org ~all"# 各部分的含义:
# v=spf1      - SPF 版本 1
# include     - 包含其他域的 SPF 规则
# ip4:        - 允许的 IPv4 地址
# ip6:        - 允许的 IPv6 地址
# a:          - 允许域名的 A 记录
# mx:         - 允许 MX 记录指向的服务器
# ~all        - 软失败(非严格拒绝)
# -all        - 硬失败(严格拒绝)

DMARC 配置

# 完整的 DMARC 策略
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:forensic@example.com; pct=100; adkim=s; aspf=s"# 参数说明:
# p=none      - 仅监控,不处理
# p=quarantine - 隔离可疑邮件
# p=reject    - 拒绝未通过验证的邮件
# rua         - 聚合报告发送地址
# ruf         - 取证报告发送地址
# pct=100     - 对100%邮件应用策略
# adkim/s     - 严格对齐 DKIM
# aspf/s      - 严格对齐 SPF

5.4 DNS 监控与检测

# 监控 DNS 变更的脚本
#!/bin/bash
DOMAIN="example.com"
LAST_FILE="/tmp/dns_last.txt"
CURRENT_FILE="/tmp/dns_current.txt"# 收集当前 DNS 记录
dnsx -d $DOMAIN -all -silent > $CURRENT_FILE# 比较差异
if [ -f $LAST_FILE ]; thenCHANGES=$(diff $LAST_FILE $CURRENT_FILE)if [ ! -z "$CHANGES" ]; thenecho "ALERT: DNS records changed for $DOMAIN"echo "$CHANGES" | mail -s "DNS Change Alert" admin@example.comfi
fi# 更新记录
mv $CURRENT_FILE $LAST_FILE

高级 DNS 技术

6.1 DNS 负载均衡

# 轮询负载均衡
www.example.com.  IN  A  192.0.2.1
www.example.com.  IN  A  192.0.2.2
www.example.com.  IN  A  192.0.2.3# 地理定位 DNS (GeoDNS)
# 根据不同用户位置返回不同 IP
us.example.com.  IN  A  192.0.2.10
eu.example.com.  IN  A  192.0.2.20
asia.example.com.  IN  A  192.0.2.30

6.2 DNS 预取与预解析

<!-- 浏览器 DNS 预取 -->
<link rel="dns-prefetch" href="//cdn.example.com">
<link rel="dns-prefetch" href="//api.example.com"><!-- HTTP 头部控制 -->
<meta http-equiv="x-dns-prefetch-control" content="on">

6.3 Anycast DNS

graph TBA[用户] --> B[Anycast IP: 1.1.1.1]B --> C[最近的数据中心]C --> D[低延迟响应]E[用户2] --> F[Anycast IP: 1.1.1.1]F --> G[不同的数据中心]G --> H[低延迟响应]

6.4 DoH (DNS over HTTPS) 和 DoT (DNS over TLS)

# DoH 查询示例
curl -H 'accept: application/dns-json' \'https://cloudflare-dns.com/dns-query?name=example.com&type=A'# 支持的 DoH 提供商
# Cloudflare: https://cloudflare-dns.com/dns-query
# Google: https://dns.google/resolve
# Quad9: https://dns.quad9.net/dns-query

附录

A.1 DNS 端口

  • TCP/UDP 53:标准 DNS 查询
  • TCP 953:rndc 控制端口
  • UDP 5353:mDNS(多播 DNS)
  • TCP 853:DNS over TLS(DoT)
  • TCP 443:DNS over HTTPS(DoH)

A.2 DNS 响应码

代码 名称 描述
0 NOERROR 成功响应
1 FORMERR 格式错误
2 SERVFAIL 服务器故障
3 NXDOMAIN 域名不存在
4 NOTIMP 未实现
5 REFUSED 查询被拒绝

A.3 常用 DNS 服务器

# 公共 DNS 服务器
8.8.8.8, 8.8.4.4         # Google DNS
1.1.1.1, 1.0.0.1         # Cloudflare DNS
9.9.9.9, 149.112.112.112 # Quad9 DNS
208.67.222.222, 208.67.220.220 # OpenDNS# 国内常用 DNS
114.114.114.114, 114.114.115.115
119.29.29.29, 182.254.116.116 # DNSPod
223.5.5.5, 223.6.6.6         # 阿里 DNS

A.4 DNS 性能优化技巧

  1. 合理设置 TTL

    • 静态资源:86400 秒(1天)
    • 动态内容:300-3600 秒
    • 变更前:提前降低到 60-300 秒
  2. 使用 DNS 缓存

    # 本地 DNS 缓存服务
    sudo systemctl enable systemd-resolved
    sudo systemctl start systemd-resolved# 清除缓存
    sudo systemd-resolve --flush-caches
    
  3. DNS 预取策略

    <!-- 关键资源 DNS 预取 -->
    <link rel="dns-prefetch" href="//fonts.googleapis.com">
    <link rel="dns-prefetch" href="//ajax.googleapis.com">
    
http://www.jsqmd.com/news/314198/

相关文章:

  • Lazy Stacking的设计说明
  • CSDN-Markdown新版说明 - 指南
  • 数字化转型加速器:国内企业如何选择最适合的CI/CD工具
  • ARM 汇编指令系列文章导读
  • Spring Boot + SSE 企业级实时推送完整指南
  • 基于 Spring Boot + SkyWalking + Prometheus 的性能工程闭环实战
  • agent skills是任务导向的,不是按不同软件开放的,同一个任务可能会用到不同的软件接口
  • 一文吃透Java WebSocket:原理、实现与核心特性解析
  • 有调用skills很强的框架吗 MS-Agent
  • 开通快捷支付,这些好处直接拉满体验!
  • Spring Boot 企业级 RSA + AES-GCM 混合加密自动解密中间件设计与实战
  • ASTM F1980标准详解
  • 基于深度学习YOLOv11的车辆类型检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • RavenDB:打破数据库策略壁垒的创新解决方案
  • 世界经济论坛专家称人工智能需要纠正发展方向
  • X 因 Grok 生成色情深度伪造内容面临欧盟调查
  • 基于Wails框架的Ollama模型桌面管理系统设计与实现
  • 基于eBPF技术的高性能网络防火墙系统设计与实现
  • 关于SpringBoot MVC
  • 机器学习:大数据python图书推荐系统 基于用户协同过滤推荐算法 基于物品协同过滤推荐算法 书籍推荐 Django框架 大数据毕业设计(源码)✅
  • 【实战】Vue+Canvas 实现标注组件
  • 065.丑数
  • 神秘大三角(洛谷P1355)
  • 震惊!AI大模型又出骚操作:一张图看懂图像理解与生成统一技术,小白程序员也能秒懂!
  • 震惊!这些开源LLMs已经可以媲美GPT-5了!编程开发者的福音,附部署全攻略
  • 价值投资中的公司文化:软实力的重要性
  • 微信表情GIF传不上?GIF压缩到微信表情不模糊方法
  • 大模型“记性差“怎么办?RAG技术让AI变身“信息检索专家“,小白也能快速上手!
  • 【Effective Modern C++】第三章 转向现代C++:13. 优先选用const_iterator,而非iterator
  • 更弱智的算法学习 day57