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

DNS 服务器学习笔记:核心总结与实验指南

DNS 服务器学习笔记:核心总结与实验指南

📌 一、文章核心重点总结

1. DNS 基础知识

什么是 DNS?

DNS(Domain Name System,域名系统)是互联网的“电话簿”,负责将人类易记的域名(如www.baidu.com)转换为机器可读的 IP 地址(如110.242.68.66)。

DNS 三大组成部分
组件说明
域名主机的字符标识方式,例如www.google.com
域名解析服务器存储域名与 IP 映射关系的数据库服务器
分布式系统没有单点故障,每个服务器只保存部分映射记录
DNS 查询的两种方式
查询类型别称工作方式发起方接收方
递归查询“甩锅式”客户端只发一次请求,DNS 服务器负责查到底客户端本地 DNS 服务器
迭代查询“跑腿式”客户端依次询问多个 DNS 服务器,自己跑完全程本地 DNS 服务器根/顶级/权威 DNS 服务器

🌟实际互联网流程:客户端 → 本地DNS(递归)→ 根/顶级/权威(迭代)→ 返回结果


2. DNS 层次结构与术语

根域 (.) ├── 顶级域 (TLD) │ ├── .com (通用顶级域 gTLD) │ ├── .cn (国家代码顶级域 ccTLD) │ └── .org └── 二级域 (如 laogao.cloud) └── 子域 (如 lab.laogao.cloud)
术语含义
DomainDNS 命名空间的整个子树
Subdomain另一个域的完整子树
Zone特定名称服务器直接负责的域(可委派子域)

3. DNS 资源记录类型详解

资源记录通用模板
owner-name TTL class type data server.laogao.cloud. 300 IN A 192.168.1.10
常用记录类型速查表
类型用途示例
A域名 → IPv4 地址server.laogao.cloud. IN A 172.25.254.254
AAAA域名 → IPv6 地址a.root-servers.net. IN AAAA 2001:503:ba3e::2:30
CNAME别名指向规范名称www-dev IN CNAME lab.laogao.cloud.
PTRIP → 域名(反向解析)10.1.8.10.in-addr.arpa. IN PTR dns.laogao.cloud.
NS指定权威名称服务器laogao.cloud. IN NS dns.laogao.cloud.
SOA起始授权机构,区域运行信息包含序列号、刷新时间等
MX邮件交换服务器laogao.cloud. IN MX 10 mail.laogao.cloud.
TXT任意文本(验证、SPF等)"v=spf1 mx -all"
SRV服务定位_ldap._tcp.laogao.cloud. IN SRV 0 100 389 server0

4. 常用 DNS 客户端命令

命令功能示例
ping测试连通性并显示解析 IPping www.huawei.com
ipconfig/displaydns查看 Windows DNS 缓存ipconfig/displaydns | findstr huawei
ipconfig/flushdns清空 Windows DNS 缓存ipconfig/flushdns
whois查询域名注册信息whois qq.com
host简单 DNS 查询host -t NS huawei.com
dig强大的 DNS 调试工具dig +short www.qq.com
nslookup交互/非交互式查询nslookup www.qq.com 114.114.114.114
getent按系统顺序解析主机名getent hosts student.laogao.cloud

🧪 二、实验部分详细指南

实验拓扑规划

主机名IP 地址角色
dns-server10.1.8.10/24权威名称服务器 (BIND)
dns-client10.1.8.11/24DNS 客户端
cache-server10.1.8.20/24缓存名称服务器 (可选 Unbound/Dnsmasq)

实验一:搭建 BIND 权威名称服务器

