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

深入理解DNS原理与服务的详细配置

一、DNS服务的介绍

DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。

DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使用的是53端口,在/etc/services(搜索domain)这个文件中能看到。通常DNS是以UDP这个较快速的数据传输协议来查询的,但是没有查询到完整的信息时,就会再次以TCP这个协议来重新查询。 所以启动DNS时,会同时启动TCP以及UDP的port53

  • DNS域名解析时使用UDP协议
  • DNS主从服务器之间的通信使用TCP协议

1. 因特网的域名结构

由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。“域”(domain)是名字空间中一个可被管理的划分。

域名只是逻辑概念,并不代表计算机所在的物理地点。顶级域名可分为三大类:

  • 国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码contry-code)。

  • 通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

  • 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

2. 域名服务器的类型划分

根据域名服务器起的作用,可以把域名服务器划分为以下类型:

  • 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。

  • 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

  • 权限域名服务器:负责一个“区”的域名服务器。

  • 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

  • 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。

为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

3. DNS域名解析的过程

 ​​1)客户端本地查询​

  • ​​浏览器缓存检查​​:浏览器优先查询自身缓存(如Chrome的DNS缓存),若存在域名对应的IP地址则直接返回结果。
  • ​​操作系统缓存/Hosts文件查询​​:若浏览器无缓存,操作系统检查本地缓存或hosts文件(如/etc/hosts),若有记录则直接使用。

 ​​若命中缓存,解析终止​​;否则进入下一步。

2)本地DNS服务器递归查询​

  • 本地DNS服务器缓存检查​​:客户端向配置的本地DNS服务器(如ISP提供的服务器或公共DNS如8.8.8.8)发起请求,本地DNS服务器先查询自身缓存。
  • ​​递归查询机制​​:若缓存未命中,本地DNS服务器作为代理,代表客户端向更高级DNS服务器发起查询,直至获得结果(客户端无需参与后续查询)。

​3)DNS层级迭代查询​

若本地DNS服务器无缓存,则依次向以下服务器发起迭代查询:

  • ​​根域名服务器:返回管理目标域名的​​顶级域服务器地址​​。
  • ​​顶级域服务器:返回管理该域名的​​权威DNS服务器地址​​。
  • ​​权威域名服务器​​:返回域名对应的​​最终IP地址​​。

4)结果返回与缓存​

  • 本地DNS服务器缓存结果​​:将IP地址缓存一段时间(由域名的TTL值决定),后续相同请求直接响应。
  • ​​返回客户端​​:IP地址传回用户设备,浏览器据此与目标服务器建立连接(如HTTP/HTTPS请求)。

4. DNS解析方式

1)递归解析

  • ​过程​​:
    客户端向本地DNS服务器(如运营商或公共DNS)发起请求后,​​本地DNS服务器负责完成所有后续查询​​。若本地无缓存,它会从根DNS服务器开始逐级查询(根→顶级域→权威DNS),最终获取IP地址并返回客户端。
  • ​特点​​:
    • ​客户端只需发起一次请求​​,后续查询由服务器代理完成。
    • 本地DNS服务器缓存结果,提升后续查询效率。

​2)迭代解析

  • ​过程​​:
    本地DNS服务器收到客户端请求后,若自身无缓存,会​​逐级向上级DNS服务器查询​​
    • 先问根DNS,获得顶级域服务器地址;
    • 再问顶级域服务器,获得权威DNS地址;
    • 最后向权威DNS获取IP地址。
  • ​特点​​:
    • 本地DNS服务器仅返回下一级服务器地址,​客户端需主动联系多级服务器​​。
    • 减轻根服务器压力,适合复杂网络环境。

img

img

3)反向解析

通过IP地址查询对应的域名,需在DNS服务器中配置​​PTR记录​​(Pointer Record),将IP反向映射到域名。

二、搭建DNS服务器

提供DNS服务的软件叫bind,服务名是named。

yum install bind -y
rpm -ql bind
​
/etc/named.conf                # bind主配置文件
/etc/named.rfc1912.zones       # 定义zone的文件
/etc/rndc.conf                 # rndc配置文件
/usr/sbin/named-checkconf      # 检测/etc/named.conf文件语法
/usr/sbin/named-checkzone      # 检测zone和对应zone文件的语法
/usr/sbin/rndc                 # 远程dns管理工具
/usr/sbin/rndc-confgen         # 生成rndc密钥
/var/named/named.ca            # 根解析库
/var/named/named.localhost     # 本地主机解析库
/var/named/slaves              # 从服务器文件夹

 查看/etc/named.conf文件内容:

