DNS域名解析
- DNS域名解析服务——超详细实验操作!!!
- 序言
- DNS 基本概述
- 分布式、层次数据库
- DNS 层次结构
- DNS 查询步骤
- DNS 查询类型
- DNS服务器类型
- DNS 缓存
- 反向 DNS 查询
- 如何检查 DNS 记录是否生效
- Bind解析服务
- Bind简介
- bind的服务类型
- DNS域名解析服务器步骤
- 准备
- 配置正向解析
- 配置反向解析
- 主从服务器解析(重点)
- 主服务器配置
- 从服务器配置
- 测试
DNS域名解析服务——超详细实验操作!!!
DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。
本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。
💧CSDN@划过手的泪滴t
序言
域名服务器(Domain Name Server,DNS)是一种用于存储和管理域名解析信息的服务器。它们负责将易于记忆的域名(例如 www.example.com)转换为与之关联的 IP 地址(例如 192.0.2.1),以便在互联网上进行通信。它是一个由分层的*DNS 服务器(DNS server)*实现的分布式数据库;它还是一个使得主机能够查询分布式数据库的应用层协议。
DNS服务使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS。
一句话总结:域名系统 (DNS) 是互联网的电话簿
DNS 基本概述
与 HTTP、FTP 和 SMTP 一样,DNS 协议也是一种应用层的协议,DNS 使用客户-服务器模式运行在通信的端系统之间,在通信的端系统之间通过 UDP 运输层协议来传送 DNS 报文。
DNS 通常不是一门独立的协议,它通常为其他应用层协议所使用,这些协议包括 HTTP、SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。
每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符
下面根据一个示例来描述一下 DNS 解析过程:
你在浏览器键入 www.someschool.edu/index.html 时会发生什么?为了使用户主机能够将一个 HTTP 请求报文发送到 Web 服务器 www.someschool.edu ,会经历如下操作:
- 同一台用户主机上运行着 DNS 应用的客户端。
- 浏览器从上述 URL 中抽取出主机名 www.someschool.edu ,将这台主机名传给 DNS 应用的客户端。
- DNS 客户端向 DNS 服务器发送一个包含主机名的请求,请求 DNS 服务器解析这个主机名的 IP 地址。
- DNS 客户端最终会收到一份回答报文,其中包含该目标主机的 IP 地址。
- 一旦浏览器收到目标主机的 IP 地址后,它就能够向位于该 IP 地址 80 端口的 HTTP 服务器进程发起一个 TCP 连接。
除了提供 IP 地址到主机名的转换,DNS 还提供了下面几种重要的服务:
-
主机别名(host aliasing)
,有着复杂主机名的主机能够拥有一个或多个其他别名,比如说一台名为 relay1.west-coast.enterprise.com 的主机,同时会拥有 enterprise.com 和 www.enterprise.com 的两个主机别名,在这种情况下,relay1.west-coast.enterprise.com 也称为规范主机名,而主机别名要比规范主机名更加容易记忆。应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及主机的 IP地址。 -
邮件服务器别名(mail server aliasing)
,同样的,电子邮件的应用程序也可以调用 DNS 对提供的主机名进行解析。 -
负载分配(load distribution)
,DNS 也用于冗余的服务器之间进行负载分配,这种负载又叫做内部负载。繁忙的站点例如 cn com 被冗余分布在多台服务器上,每台服务器运行在不同的端系统,每个都有着不同的 IP 地址。由于这些冗余的 Web 服务器,一个 IP 地址集合因此与同一个规范主机名联系。DNS 数据库中存储着这些 IP 地址的集合。由于客户端每次都会发起 HTTP 请求,所以 DNS 就会在所有这些冗余的 Web 服务器之间循环分配了负载。还有一种负载是全局负载,全局负载一般部署在多个机房之间,每个机房都会有自己的 IP 地址,当用户访问某个域名时,会在这些 IP 之间进行轮询,如果某个数据中心挂了,就会将对应的 IP 地址删除,比如某个 DNS 客户端会轮询访问北京和上海的机房,一个挂了会直接使用另外一个,这就是全局负载的概念。
分布式、层次数据库
分布式设计首先解决的问题就是 DNS 服务器的扩展性问题。因此 DNS 使用了大量的 DNS 服务器,它们的组织模式一般是层次方式,并且分布在全世界范围内。没有一台 DNS 服务器能够拥有因特网上所有主机的映射。相反,这些映射分布在所有的 DNS 服务器上。
大致来说有三种 DNS 服务器:根 DNS 服务器、 顶级域(Top-Level Domain, TLD) DNS 服务器和权威 DNS 服务器。这些服务器的层次模型如下图所示。
DNS 层次结构
我们现在来讨论一下上面域名服务器的层次系统。
- 根 DNS 服务器 ,有 400 多个根域名服务器遍及全世界,这些根域名服务器由 13
个不同的组织管理。根域名服务器的清单和组织机构可以在 https://root-servers.org/ 中找到,根域名服务器提供 TLD服务器的 IP 地址。 - 顶级域 DNS 服务器,对于每个顶级域名比如 com、org、net、edu 和 gov 和所有的国家级域名
uk、fr、ca 和 jp 都有 TLD 服务器或服务器集群。所有的顶级域列表参见 https://tld-list.com/ 。TDL 服务器提供了权威 DNS 服务器的 IP 地址。 - 权威 DNS 服务器,在因特网上具有公共可访问的主机,如 Web
服务器和邮件服务器,这些主机的组织机构必须提供可供访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。一个组织机构的权威 DNS 服务器收藏了这些 DNS 记录。
DNS 查询步骤
下面我们来描述一下 DNS 的查询步骤,从 DNS 解析 IP 再到 DNS 报文返回的一系列流程。
注意:通常情况下 DNS 会将查找的信息缓存在浏览器或者计算机本地中,如果有相同的请求到来时,就不再会进行 DNS 查找,而会直接返回结果。
整个流程如下图所示
1.用户在浏览器中输入网址 www.cxuan.vip 并点击回车后,查询会进入网络,并且由 DNS 解析器进行接收。
2.DNS 解析器会向根域名发起查询请求,要求返回顶级域名的地址。
3.根 DNS 服务器会注意到请求地址的前缀并向 DNS 解析器返回 com 的顶级域名服务器(TLD)的 IP 地址列表。
4.然后,DNS 解析器会向 TLD 服务器发送查询报文。
5.TLD 服务器接收请求后,会根据域名的地址把权威 DNS 服务器的 IP 地址返回给 DNS 解析器。
6.最后,DNS 解析器将查询直接发送到权威 DNS 服务器。
7.权威 DNS 服务器将 IP 地址返回给 DNS 解析器。
8.DNS 解析器将会使用 IP 地址响应 Web 浏览器。
DNS 查询类型
DNS 查找中会出现三种类型的查询。通过组合使用这些查询,优化的 DNS 解析过程可缩短传输距离。在理想情况下,可以使用缓存的记录数据,从而使 DNS 域名服务器能够直接使用非递归查询。
- 递归查询:在递归查询中,DNS 客户端要求 DNS 服务器(一般为 DNS 递归解析器)将使用所请求的资源记录响应客户端,或者如果解析器无法找到该记录,则返回错误消息。
- 迭代查询:在迭代查询中,如果所查询的 DNS 服务器与查询名称不匹配,则其将返回对较低级别域名空间具有权威性的 DNS 服务器的引用。然后,DNS 客户端将对引用地址进行查询。此过程继续使用查询链中的其他 DNS 服务器,直至发生错误或超时为止。
非递归查询:当 DNS 解析器客户端查询 DNS 服务器以获取其有权访问的记录时通常会进行此查询,因为其对该记录具有权威性,或者该记录存在于其缓存内。DNS 服务器通常会缓存 DNS 记录,查询到来后能够直接返回缓存结果,以防止更多带宽消耗和上游服务器上的负载。
DNS服务器类型
1、主域名服务器:
负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文
2、从域名服务器:
当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
3、缓存域名服务器:
只提供域名解析结果的缓存功能 目的在于提高查询速度和效率,但没有域名数据库。
它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
4、转发域名服务器:
负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
DNS 缓存
DNS 缓存(DNS caching) 有时也叫做DNS 解析器缓存,它是由操作系统维护的临时数据库,它包含有最近的网站和其他 Internet 域的访问记录。也就是说, DNS 缓存只是计算机为了满足快速的响应速度而把已加载过的资源缓存起来,再次访问时可以直接快速引用的一项技术和手段。
反向 DNS 查询
我们上面一直讨论的是 DNS -> IP 的这种转换方式,这种方式也是 DNS 的精髓所在。
反向 DNS 查询向 DNS 服务器查询 PTR(Pointer Record)记录,如果服务器没有 PTR 记录,则无法解析反向查找这个过程。
PTR 记录会存储 IP 地址,反向查询时,PTR 中存储的 IP 地址会颠倒过来,并附上 .in-addr.arpa 字段,比如如果域的 IP 地址为 192.137.8.22,那么反向查询时,PTR 记录就是 22.8.137.192.in-addr.arpa 。
反向 DNS 查询通常用于电子邮件协议中,电子邮件服务器会检查电子邮箱中的电子邮件消息是否来自真实有效的服务器,垃圾邮件发送者经常使用被劫持机器的,这些邮件过来后就不会有 PTR 记录。电子邮件服务器会拒绝不支持反向查找的服务器或者不太合法的服务器邮件。
如何检查 DNS 记录是否生效
使用 nslookup 命令:可以使用 nslookup 命令查询 DNS 记录。例如,如果您想查询域名 example.com 的 A 记录,可以在命令行中执行以下命令:
nslookup example.com
如果 DNS 记录生效,nslookup 命令会返回解析到的 IP 地址。
使用 dig 命令:dig 命令是一个功能更强大的查询 DNS 记录的工具。例如,如果您想查询域名 example.com 的 A 记录,可以在命令行中执行以下命令:
dig example.com A
如果 DNS 记录生效,dig 命令会返回解析到的 IP 地址。
无论使用哪种方法,如果 DNS 记录生效,您应该会看到域名解析到了正确的 IP 地址。如果 DNS 记录未生效,您可能需要检查 DNS 记录是否正确,以及 DNS 服务器是否配置正确。
Bind解析服务
Bind简介
BIND (Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
bind的服务类型
hint 根域
master 主域
slave 从域
forwarder 转发域
DNS域名解析服务器步骤
准备
实验环境:centos7
服务器 | 主机名 | 功能 | dns | 软件 |
---|---|---|---|---|
192.168.1.137 | xcz10 | 主DNS | dns1=114.114.114.114 | bind |
192.168.1.116 | xcz7 | 从DNS | dns1=114.114.114.114 | bind |
192.168.1.124 | xcz742 | 测试机 | dns1=192.168.1.137 dns2=192.168.1.116 | bind-utils |
安装bind软件包
yum -y install bind
配置正向解析
#查看bind配置文件路径
rpm -qc bind
我们需要配置
/etc/named.conf #主配置文件
/etc/named/rfc1912.zonrs #区域配置文件
/var/named/named.localhost #区域数据配置文件
修改主配置文件
vim /etc/named.conf
vim /etc/named.confoptions {listen-on port 53 { any; }; #监听53端口,IP地址可用any代表所有listen-on-v6 port 53 { : :1; }; # ipv6这行如果不使用,可以注释掉或者删除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 {192.168.80.0/24;172.16.100.0/24; } { any; }; #允许使用本DNS解析服务的网段,也可用any代表所有
};zone "." IN { #正向解析"."根区域type hint; #类型为根区域file "named.ca"; #区域数据文件为named.ca,记录了13台根域服务器的域名和IP地址等信息
};include "/etc/ named. rfc1912. zones"; #包含区域配置文件里的所有配置
include "/etc/named.root.key";
修改区域配置文件,添加正向区域配置
vim /etc/named.rfc1912.zones
zone "yun.com" IN {type master;file "yun.com.zone";
};
配置正向区域数据文件
cd /var/named/
cp -p named.localhost yun.com.zone
vim yun.com.zone
$TTL 1D
@ IN SOA yun.com. admin.yun.com. (20220815 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS yun.com.A 192.168.1.137
www IN A 192.168.1.110
mail IN A 192.168.1.130
news IN CNAME WWW
* IN A 192.168.1.150
systemctl start named #启动服务
systemctl stop firewalld #关闭防火墙
setenforce 0 #关闭安全设施
检查配置文件
named-checkzone yun.com yun.com.zone
vim /var/log/ messages
或者 #如果服务启动失败,可以查看日志文件来排查错误
journalctl -u named -r
rndc-confgen -r /dev/urandom -a #如果服务启动卡住,可以执行此命令解决
客户端测试DNS解析
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.137
nslookup yun.com
Server: 192.168.1.137
Address: 192.168.1.137#53
Name: yun.com
配置反向解析
vim /etc/named.conf #主配置文件,和正向一样设置
复制区域文件,配置文件
cd /var/named
cp -a yun.com.zone yun.com.zone.local
vim yun.com.zone.local
$TTL 1D
@ IN SOA yun.com. admin.yun.com. (20220815 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumNS yun.com.A 192.168.1.137
110 IN PTR www.yun.com.
130 IN PTR mail.yun.com.
systemctl start named
systemctl stop firewalld
setenforce 0
客户端测试
nslookup 192.168.1.110
nslookup 192.168.1.130
主从服务器解析(重点)
主服务器配置
(1)设置IP地址为解析地址,修改完后立即生效
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.137
nameserver 192.168.1.116
(2)修改区域配置文件
vim /etc/named.rfc1912.zoneszone "1.168.192.in-addr.arpa" IN {type master;file "yun.com.zone.local";allow-transfer {192.168.1.116;};
};zone "yun.com" IN {type master;file "yun.com.zone";allow-transfer{192.168.1.116;};
};
(3)重启
systemctl restart named
从服务器配置
(1)修改主配置文件
vim /etc/named.confoptions {listen-on port 53 { any; };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";recursing-file "/var/named/data/named.recursing";secroots-file "/var/named/data/named.secroots";allow-query { any; };
(2)修改区域配置文件
vim /etc/named.rfc1912.zoneszone "1.168.192.in-addr.arpa" IN {type slave;file "slaves/yun.com.zone.local";masters{192.168.1.137;};
};zone "yun.com" IN {type slave;file "slaves/yun.com.zone";masters{192.168.1.137;};
};
(3)重启
systemctl restart named
(4)设置IP地址为解析地址,修改完后立即生效
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.137
nameserver 192.168.1.116
测试
主从服务器的服务启动后,文件自动同步
cd /var/named/slaves
ls
客户端测试主服务器解析
nslookup yun.com
关闭主服务器
systemctl stop named
测试从服务器
nslookup yun.com
从实验结果看,我们的主从DNS服务器已经配置完成了。