步骤 1:安装 BIND 软件包
# 在 dns-server 上执行[root@dns-server ~]# yum install -y bind bind-utils# 软件包说明:# bind - DNS 服务端主程序# bind-utils - DNS 客户端工具集(dig, nslookup, host)
步骤 2:编辑主配置文件/etc/named.conf
[root@dns-server ~]# vim /etc/named.conf
# 定义访问控制列表(给 IP 段起别名)acl trusted-nets{10.1.8.0/24;# 允许局域网段127.0.0.1;# 允许本机};options{# 监听哪些 IP 地址的 53 端口listen-on port53{127.0.0.1;10.1.8.10;};listen-on-v6 port53{::1;};# 允许所有主机查询(权威服务器必须开放)allow-query{any;};# 只允许可信网段递归查询recursionyes;allow-recursion{trusted-nets;};# 限制区域传输(防止数据泄露)allow-transfer{none;};# 关闭 DNSSEC 验证(实验环境简化)dnssec-enable no;dnssec-validation no;};# 定义正向解析区域zone"laogao.cloud"{typemaster;# 主服务器角色file"laogao.cloud.zone";# 区域文件路径(相对于 /var/named)};# 定义反向解析区域(10.1.8.0/24 网段)zone"8.1.10.in-addr.arpa"{typemaster;file"10.1.8.zone";};
步骤 3:创建正向区域文件/var/named/laogao.cloud.zone
[root@dns-server ~]# touch /var/named/laogao.cloud.zone[root@dns-server ~]# vim /var/named/laogao.cloud.zone
$TTL3600# 默认缓存时间 1 小时@ IN SOA dns.laogao.cloud. root.laogao.cloud.(2025010101;Serial# 序列号,每次修改必须增大1D;Refresh# 从服务器刷新间隔 1 天1H;Retry# 刷新失败重试间隔 1 小时1W;Expire# 数据过期时间 1 周3H;Minimum# 否定缓存时间 3 小时)@ IN NS dns.laogao.cloud.# 指定权威 NS 记录;A 记录(域名 → IPv4) dns IN A10.1.8.10# DNS 服务器自身server IN A10.1.8.10# 通用服务器别名client IN A10.1.8.11# 客户端www IN A10.1.8.200# 网站服务器mail IN A10.1.8.253# 邮件服务器;CNAME 记录(别名) student IN CNAME client.laogao.cloud.# student 是 client 的别名;MX 记录(邮件交换器,数字越小优先级越高) @ IN MX10mail.laogao.cloud.
步骤 4:创建反向区域文件/var/named/10.1.8.zone
[root@dns-server ~]# vim /var/named/10.1.8.zone
$TTL1D @ IN SOA dns.laogao.cloud. root.laogao.cloud.(2025010101;Serial 1D;Refresh 1H;Retry 1W;Expire 3H;Minimum)@ IN NS dns.laogao.cloud.;PTR 记录(IP → 域名),只需写 IP 的最后一段10IN PTR dns.laogao.cloud.10IN PTR server.laogao.cloud.11IN PTR client.laogao.cloud.200IN PTR www.laogao.cloud.253IN PTR mail.laogao.cloud.
步骤 5:设置文件权限和 SELinux 标签
[root@dns-server ~]# chmod 640 /var/named/*.zone[root@dns-server ~]# chown root:named /var/named/*.zone[root@dns-server ~]# chcon -t named_zone_t /var/named/*.zone
步骤 6:验证配置并启动服务
# 验证主配置文件语法[root@dns-server ~]# named-checkconf# 无输出表示语法正确# 验证正向区域文件[root@dns-server ~]# named-checkzone laogao.cloud /var/named/laogao.cloud.zonezone laogao.cloud/IN: loaded serial2025010101OK# 验证反向区域文件[root@dns-server ~]# named-checkzone 8.1.10.in-addr.arpa /var/named/10.1.8.zonezone8.1.10.in-addr.arpa/IN: loaded serial2025010101OK# 启动并启用服务[root@dns-server ~]# systemctl enable named --now# 配置防火墙放行 DNS 服务[root@dns-server ~]# firewall-cmd --add-service=dns --permanent[root@dns-server ~]# firewall-cmd --reload# 查看服务状态[root@dns-server ~]# systemctl status named

实验二:客户端测试 DNS 解析

