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

DNS 服务原理与部署实战:从基础到主从架构搭建

DNS(Domain Name Service)作为互联网的 “地址簿”,负责将人类易记的域名转换为机器可识别的 IP 地址,是网络通信的核心基础设施。本文将从 DNS 基础概念入手,逐步深入解析其工作原理,并通过实战演示单点主服务器与主从架构的部署过程(基于 CentOS 7 + BIND),帮助读者全面掌握 DNS 服务的配置与故障排查。

一、DNS 核心概念与基础认知

1.1 什么是 DNS?

DNS 是一套分布式域名服务系统,由全球多个 DNS 服务器协同组成。每个服务器存储着域名与 IP 地址的映射关系,且支持动态更新。无论是浏览器访问网站、邮件发送,还是服务器间通信,都依赖 DNS 协议向 DNS 服务器查询目标 IP。

1.2 DNS 的核心作用

DNS 的核心功能分为两类解析方向,覆盖不同场景需求:

  • 正向解析:将已知域名(如www.baidu.com)转换为对应的 IP 地址(如14.215.177.38),是日常上网最常用的解析场景。
  • 反向解析:将已知 IP 地址(如14.215.177.38)转换为对应的域名(如www.baidu.com),常用于服务器身份验证(如邮件服务器反垃圾邮件校验、服务器日志溯源)。

1.3 关键技术参数

  • 监听端口:DNS 默认使用53/udp(轻量、快速,适合 90% 以上的短解析请求)和53/TCP(用于大尺寸响应或区域传输,如主从服务器同步数据)。
  • 默认运行用户:Linux 系统中,DNS 服务(以 BIND 为例)默认使用named用户运行,避免 root 权限泄露,提升服务安全性。

二、完全限定域名(FQDN)与域名结构

2.1 FQDN 的定义

FQDN(Fully Qualified Domain Name)即 “完全限定域名”,是域名的完整格式,必须包含从主机名到根域的所有层级,且以 “.” 结尾(日常使用中浏览器会自动补全根域 “.”)。
示例:www.baidu.com.(完整格式),简化写法为www.baidu.com

2.2 域名层级结构

域名采用 “树状结构”,从顶层到下层依次为:根域 → 顶级域 → 二级域 → 三级域 → 主机名,具体结构如下:

主机名.三级域.二级域.顶级域.根域.
(示例:mail.tech.baidu.com. → 主机名mail,三级域tech,二级域baidu,顶级域com,根域.)

2.3 常见域类型分类

不同层级的域名对应不同的功能和用途,下表清晰列出核心域类型及示例:

域类型说明示例
根域域名系统的最顶层,全球唯一,所有域名都隶属于根域.(通常省略不显示)
顶级域根域下的第一层,分为 “通用顶级域” 和 “国家 / 地区顶级域”通用:com(商业)、org(非盈利)、edu(教育);国家:cn(中国)、hk(中国香港)
二级域顶级域下的自定义域名,需向域名注册商(如阿里云、腾讯云)申请baidubaidu.com)、163163.com
三级域(子域)二级域下的细分域名,由域名持有者自主创建,无需额外申请wwwwww.baidu.com)、mailmail.163.com

三、DNS 解析过程:递归与迭代的协同

DNS 解析并非 “一步到位”,而是通过客户端与本地 DNS 服务器的递归查询,以及本地 DNS 服务器与根 / 顶级域 / 权限服务器的迭代查询共同完成。理解这一过程是掌握 DNS 的核心。

3.1 客户端解析域名的 3 个步骤(必须掌握)

当客户端(如浏览器)输入域名后,解析流程按以下优先级依次执行:

  1. 查询本地 DNS 缓存
    操作系统会缓存近期解析过的域名 - IP 映射(Windows 可通过ipconfig /displaydns查看,Linux 通过systemd-resolve --statistics查看)。若缓存中有记录,直接返回结果,无需后续步骤(缓存有过期时间,通常为几分钟到几小时)。

  2. 查询本地 hosts 文件
    hosts 文件是 DNS 诞生前的 “本地域名映射文件”,优先级高于 DNS 服务器。若缓存无记录,系统会读取 hosts 文件:

    • Windows 路径:C:\Windows\System32\drivers\etc\hosts
    • Linux 路径:/etc/hosts
      示例:在 hosts 中添加192.168.1.100 www.test.com,访问www.test.com会直接指向该 IP(常用于本地测试或屏蔽广告域名)。
  3. 查询配置的 DNS 服务器
    若前两步无结果,客户端会向/etc/resolv.conf(Linux)或网络适配器配置中指定的 “本地 DNS 服务器” 发送查询请求,进入递归与迭代查询阶段。

