DNS 服务器学习笔记核心总结与实验指南 一、文章核心重点总结1. DNS 基础知识什么是 DNSDNSDomain 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.254AAAA域名 → IPv6 地址a.root-servers.net. IN AAAA 2001:503:ba3e::2:30CNAME别名指向规范名称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等vspf1 mx -allSRV服务定位_ldap._tcp.laogao.cloud. IN SRV 0 100 389 server04. 常用 DNS 客户端命令命令功能示例ping测试连通性并显示解析 IPping www.huawei.comipconfig/displaydns查看 Windows DNS 缓存ipconfig/displaydns | findstr huaweiipconfig/flushdns清空 Windows DNS 缓存ipconfig/flushdnswhois查询域名注册信息whois qq.comhost简单 DNS 查询host -t NS huawei.comdig强大的 DNS 调试工具dig short www.qq.comnslookup交互/非交互式查询nslookup www.qq.com 114.114.114.114getent按系统顺序解析主机名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 上执行[rootdns-server ~]# yum install -y bind bind-utils# 软件包说明# bind - DNS 服务端主程序# bind-utils - DNS 客户端工具集dig, nslookup, host步骤 2编辑主配置文件/etc/named.conf[rootdns-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;};# 定义正向解析区域zonelaogao.cloud{typemaster;# 主服务器角色filelaogao.cloud.zone;# 区域文件路径相对于 /var/named};# 定义反向解析区域10.1.8.0/24 网段zone8.1.10.in-addr.arpa{typemaster;file10.1.8.zone;};步骤 3创建正向区域文件/var/named/laogao.cloud.zone[rootdns-server ~]# touch /var/named/laogao.cloud.zone[rootdns-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[rootdns-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 标签[rootdns-server ~]# chmod 640 /var/named/*.zone[rootdns-server ~]# chown root:named /var/named/*.zone[rootdns-server ~]# chcon -t named_zone_t /var/named/*.zone步骤 6验证配置并启动服务# 验证主配置文件语法[rootdns-server ~]# named-checkconf# 无输出表示语法正确# 验证正向区域文件[rootdns-server ~]# named-checkzone laogao.cloud /var/named/laogao.cloud.zonezone laogao.cloud/IN: loaded serial2025010101OK# 验证反向区域文件[rootdns-server ~]# named-checkzone 8.1.10.in-addr.arpa /var/named/10.1.8.zonezone8.1.10.in-addr.arpa/IN: loaded serial2025010101OK# 启动并启用服务[rootdns-server ~]# systemctl enable named --now# 配置防火墙放行 DNS 服务[rootdns-server ~]# firewall-cmd --add-servicedns --permanent[rootdns-server ~]# firewall-cmd --reload# 查看服务状态[rootdns-server ~]# systemctl status named实验二客户端测试 DNS 解析方法 1配置客户端使用自定义 DNS# 在 dns-client 上配置 DNS 服务器地址[rootdns-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[rootdns-client ~]# nmcli connection up ens33# 测试正向解析域名 → IP[rootdns-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_seq1ttl64time0.251ms# 测试 CNAME 别名[rootdns-client ~]# ping -c 2 student.laogao.cloudPING client.laogao.cloud(10.1.8.11)56(84)bytes of data.# 测试反向解析IP → 域名[rootdns-client ~]# host 10.1.8.1010.8.1.10.in-addr.arpa domain name pointer dns.laogao.cloud.# 使用 getent 按系统顺序解析[rootdns-client ~]# getent hosts student.laogao.cloud10.1.8.11 client.laogao.cloud student.laogao.cloud方法 2使用 dig 工具详细查询# 如果客户端没有 dig先安装[rootdns-client ~]# yum install -y bind-utils# 查询 A 记录指定 DNS 服务器[rootdns-client ~]# dig 10.1.8.10 www.laogao.cloud# 查询 NS 记录权威名称服务器[rootdns-client ~]# dig 10.1.8.10 laogao.cloud NS# 查询 MX 记录邮件服务器[rootdns-client ~]# dig 10.1.8.10 laogao.cloud MX# 查询 PTR 记录反向解析[rootdns-client ~]# dig 10.1.8.10 -x 10.1.8.200# 只显示精简结果[rootdns-client ~]# dig short 10.1.8.10 www.laogao.cloud10.1.8.200# 只显示回答部分[rootdns-client ~]# dig nocmd noall answer 10.1.8.10 www.laogao.cloudwww.laogao.cloud.3600IN A10.1.8.200方法 3使用 nslookup 交互式查询[rootdns-client ~]# nslookupserver10.1.8.10# 指定 DNS 服务器Default server:10.1.8.10settypeA# 设置查询类型为 A 记录www.laogao.cloud# 查询域名Server:10.1.8.10 Address:10.1.8.10#53Name: www.laogao.cloud Address:10.1.8.200settypePTR# 切换为反向查询10.1.8.200 Server:10.1.8.10 Address:10.1.8.10#53200.8.1.10.in-addr.arpa namewww.laogao.cloud.exit# 退出交互模式实验三搭建缓存名称服务器Unbound为什么需要缓存服务器减少跨互联网的 DNS 流量加速重复查询的响应速度作为局域网内的 DNS 代理安装与配置 Unbound# 在 cache-server (10.1.8.20) 上执行[rootcache-server ~]# yum install -y unbound# 编辑配置文件[rootcache-server ~]# vim /etc/unbound/unbound.confserver:# 监听所有网络接口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.cloudharden-dnssec-stripped: no# 验证配置文件语法[rootcache-server ~]# unbound-checkconfunbound-checkconf: no errorsin/etc/unbound/unbound.conf# 启动服务[rootcache-server ~]# systemctl enable unbound --now# 配置防火墙[rootcache-server ~]# firewall-cmd --add-servicedns --permanent[rootcache-server ~]# firewall-cmd --reload缓存管理命令# 导出当前缓存到文件[rootcache-server ~]# unbound-control dump_cache /tmp/dns_cache.txt# 查看缓存内容[rootcache-server ~]# head -20 /tmp/dns_cache.txt# 清空特定域名的缓存[rootcache-server ~]# unbound-control flush student.laogao.cloudok# 清空整个区域的缓存[rootcache-server ~]# unbound-control flush_zone laogao.cloudok# 从文件导入缓存[rootcache-server ~]# unbound-control load_cache /tmp/dns_cache.txt客户端测试缓存服务器# 在 dns-client 上临时使用缓存服务器测试[rootdns-client ~]# dig 10.1.8.20 client.laogao.cloud# 第一次查询缓存未命中会稍慢;;Query time:45msec# 第二次查询缓存命中很快[rootdns-client ~]# dig 10.1.8.20 client.laogao.cloud;;Query time:0msec实验四配置 Dnsmasq 轻量级缓存服务器Dnsmasq 特点集 DNS 缓存、DHCP、TFTP 于一体配置简单适合小型网络可指定不同域名使用不同上游 DNS配置示例# 安装 Dnsmasq[rootcache-server ~]# yum install -y dnsmasq# 备份默认配置[rootcache-server ~]# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak# 编辑配置文件[rootcache-server ~]# vim /etc/dnsmasq.conf# 监听地址本机所有接口listen-address0.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-size1000# 不允许 /etc/hosts 覆盖# no-hosts# 日志记录log-queries log-facility/var/log/dnsmasq.log# 创建上游 DNS 配置文件[rootcache-server ~]# cat /etc/resolv.dnsmasq.conf EOFnameserver114.114.114.114 nameserver8.8.8.8 EOF# 测试配置语法[rootcache-server ~]# dnsmasq --testdnsmasq: syntax check OK.# 启动服务[rootcache-server ~]# systemctl enable dnsmasq --now# 查看日志[rootcache-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 配置[rootclient ~]# cat /etc/resolv.confnameserver10.1.8.10# 2. 测试网络连通性[rootclient ~]# ping -c 3 10.1.8.10# 3. 测试 UDP 53 端口[rootclient ~]# nc -vzu 10.1.8.10 53Connection to10.1.8.1053port[udp/domain]succeeded!# 4. 跟踪完整解析路径从根域开始[rootclient ~]# dig trace www.baidu.com# 5. 强制使用 TCP 模式查询[rootclient ~]# dig tcp www.laogao.cloud# 6. 查看 DNS 服务器日志[rootdns-server ~]# journalctl -u named -f# 7. 测试区域传输AXFR- 验证从服务器同步[rootclient ~]# dig axfr 10.1.8.10 laogao.cloud# 8. 对比权威答案和缓存答案[rootclient ~]# dig 10.1.8.10 www.laogao.cloud aaonly # 只接受权威答案3. 检查系统名称解析顺序# 查看 nsswitch.conf 配置[rootclient ~]# cat /etc/nsswitch.conf | grep hostshosts: files dns myhostname# 解析顺序/etc/hosts → DNS → 本机主机名# 使用 getent 验证实际解析结果[rootclient ~]# getent hosts www.laogao.cloud10.1.8.200 www.laogao.cloud# 对比 dig 结果如果不同说明可能是 hosts 文件影响[rootclient ~]# 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.10CNAME 解析dig 10.1.8.10 student.laogao.cloud返回10.1.8.11MX 解析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) 总结通过本文的学习和实验你应该掌握了DNS 核心原理层次结构、递归与迭代查询、资源记录类型权威 DNS 搭建BIND 的安装、配置、区域文件编写缓存 DNS 搭建Unbound 和 Dnsmasq 两种方案客户端工具dig、nslookup、host、getent 的使用故障排查常见错误码分析、日志查看、跟踪查询DNS 是互联网基础设施的核心深入理解其工作原理对于网络运维和系统管理至关重要。建议在生产环境部署前先在实验环境中充分测试配置。