方法 1:配置客户端使用自定义 DNS
# 在 dns-client 上配置 DNS 服务器地址[root@dns-client ~]# nmcli connection modify ens33 \ipv4.method manual\ipv4.address10.1.8.11/24\ipv4.gateway10.1.8.2\ipv4.dns10.1.8.10\autoconnectyes[root@dns-client ~]# nmcli connection up ens33# 测试正向解析(域名 → IP)[root@dns-client ~]# ping -c 2 dns.laogao.cloudPING dns.laogao.cloud(10.1.8.10)56(84)bytes of data.64bytes from dns.laogao.cloud(10.1.8.10):icmp_seq=1ttl=64time=0.251ms# 测试 CNAME 别名[root@dns-client ~]# ping -c 2 student.laogao.cloudPING client.laogao.cloud(10.1.8.11)56(84)bytes of data.# 测试反向解析(IP → 域名)[root@dns-client ~]# host 10.1.8.1010.8.1.10.in-addr.arpa domain name pointer dns.laogao.cloud.# 使用 getent 按系统顺序解析[root@dns-client ~]# getent hosts student.laogao.cloud10.1.8.11 client.laogao.cloud student.laogao.cloud
方法 2:使用 dig 工具详细查询
# 如果客户端没有 dig,先安装[root@dns-client ~]# yum install -y bind-utils# 查询 A 记录(指定 DNS 服务器)[root@dns-client ~]# dig @10.1.8.10 www.laogao.cloud# 查询 NS 记录(权威名称服务器)[root@dns-client ~]# dig @10.1.8.10 laogao.cloud NS# 查询 MX 记录(邮件服务器)[root@dns-client ~]# dig @10.1.8.10 laogao.cloud MX# 查询 PTR 记录(反向解析)[root@dns-client ~]# dig @10.1.8.10 -x 10.1.8.200# 只显示精简结果[root@dns-client ~]# dig +short @10.1.8.10 www.laogao.cloud10.1.8.200# 只显示回答部分[root@dns-client ~]# dig +nocmd +noall +answer @10.1.8.10 www.laogao.cloudwww.laogao.cloud.3600IN A10.1.8.200
方法 3:使用 nslookup 交互式查询
[root@dns-client ~]# nslookup>server10.1.8.10# 指定 DNS 服务器Default server:10.1.8.10>settype=A# 设置查询类型为 A 记录>www.laogao.cloud# 查询域名Server:10.1.8.10 Address:10.1.8.10#53Name: www.laogao.cloud Address:10.1.8.200>settype=PTR# 切换为反向查询>10.1.8.200 Server:10.1.8.10 Address:10.1.8.10#53200.8.1.10.in-addr.arpa name=www.laogao.cloud.>exit# 退出交互模式

实验三:搭建缓存名称服务器(Unbound)

为什么需要缓存服务器?
  • 减少跨互联网的 DNS 流量
  • 加速重复查询的响应速度
  • 作为局域网内的 DNS 代理
安装与配置 Unbound
# 在 cache-server (10.1.8.20) 上执行[root@cache-server ~]# yum install -y unbound# 编辑配置文件[root@cache-server ~]# vim /etc/unbound/unbound.conf
server:# 监听所有网络接口interface:0.0.0.0 interface: ::0 interface-automatic: no# 访问控制:只允许局域网客户端查询access-control:127.0.0.0/8 allow access-control:10.1.8.0/24 allow access-control:0.0.0.0/0 refuse# 拒绝其他所有# 转发所有查询到权威 DNS 服务器forward-zone: name:"."forward-addr:10.1.8.10# 转发到我们自己的权威服务器# 跳过 DNSSEC 验证(实验环境)domain-insecure:"laogao.cloud"harden-dnssec-stripped: no
# 验证配置文件语法[root@cache-server ~]# unbound-checkconfunbound-checkconf: no errorsin/etc/unbound/unbound.conf# 启动服务[root@cache-server ~]# systemctl enable unbound --now# 配置防火墙[root@cache-server ~]# firewall-cmd --add-service=dns --permanent[root@cache-server ~]# firewall-cmd --reload
缓存管理命令
# 导出当前缓存到文件[root@cache-server ~]# unbound-control dump_cache > /tmp/dns_cache.txt# 查看缓存内容[root@cache-server ~]# head -20 /tmp/dns_cache.txt# 清空特定域名的缓存[root@cache-server ~]# unbound-control flush student.laogao.cloudok# 清空整个区域的缓存[root@cache-server ~]# unbound-control flush_zone laogao.cloudok# 从文件导入缓存[root@cache-server ~]# unbound-control load_cache < /tmp/dns_cache.txt
客户端测试缓存服务器
# 在 dns-client 上临时使用缓存服务器测试[root@dns-client ~]# dig @10.1.8.20 client.laogao.cloud# 第一次查询(缓存未命中,会稍慢);;Query time:45msec# 第二次查询(缓存命中,很快)[root@dns-client ~]# dig @10.1.8.20 client.laogao.cloud;;Query time:0msec