3.2 递归查询与迭代查询的区别

查询类型参与方特点类比场景
递归查询客户端 ↔ 本地 DNS 服务器客户端只发一次请求,本地 DNS 服务器 “全权负责”,要么返回最终 IP,要么返回 “解析失败”“帮我找 A 的地址,直接告诉我结果”
迭代查询本地 DNS 服务器 ↔ 根 / 顶级域 / 权限服务器本地 DNS 服务器每一步都需主动询问下一级服务器,对方仅告知 “下一步该找哪个服务器”,不直接返回结果“找 A 要问 B,B 的地址是 xxx”
迭代查询流程示例(以www.baidu.com为例):
  1. 本地 DNS 服务器 → 根域服务器:“www.baidu.com的 IP 在哪?”
  2. 根域服务器回复:“我不知道,但你可以问com顶级域服务器(IP:192.5.6.30)”
  3. 本地 DNS 服务器 → com顶级域服务器:“www.baidu.com的 IP 在哪?”
  4. com顶级域服务器回复:“我不知道,但你可以问baidu.com权限服务器(IP:202.108.22.220)”
  5. 本地 DNS 服务器 → baidu.com权限服务器:“www.baidu.com的 IP 在哪?”
  6. baidu.com权限服务器回复:“www.baidu.com的 IP 是 14.215.177.38”
  7. 本地 DNS 服务器将 IP 返回给客户端,并缓存该记录。

四、DNS 服务器的分类

根据 “功能作用” 和 “应用场景”,DNS 服务器可分为不同类型,各自承担不同职责,共同保障 DNS 系统的稳定运行。

4.1 按功能作用分类(层级结构)

  1. 根域名服务器
    全球共 13 组(逻辑上 13 个,物理上数千台镜像服务器),存储所有顶级域服务器的 IP 地址。是 DNS 解析的 “入口”,任何未知域名的解析都从根域开始。

  2. 顶级域服务器
    负责管理对应顶级域下的二级域。例如:com顶级域服务器存储所有xxx.com二级域的权限服务器地址,cn顶级域服务器存储所有xxx.cn二级域的权限服务器地址。

  3. 权限域名服务器
    负责一个 “区域”(Zone)的域名解析,是某类域名的 “权威服务器”(即该服务器存储的解析记录是 “最终答案”)。例如:baidu.com的权限服务器存储www.baidu.commail.baidu.com等子域名的 IP 映射。

  4. 本地域名服务器
    由 ISP(如电信、联通)或企业内部部署,不隶属于 DNS 层级结构,但对用户至关重要。用户设备默认配置的 DNS 服务器多为本地域名服务器(如公共 DNS:114.114.114.114、8.8.8.8)。

4.2 按应用场景分类(部署模式)

  1. 主服务器(Primary Name Server)

    • 某区域域名解析的 “权威源”,存储该区域的完整解析记录(正向 / 反向区域文件)。
    • 主服务器宕机后,从服务器会临时接管服务,保障解析不中断。
  2. 从服务器(Secondary Name Server)

    • 从主服务器同步区域文件,作为 “备份节点”,提升解析可用性和负载能力(分担主服务器的查询压力)。
    • 同步机制:周期性检查(如每 1 小时主动查询主服务器是否有更新)+ 主服务器主动通知(主服务器记录更新时,立即告知从服务器同步)。
    • 注意:若主服务器长期不可用,从服务器会在 “过期时间”(Expire,通常为 1 周)后停止提供服务。
  3. 高速缓存服务器(Cache-only Server)

    • 不存储任何区域文件,仅缓存其他 DNS 服务器的解析结果。
    • 作用:减少重复查询,提升解析速度(如企业内部部署,加速员工访问常用网站;ISP 部署,减少跨网查询延迟)。

五、DNS 服务器部署:基于 BIND 的实战操作