vim /etc/named.conf 
options {
# 定义监听端口,如果所有地址都监听,则只写端口listen-on port 53 { 127.0.0.1; };listen-on-v6 port 53 { ::1; };
# 定义数据文件目录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"; # 分配统计目录allow-query  { localhost; };                              # 只允许本地主机进行查询recursion yes;                                            # 允许递归
logging {
# 指定日志记录分类和他们的目标位置channel default_debug {file "data/named.run";severity dynamic;};
};zone "." IN {
# 定义区域type hint;                      # hint:根域配置;master:主域名服务器;slave:从域名服务器file "named.ca";                # 指定域的数据解析文件
};
# 包含其他的配置文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

实验一:正向解析

1. 修改named的配置文件

需要增改的内容如下:

[root@localhost ~]# vim /etc/named.conf     # 主配置文件
options {   # 全局选项listen-on port 53 { 192.168.153.129; };      # 改为本机IP地址allow-query     { any; };                 # 允许任何主机查询,也可以是IP或网段
};
# 区域定义:
zone "example.com" IN {         # 正向解析example.comtype master;                  # 主服务器类型file "example.zone";          # 区域文件名(可自定义)
};   

2. 自定义配置区域文件

区域文件,即文件资源记录(Resource Record,RR)

创建example.zone区域文件并配置以下内容(要和上面区域定义中的file文件名一样)

vim /var/named/example.zone
$TTL 1D
@       IN SOA  dns.example.com.  test.163.com ( 0       ; serial    ; 该文件中分号代表注释1D      ; refresh1H      ; retry1W      ; expire       3H )    ; minimum                        IN  NS  dns.example.com.IN  MX  10 mail.example.com.
mail.example.com.    IN A 192.168.153.129  ; 邮件服务器IP
dns.example.com.     IN A 192.168.153.129  ; DNS服务器IP
ftp                  IN A 192.168.153.130  ; ftp.example.com → 130
dhcp                 IN A 192.168.153.132  ; dhcp.example.com → 132
www                  IN A 192.168.153.130  ; www.example.com → 130
web			         IN	CNAME	www

 注意:文件中的域名要写完全域名,也就是注意最后的那个“.”不要忘记,如果不是完全限定域名的格式,文件会默认追加区域使其成为完全限定域名(如文件中的mail)。

文件解读:

​部分​​配置行示例​​作用​说明
默认TTL

$TTL 1D

定义全局缓存时间表示下游DNS服务器或客户端可缓存此文件中的记录时长。
SOA记录@ IN SOA dns.example.com. admin.example.com. (...)域授权信息及同步策略SOA(Start of Authority)是区域文件的​​核心授权记录​​,定义了域名的管理属性和同步策略。必须是第一条记录且仅有一个
NS记录IN NS dns.example.com.指定权威DNS服务器必须存在至少一条,指向可解析的A记录(如dns.example.com已配置A记录)
MX记录IN MX 10 mail.example.com.指定邮件服务器需配套A记录解析mail.example.com的IP。
A记录www IN A 192.168.153.130主机名→IPv4映射直接指向服务器IP(www等价于www.example.com.)
CNAME记录web IN CNAME www别名指向不可与其他记录类型共存(如同时存在A和CNAME)。

SOA的参数解读:

​参数​​含义​​配置值​​建议值/说明​​作用​
​serial​区域数据版本号0格式建议为YYYYMMDDNN(如2024071901主从同步依据:从服务器通过比较序列号判断是否需同步更新。
​refresh​从服务器检查主服务器的间隔1D通常数小时(如12H从服务器定期查询主服务器SOA记录以检测更新。
​retry​同步失败后的重试间隔1H通常数分钟(如15M若从服务器无法连接主服务器,在此时间后重试。
​expire​从服务器停止提供服务的超时1W通常数周(如4W若超过此时间仍无法同步主服务器,从服务器不再响应查询。
​minimum​否定响应(NXDOMAIN)的缓存时间3H通常数小时(如1H当查询记录不存在时,此TTL生效。

3. 检查语法,重启named服务

# 检查主配置文件语法
named-checkconf # 检查example.zone文件语法
named-checkzone example.com /var/named/example.zone
zone example.com/IN: loaded serial 0
OK# 确认无误,重启服务
systemctl restart named

4. 客户端测试

# 修改DNS地址
nmcli con modify ens33 +ipv4.dns 192.168.153.129
nmcli con up ens33# 安装测试工具
yum install -y bind-utils# 测试
nslookup dhcp.example.com 192.168.153.129    # nslookup [域名] [dns服务器]
Server:		192.168.153.129
Address:	192.168.153.129#53Name:	dhcp.example.com
Address: 192.168.153.132

注:如果无法成功注意关闭防火墙

实验二:反向解析

1. 主配置文件添加

vim /etc/named.conf
zone "153.168.192.in-addr.arpa" IN {  # ip要反写且要加上.in-addr.arpatype master;file "153.168.192.zone";
};

2. 配置反向区域文件

vim /var/named/153.168.192.zone
$TTL 1D
@       IN      SOA     dns.example.com.        test.163.com    (01D1H1W3H )IN      NS      dns.example.com.
dns     IN      A       192.168.153.129
129     IN      PTR     dns.example.com.
130     IN      PTR     www.example.com.
​记录类型​​语法格式​​作用​​示例与说明​
PTRIP反写 IN PTR 域名将IP映射到域名(核心记录)3 IN PTR www.example.com.(IP 192.168.1.3 → www.example.com

3. 检验语法,重启服务

# 检查主配置文件语法
named-checkconf # 检查153.168.192.zone文件语法
named-checkzone 153.168.192.in-addr.arpa /var/named/153.168.192.zone 
zone 153.168.192.in-addr.arpa/IN: loaded serial 0
OK# 确认无误,重启服务
systemctl restart named

4. 客户端测试

nslookup 192.168.153.130 192.168.153.129
130.153.168.192.in-addr.arpa	name = www.example.com.

实验三:区域传送(主从服务)

将一个区域文件复制到多个服务器上的过程叫做区域传送。将主服务器上的区域文件复制到从服务器上来实现。

主服务器IP:192.168.153.129

从服务器IP:192.168.153.131

1. 完全区域传送

复制整个区域文件到从服务器上

主服务器:

# 1.修改主配置文件/etc/named.conf
vim /etc/named.conf
options {allow-transfer { 192.168.1.101; };  # 仅允许从服务器同步
};# 2.修改区域配置文件
vim /var/named/example.zone            # 增加从服务器的记录IN      NS      dns2.example.com.
dns2    IN      A       192.168.153.131vim /var/named/153.168.192.zone        # 反向区域文件同理也增加IN      NS      dns2.example.com.
dns2    IN      A       192.168.153.131
131     IN      PTR     dns2.example.com.# 3.重启服务
systemctl restart named

从服务器:

# 1.安装bind
yum install -y bind# 2.修改主配置文件/etc/named.conf
vim /etc/named.conf
options {listen-on port 53 { 192.168.153.131; };allow-query     { any; };};zone "example.com" IN {type slave;                    # 类型为从服务器masters { 192.168.153.129; };  # 主服务器IPfile "slaves/example.zone";    # 同步到的区域文件的存放路径
};zone "153.168.192.in-addr.arpa" IN {type slave;masters { 192.168.153.129; };file "slaves/153.168.192.zone";
};# 3.重启服务
systemctl restart named

 在从服务器上查看区域文件是否同步成功:

ls -l /var/named/slaves
total 8
-rw-r--r-- 1 named named 554 Jul 19 14:50 153.168.192.zone
-rw-r--r-- 1 named named 566 Jul 19 14:50 example.zone

2. 增量区域传送

增量区域传送:仅复制区域里变化的文件

  1. 修改主服务器的区域配置文件,将serial序号从0改为10
  2. 重启服务
  3. 检验从服务器中example.zone的修改时间变化
ls -l /var/named/slaves/
total 8
-rw-r--r-- 1 named named 554 Jul 19 14:50 153.168.192.zone
-rw-r--r-- 1 named named 566 Jul 19 14:55 example.zone      # 时间从14:50变成了14:55  

     4. 测试从服务器能否正常解析:

nslookup ftp.example.com 192.168.153.131
Server:		192.168.153.131
Address:	192.168.153.131#53Name:	ftp.example.com
Address: 192.168.153.130

over~

http://www.xdnf.cn/news/1147249.html

相关文章:

  • 传统行业和AIGC的结合及应用
  • 计算机视觉:AI 的 “眼睛” 如何看懂世界?
  • 让 Windows 用上 macOS 的系统下载与保姆级使用教程
  • Spring Cloud Gateway与Envoy Sidecar在微服务请求路由中的架构设计分享
  • 云服务器磁盘IO性能优化的测试与配置方法
  • 大模型 Function Call 的实现步骤及示例详解
  • 6 STM32单片机的智能家居安防系统设计(STM32代码+手机APP设计+PCB设计+Proteus仿真)
  • 【Qt开发】Qt的背景介绍(三)-> 认识Qt Creator
  • 【C# in .NET】20. 探秘静态类:抽象与密封的结合体
  • 数学建模:运筹优化类问题
  • Python MCP与Excel增强智能:构建下一代数据处理和自动化解决方案
  • Ubuntu网卡驱动无效,不能连接wifi上网
  • 【2025/07/19】GitHub 今日热门项目
  • Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布
  • PostgreSQL常用命令与工具指南
  • OpenCV 官翻6 - Computational Photography
  • uniapp中报错:ReferenceError: FormData is not defined
  • LVS 集群技术实践:NAT 与 DR 模式的配置与对比
  • MySQL基础教程
  • OllyDbg技巧学习
  • 车载诊断架构 --- 故障码DTC严重等级定义
  • 【Unity编辑器开发GUI.Window】
  • Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)
  • 如何用Python并发下载?深入解析concurrent.futures 与期物机制
  • 【密码学】1. 引言
  • 目标框的位置以及大小的分布
  • 题解:CF1617C Paprika and Permutation
  • VMC850立式加工中心Y轴传动机械结构设计cad【7张】三维图+设计说明书
  • DTW算法解决时序问题的解析实践
  • JavaSE -- 数组详细讲解(数组介绍,Arrays常用方法,二维数组创建)