实验四:配置 Dnsmasq 轻量级缓存服务器

Dnsmasq 特点
  • 集 DNS 缓存、DHCP、TFTP 于一体
  • 配置简单,适合小型网络
  • 可指定不同域名使用不同上游 DNS
配置示例
# 安装 Dnsmasq[root@cache-server ~]# yum install -y dnsmasq# 备份默认配置[root@cache-server ~]# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak# 编辑配置文件[root@cache-server ~]# vim /etc/dnsmasq.conf
# 监听地址(本机所有接口)listen-address=0.0.0.0# 上游 DNS 服务器配置文件resolv-file=/etc/resolv.dnsmasq.conf# 严格按顺序使用上游 DNSstrict-order# 自定义解析(屏蔽广告)address=/ad.youku.com/127.0.0.1address=/ad.iqiyi.com/127.0.0.1# 特定域名使用特定 DNSserver=/laogao.cloud/10.1.8.10# 内网域名用自己的服务器server=/google.com/8.8.8.8# Google 域名用公共 DNSserver=/baidu.com/114.114.114.114# 国内网站用国内 DNS# 缓存大小(默认 150 条,这里设 1000 条)cache-size=1000# 不允许 /etc/hosts 覆盖# no-hosts# 日志记录log-queries log-facility=/var/log/dnsmasq.log
# 创建上游 DNS 配置文件[root@cache-server ~]# cat > /etc/resolv.dnsmasq.conf << EOFnameserver114.114.114.114 nameserver8.8.8.8 EOF# 测试配置语法[root@cache-server ~]# dnsmasq --testdnsmasq: syntax check OK.# 启动服务[root@cache-server ~]# systemctl enable dnsmasq --now# 查看日志[root@cache-server ~]# tail -f /var/log/dnsmasq.log

🔧 三、DNS 故障排查技巧

1. 常见问题速查表

现象可能原因排查命令
dig超时防火墙阻止 UDP 53firewall-cmd --list-all
返回SERVFAIL权威服务器不可达dig +trace domain.com
返回NXDOMAIN域名不存在或孤立 CNAMEdig domain.com+ 检查区域文件
返回REFUSED访问控制拒绝检查allow-query指令
反向解析失败缺少 PTR 记录dig -x IP+ 检查反向区域
主从数据不一致序列号未更新检查 SOA 中的 Serial 值

2. 故障排查命令实战

# 1. 检查本地 DNS 配置[root@client ~]# cat /etc/resolv.confnameserver10.1.8.10# 2. 测试网络连通性[root@client ~]# ping -c 3 10.1.8.10# 3. 测试 UDP 53 端口[root@client ~]# nc -vzu 10.1.8.10 53Connection to10.1.8.1053port[udp/domain]succeeded!# 4. 跟踪完整解析路径(从根域开始)[root@client ~]# dig +trace www.baidu.com# 5. 强制使用 TCP 模式查询[root@client ~]# dig +tcp www.laogao.cloud# 6. 查看 DNS 服务器日志[root@dns-server ~]# journalctl -u named -f# 7. 测试区域传输(AXFR)- 验证从服务器同步[root@client ~]# dig axfr @10.1.8.10 laogao.cloud# 8. 对比权威答案和缓存答案[root@client ~]# dig @10.1.8.10 www.laogao.cloud +aaonly # 只接受权威答案

3. 检查系统名称解析顺序

# 查看 nsswitch.conf 配置[root@client ~]# cat /etc/nsswitch.conf | grep hostshosts: files dns myhostname# 解析顺序:/etc/hosts → DNS → 本机主机名# 使用 getent 验证实际解析结果[root@client ~]# getent hosts www.laogao.cloud10.1.8.200 www.laogao.cloud# 对比 dig 结果(如果不同,说明可能是 hosts 文件影响)[root@client ~]# dig +short www.laogao.cloud10.1.8.200

📚 四、关键配置文件速查