Linux 系统中,DNS 服务通常通过BIND(Berkeley Internet Name Domain) 软件实现(BIND 是目前全球使用最广泛的 DNS 服务器软件,占比超 80%)。本节以 CentOS 7 为例,演示 BIND 的安装与核心文件解析。

5.1 安装 BIND 软件包

方式 1:在线安装(需联网)
[root@localhost ~]# yum install -y bind bind-utils
# bind:DNS服务核心包(提供named服务进程)
# bind-utils:DNS测试工具包(包含dig、nslookup等工具,用于验证解析结果)
方式 2:本地安装(无网络时,需挂载系统镜像)
# 1. 挂载CentOS 7系统镜像到/mnt目录
[root@localhost ~]# mount /dev/cdrom /mnt# 2. 配置本地YUM源(新建/etc/yum.repos.d/local.repo文件)
[root@localhost ~]# cat > /etc/yum.repos.d/local.repo << EOF
[local]
name=CentOS-Local
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF# 3. 安装BIND
[root@localhost ~]# yum clean all && yum makecache
[root@localhost ~]# yum install -y bind bind-utils

5.2 BIND 核心文件解析

安装完成后,BIND 会生成一系列配置文件和目录,核心文件的路径及作用如下表所示:

文件 / 目录路径作用
/etc/named.confBIND 主配置文件,定义监听 IP、端口、数据目录、访问控制(allow-query)等全局参数
/etc/named.rfc1912.zones区域配置文件,定义正向 / 反向解析区域(如jx.com域、192.168.115.0/24网段)
/var/named/区域文件存储目录,存放正向 / 反向解析的具体记录(如jx.com.zone
/var/named/named.ca根域服务器列表,包含全球 13 组根域服务器的 IP 和域名,不可擅自修改
/var/named/named.localhost本地回环接口的区域文件模板(默认解析localhost),可复制用于自定义区域文件
/var/named/named.loopback回环 IP(127.0.0.1)的反向区域文件模板,可复制用于自定义反向区域文件
/var/named/slaves/从服务器同步的区域文件存储目录(主从架构时自动生成,无需手动创建)
/var/log/named.logDNS 服务日志文件,记录解析请求、错误信息、主从同步状态等(需手动配置日志路径)

5.3 BIND 核心命令

命令作用
systemctl start named启动 BIND 服务
systemctl enable named设置 BIND 服务开机自启
systemctl status named查看 BIND 服务运行状态(判断是否正常启动)
named-checkconf检查主配置文件(/etc/named.conf)语法是否正确(无输出即无错误)
named-checkzone 区域名 区域文件路径检查区域文件语法是否正确(如named-checkzone jx.com /var/named/jx.com.zone
named-journalprint 日志文件路径打印 BIND 运行日志(用于故障排查,如主从同步失败原因)

六、实战 1:配置 DNS 主服务器(单点架构)

本节以 “jx.com域”(正向解析)和 “192.168.115.0/24网段”(反向解析)为例,完整演示单点 DNS 主服务器的配置流程。

6.1 环境准备

  • 服务器 IP:192.168.115.128(CentOS 7,关闭防火墙和 SELinux,避免拦截 DNS 请求)
  • 解析需求:
    • 正向:www.jx.com192.168.115.129mail.jx.com192.168.115.130ftp.jx.com192.168.115.131ww.jx.com(别名)→www.jx.com
    • 反向:192.168.115.129www.jx.com192.168.115.130mail.jx.com192.168.115.131ftp.jx.com

6.2 步骤 1:修改主配置文件(/etc/named.conf)

核心修改点:

  • listen-on port 53:指定 DNS 服务监听的 IP(改为服务器实际 IP,如192.168.115.128,默认仅监听 127.0.0.1,外部客户端无法访问)。
  • allow-query:允许访问的客户端(改为any,允许所有客户端查询,默认仅允许localhost)。

完整配置如下:

[root@localhost ~]# vim /etc/named.conf
options {listen-on port 53 { 192.168.115.128; };  # 服务器实际IPlisten-on-v6 port 53 { ::1; };  # 禁用IPv6可改为none;directory   "/var/named";  # 区域文件存储目录(默认,无需修改)dump-file   "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";recursing-file  "/var/named/data/named.recursing";secroots-file   "/var/named/data/named.secroots";allow-query     { any; };  # 允许所有客户端查询recursion yes;  # 开启递归查询(本地DNS服务器需开启,权威服务器可关闭)dnssec-enable yes;  # 启用DNSSEC(域名安全解析,可选关闭)dnssec-validation yes;bindkeys-file "/etc/named.root.key";managed-keys-directory "/var/named/dynamic";pid-file "/run/named/named.pid";  # PID文件路径(默认)session-keyfile "/run/named/session.key";
};# 日志配置(可选,默认日志存储在/var/named/data/named.run)
logging {channel default_debug {file "data/named.run";severity dynamic;};
};# 根域配置(默认,无需修改,指向/var/named/named.ca)
zone "." IN {type hint;file "named.ca";
};# 包含区域配置文件(关键,关联/etc/named.rfc1912.zones)
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


文章转载自:

http://LleC9uKJ.cpfbg.cn
http://3IT6DnAN.cpfbg.cn
http://40IUnqt5.cpfbg.cn
http://z57PKNci.cpfbg.cn
http://11Ai54xM.cpfbg.cn
http://JY2K0ndr.cpfbg.cn
http://7m4CvqH4.cpfbg.cn
http://60c4j2DO.cpfbg.cn
http://vvFeSRbd.cpfbg.cn
http://IWawprRF.cpfbg.cn
http://LjAzU7Eo.cpfbg.cn
http://MNNy8wlE.cpfbg.cn
http://OS3MrRnL.cpfbg.cn
http://N9OSj5uY.cpfbg.cn
http://BIXiFP85.cpfbg.cn
http://vTYnvp5S.cpfbg.cn
http://u9p6Spg8.cpfbg.cn
http://6jitCXmV.cpfbg.cn
http://3pbZPDeF.cpfbg.cn
http://eKzVuZyX.cpfbg.cn
http://TbntGkx2.cpfbg.cn
http://L9G1Xoge.cpfbg.cn
http://ezIguK43.cpfbg.cn
http://66CqyFZo.cpfbg.cn
http://CDH5B1CB.cpfbg.cn
http://c09WPtDY.cpfbg.cn
http://XcOZErKE.cpfbg.cn
http://IOjr2MiT.cpfbg.cn
http://09D5Amju.cpfbg.cn
http://P5dCTnmL.cpfbg.cn
http://www.dtcms.com/a/388458.html

相关文章:

  • 《黑夜君临》网络测试:XSX表现优于PS5及PS5 Pro
  • HDLBits-移位寄存器
  • C++宽度优先搜索算法(BFS算法):FloodFill问题模型
  • ThreadLocal 的工作原理
  • Windows 11 下载安装 CosyVoice2,一键启动
  • 《Vuejs设计与实现》第 16 章(解析器) 下
  • JavaSE——图书系统项目
  • PHP 中 Class 的使用说明
  • Android入门到实战(九):实现书架页——RecyclerView + GridLayoutManager + 本地数据库
  • 日常开发-20250917
  • 基于SpringBoot+Vue的近郊农场共享管理系统(Echarts图形化分析)
  • AI开发实战:从数据准备到模型部署的完整经验分享
  • 【漏洞预警】大华DSS数字监控系统 user_edit.action 接口敏感信息泄露漏洞分析
  • RFID赋能光伏电池片制造智能化跃迁
  • 大数据 + 分布式架构下 SQL 查询优化:从核心技术到调优体系
  • FPGA硬件设计-DDR
  • 卫星通信天线的跟踪精度,含义、测量和计算
  • 忘记MySQL root密码,如何急救并保障备份?
  • Java 异步编程实战:Thread、线程池、CompletableFuture、@Async 用法与场景
  • 贪心算法应用:硬币找零问题详解
  • while语句中的break和continue
  • 10cm钢板矫平机:一场“掰直”钢铁的微观战争
  • Python实现计算点云投影面积
  • C++底层刨析章节二:迭代器原理与实现:STL的万能胶水
  • 学习Python中Selenium模块的基本用法(14:页面打印)
  • 便携式管道推杆器:通信与电力基础设施升级中的“隐形推手”
  • leetcode 349 两个数组的交集
  • UV映射!加入纹理!
  • 车辆DoIP声明报文/识别响应报文的UDP端口规范
  • Elasticsearch 2.x版本升级指南