文件路径用途所属服务
/etc/named.confBIND 主配置文件bind
/var/named/*.zone区域数据库文件bind
/etc/unbound/unbound.confUnbound 配置文件unbound
/etc/dnsmasq.confDnsmasq 配置文件dnsmasq
/etc/resolv.conf客户端 DNS 配置system
/etc/nsswitch.conf名称解析顺序glibc
/etc/hosts本地静态解析system
/var/log/messages系统日志(含 named 错误)rsyslog

✅ 五、实验验证清单

完成实验后,请逐项验证:

  • BIND 服务正常运行 (systemctl status named)
  • 正向解析:dig @10.1.8.10 dns.laogao.cloud返回10.1.8.10
  • CNAME 解析:dig @10.1.8.10 student.laogao.cloud返回10.1.8.11
  • MX 解析:dig @10.1.8.10 laogao.cloud MX返回mail.laogao.cloud
  • 反向解析:dig @10.1.8.10 -x 10.1.8.11返回client.laogao.cloud
  • 客户端配置后ping student.laogao.cloud成功
  • 缓存服务器第二次查询时间明显缩短
  • 防火墙已放行 DNS 服务 (firewall-cmd --list-services)

🎯 总结

通过本文的学习和实验,你应该掌握了:

  1. DNS 核心原理:层次结构、递归与迭代查询、资源记录类型
  2. 权威 DNS 搭建:BIND 的安装、配置、区域文件编写
  3. 缓存 DNS 搭建:Unbound 和 Dnsmasq 两种方案
  4. 客户端工具:dig、nslookup、host、getent 的使用
  5. 故障排查:常见错误码分析、日志查看、跟踪查询

DNS 是互联网基础设施的核心,深入理解其工作原理对于网络运维和系统管理至关重要。建议在生产环境部署前,先在实验环境中充分测试配置。

http://www.jsqmd.com/news/793878/

相关文章:

  • 10款团队任务管理软件对比:从进度跟踪到项目协作
  • 边缘计算消息代理性能评测与选型指南
  • 【2026年携程暑期实习- 5月10日-第四题-单数组交换】(题目+思路+JavaC++Python解析+在线测试)
  • Docker Compose编排实战:从原理到部署,构建高效开发环境
  • JAVA学习之JAVASE基础
  • ai llm训练数据合成说明
  • ARM9EJ-S内存接口与中断系统设计解析
  • Header Editor终极指南:如何用浏览器扩展掌控网络请求
  • AWS 之外的便宜云:把云原生账单砍到 1/10 的现实清单
  • Ragbits:模块化AI应用开发框架,构建生产级RAG与智能体系统
  • Go语言CLI工具服务化:基于JSON-RPC的进程间通信与自动化集成
  • 立创EDA开源项目实战:从画原理图到打样,复刻一个全封装支持的AVR高压编程器
  • Linux内核驱动调试实战:给CDC ACM模块加点‘打印’,看懂USB转串口的匹配过程
  • n8n-as-code:用TypeScript和AI技能实现工作流即代码
  • AI时代下,泳装行业的内容竞争正在被重新定义
  • Sunshine游戏串流宝典:打造专属云游戏服务器的实战秘籍
  • 多通道DDC和滤波器的FPGA资源使用情况的研究
  • 基于LLM的自动化研究工具autoresearch:从部署到实战全解析
  • Gotrain 工程整体评价
  • 微信集成Claude Code:本地AI助手无缝接入日常通讯
  • 基于MCP协议构建AI智能体与Figma设计稿的自动化交互桥梁
  • OpenCharacters开源框架:构建可深度定制的本地化角色扮演AI聊天机器人
  • 量子测量诱导相变:超导电路实现与纠缠动力学
  • 后疫情时代语音交互技术:从非接触刚需到系统架构设计实践
  • 3分钟搞定iPhone USB网络共享:Windows驱动安装终极指南
  • CocosCreator 事件系统全解析:从基础监听、冒泡捕获到实战应用 (第五篇)
  • Android 14 + Linux 6.1 平台 RTL8922AE 蓝牙适配实战:从无法启动到成功拉起
  • Docker Compose智能副驾驶:用自然语言管理容器编排
  • PhishGuard:多层检测机制防范钓鱼网站,保护你的在线安全
  • 混合量子-经典工作流编排的云原生实践