目录
一、DNS解析的定义与作用
(一)DNS解析的定义
(二)DNS解析的作用
(三)DNS使用协议与端口号
(四)域名体系结构
(五)查询方式
1.递归查询
2.迭代查询
二、DNS域名解析过程
三、搭建DNS解析服务器
(一)设置本机为DNS解析服务器
(二)正向解析
1.配置区域数据信息
2.配置解析数据信息
(三)反向解析
(四)主从服务
1.主服务器设置
2.从服务器设置
3.主从同步
(五)分离解析
1.建立信息
2.建立独立的数据库
3.测试
DNS解析(Domain Name System Resolution)是互联网服务中的一个核心环节,它负责将用户容易记住的域名转换成网络设备能够识别和使用的IP地址。一般来讲域名比 IP 地址更加的有含义、也更容易记住,所以通常用户更习惯输入域名来访问网络中的资源,但是计算机主机在互联网中只能通过IP 识别对方主机,那么就需要 DNS 域名解析服务了。具体来说:DNS 域名解析服务(Domain Name Svstem)是用于解析域名与 P 地址对应关系的服务,功能上可以实现正向解析与反向解析:
正向解析:根据主机名(域名)查找对应的 IP 地址。
反向解析:根据 IP 地址查找对应的主机名(域名)。
定义: DNS解析是指当用户或应用程序通过浏览器、电子邮件客户端等访问某个域名时,系统会通过DNS协议查询对应的IP地址的过程。这个过程涉及从本地缓存、递归DNS服务器到权威DNS服务器等一系列查询操作,最终获取到域名映射的实际IP地址。
易于记忆与访问: 用户可以通过有意义且易记的域名(如www.example.com)来访问网站,而不是直接使用复杂的IP地址(如192.0.2.1)。
分布式管理: DNS系统是一个分布式的数据库,允许全球各地的网络管理员独立管理和维护各自域名下的资源记录,包括子域名、邮件服务器和其他网络服务的指向。
负载均衡和冗余备份: 通过DNS解析,可以实现对同一域名提供多个IP地址(例如轮询负载均衡或多A记录),以达到负载均衡的目的,并在主服务器不可用时快速切换到备用服务器,保证服务连续性。
地理位置优化: 智能DNS解析可以根据用户的地理位置提供最近或最优的服务器IP地址,从而减少延迟,提高用户体验。
安全性和稳定性增强: DNSSEC等技术可以为DNS解析增加安全性,防止中间人攻击和域名劫持等问题,确保数据传输的安全可靠。
总之,DNS解析是网络通信中至关重要的第一步,它使得互联网的使用者能够通过简洁易记的域名来准确高效地定位和访问网络资源。
比如,我们在访问百度时,一般会直接输入www.baidu.com,其实访问它的网址,也可以打开百度,我们在ping www,baidu,com 时,会得到来自一个IP地址的回复包,访问这个IP地址就等于访问百度
TCP协议53端口号、UDP协议53端口号
DNS客户端(如操作系统或应用程序):
当DNS客户端发起查询时,它会通过UDP协议在端口号53上发送DNS请求。
对于需要更大数据包或者需要保证数据完整性的操作(例如区域传输),DNS客户端也可以使用TCP协议,在端口号53上与DNS服务器进行通信。
DNS服务器:DNS服务器监听并响应来自客户端的查询,同样也通过端口号53接收和发送信息。无论是处理递归查询还是迭代查询,无论是使用UDP还是TCP协议,服务器端都使用这个标准端口来提供服务
DNS 服务协议采用类似目录树的层次结构记录域名与IP 地址的映射对应关系,形成一个分布式的数据库系统: DNS 结构模型
而单靠几台 DNS 服务器肯定不能满足全球如此多用户的需求,所以从工作形式上又分主服务器、从服务器和缓存服务器。
主服务器:在特定区域内具有唯一性、负责维护该区域内的域名与 IP 地址对应关系。
从服务器:从主服务器中获得域名与 IP 地址对应关系并维护,以防主服务器宕机等情况。
缓存服务器:通过向其他域名解析服务器查询获得域名与 IP 地址对应关系,提高重复查询时的效率。
用于客户机向 DNS 服务器查询。
递归查询要求DNS服务器必须向客户端返回一个最终结果,即域名对应的IP地址。如果DNS服务器本身没有该域名的记录,则它会代表客户端发起一系列查询,直到找到权威DNS服务器并获得最终答案,将返回的查询结果提交给客户机。
用于 DNS 服务器向其它 DNS 服务器查询。
在迭代查询中,当DNS服务器接收到查询请求时,它并不会承诺直接给出最终答案,而是提供其他可以查询的DNS服务器地址。这意味着DNS服务器会告诉客户端“我无法给你答案,但你可以去问这个DNS服务器”,并将指向更接近答案的下一级DNS服务器地址发送给客户端,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
简而言之,在递归查询中,DNS服务器承担了所有查询工作,而客户端只需要等待最终结果;在迭代查询中,客户端或其代理DNS服务器需要进行多次查询操作,逐步逼近答案。
在访问时,首先会查询本地缓存与hosts文件
本机缓存查询:
当用户发起一个请求时(比如访问www.baidu.com),首先操作系统会检查本地的DNS缓存。每个设备都维护一个本地DNS缓存,存储最近查询过的域名及其对应的IP地址。如果目标域名在缓存中且未过期,则直接返回IP地址并跳过后续步骤。如图中第一步过后直接到第八步
hosts文件查找
如果本地缓存中没有找到该域名,系统接下来会查看 hosts 文件。这个文件是操作系统级别的配置文件,可以手动添加域名和IP地址的映射关系。如果有匹配记录,则根据hosts文件中的信息进行连接。
例如:在hosts文件自定义IP地址与主机名的匹配关系
此时访问百度,就是访问自定义的地址
如果上述两项都没有的话,就会进行下一步操作
1.客户端向本地缓存服务器或自定义服务器发出请求,有结果直接返回信息,没有则进行下一步
2.向根服务器发出请求,根服务器无法解析
3.根服务器反馈信息,让本地缓存服务器寻找顶级域服务器
4.向顶级服务器发出请求,顶级服务器无法解析
5.顶级域服务器反馈信息,让本地缓存服务器寻找二级域服务器
6.向二级域服务器发出请求,二级域服务器可以解析,那它就是该地址的权威服务器
7.二级域服务器(权威服务器)向本地服务器返回解析结果
8.本地缓存服务器得到结果后向客户端反馈信息
一旦本地DNS服务器获得了www.baidu.com的IP地址,它不仅将这个结果返回给客户端,还会将其缓存在本地,以便未来对该域名的请求可以直接使用缓存的结果。客户端拿到IP地址后,就可以通过TCP/IP协议栈建立与目标服务器的连接,从而访问网站或服务。
在开始实验之前,先把防火墙与核心防护关闭
1. 第一步:下载bind服务
2.查询软件配置文件位置:rpm -qc 软件名
注意:有的服务软件名与服务命不一致,比如bind软件,软件名叫bind,服务名称叫named
3.修改主配置文件
12 options { #这部分定义了全局的DNS服务器配置选项。
13 listen-on port 53 { 127.0.0.1; }; #指定DNS服务器监听在IPv4地址127.0.0.1上的53号端口进行服务
14 listen-on-v6 port 53 { ::1; }; #与上一行类似,但针对的是IPv6环境,只允许来自IPv6环回地址 (::1) 的请求
15 directory "/var/named"; #设置BIND DNS服务器的家目录,所有数据文件(如区域数据库、日志等)将存储在这个目录下。
16 dump-file "/var/named/data/cache_dump.db";#存数据库转储文件位置,在清理或重启DNS服务器时用于保存当前的DNS缓存内容。
17 statistics-file "/var/named/data/named_stats.txt";#统计信息文件路径,记录DNS服务器运行的各种性能统计数据。
18 memstatistics-file "/var/named/data/named_mem_stats.txt";#内存使用统计信息文件路径,记录DNS服务器占用内存的相关统计信息。
19 recursing-file "/var/named/data/named.recursing";#递归查询状态文件路径,用于记录正在进行递归查询的信息
20 secroots-file "/var/named/data/named.secroots";#安全根(Securit Roots)数据库文件路径,存储DNSSEC相关信任锚点数据。
21 allow-query { localhost; }; #设置允许执行DNS查询操作的客户端范围
将上述文件中的监听地址(13行)与允许执行操作的范围(21行)进行修改
也可以指定IP地址,将any改为指定地址
4.修i改网卡配置
5.重启服务后进行测试
6.配置客户端信息
将客户端的DNS解析地址设为本机IP,也可以使用该功能
将本机设置为DNS解析地址后,再去设置域名配置文件
在安装程序的时候,会自动生成一个用户去启动程序,同时也会生成一个该用户的家目录文件
设置主机位DNS解析服务器的时候,之所以能够解析根域,是因为named用户的家目录下有一个named.ca的文件。它记录了全球13台根DNS服务器的IP地址
打开看一下
因为IP地址可能会有变化,如果有兴趣可以去iana的官网去查看
https://www.iana.org/domains/root/servers
如果想自定义域名,需要在域名配置文件中修改内容
为了避免经常修改主配置文件named.conf而导致DNS 服务出错,所以规则的区域信息保存在了”/etc/named.rfc1912.zones“文件中,这个文件用于定义域名与 IP 地址解析规则保存的文件位置以及区域服务类型等内容,一定要谨慎修改。
vim /etc/named.rfc1912.zones
zone "ksyw.com" IN {
#自定义域名
type master;
#服务类型:服务类型可以有三种hint(根区域)、master(主区域)、slave(辅助区域)
file kysw.com.zone";
#域名与IP地址解析规则的保存位置
allow-update { none; };
#允许哪些客户机动态更新解析
}
首先切换到程序用户的家目录下
复制named.localhost文件,改名为区域配置文件中自定义的文件名
注意:
①:named.localhost文件是一个模板文件,是作者写好的文件,我们只需要在里面添加一些数据即可
②:在复制时要保留文件属性和权限,确保named程序用户能够使用该文件,如果不小心没有保留权限,需要使用chown命令修改文件属主
编辑域名配置文件
$TTL 1D #生命周期为1天
@ IN SOA @ rname.invalid. (
#@代表自定义域名kysw.com #internet协议 #初始记录 #域名 #邮箱
0 ; serial #更新序列号,有新版本,改成1 手动更新
1D ; refresh #更新时间
1H ; retry #重试时间
1W ; expire #失效时间
3H ) ; minimum #无效解析的缓存时间
NS @ #域名服务器记录
A 192.168.83.30 #地址记录
www A 192.168.83.20 #地址记录
mail A 192.168.83.40 #地址记录
ky CNAME www #别名记录
# * A 192.168.83..100 #*表示任何主机名都可以解析
~
soa | 初始记录,确定谁是主dns服务器,主从之间的一些设置 |
A | 正向解析记录将域名转化成ip地址 |
NS | 域名服务器 |
PTR | 反向解析将ip转换成域名 |
CNAME | 别名 |
保存退出后进行测试
修改区域配置文件/var/named.rfc1912.zones,添加反向解析
zone "83.168.192.in-addr.arpa" IN { #将地址段反写,加上.in-addr.arpa
type master; #服务类型
file "192.168.83.com.zone"; #地址解析规则文件
allow-update { none; }; #允许客户机动态更新解析信息
修改解析规则
还是一样,复制时保留文件属性。现在来修改文件
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 192.168.83.30
10 PTR www.pla.com. #域名记录 PTR为指针记录,仅用于反向解析
1 PTR mail.pla.com. #1 代表地址为192.168.83.1
#地址后面加上根域(.)
重启服务后进行测试 :systemctl restart named
真实网络环境中一台主服务器往往不能满足所有用户的需求,”从服务器”可以从主服务器上抓取指定的区域数据文件,起到备份解析记录与负载均衡的作用,配置过程大致流程:
1:在主服务器的区域信息文件中允许该从服务器的更新请求,并重新加载配置文件。
2:在从服务器中填写主服务器地址与要抓取的区域信息,并重新加载配置文件
3:在从服务器中查看/var/named/slaves 目录或使用 nslookup 验证试验结果。
准备两台机器。
主:192.168.83.30
从:192.168.83.40
首先将从的DNS解析地址添加到主的网卡配置文件中
修改主服务器的区域配置文件/var/named.rfc1912.zones
systemctl restart named :重启服务让文件生效
从服务器安装bind
必须将主配置文件”/etc/named.conf“中的监听地址与允许查询地址修改为 any,
将本机的DNS解析地址设为自己的IP地址
修改从服务器区域配置文件/var/named.rfc1912.zones
zone "kysw.com" IN {
type slave; #服务类型改为slave,表示是从服务器
masters { 192.168.83.30; }; #指明主DNS服务器的IP地址
file "slaves/kysw.com.zone"; #此为缓存到区域文件后保存的位置和名称
};
zone "83.168.192.in-addr.arpa" IN { #
type slave; #服务类型改为slave,表示是从服务器
masters { 192.168.83.30; }; #指明主DNS服务器IP地址
file "slaves/192.168.83.arpa"; #此为缓存到区域文件后保存的位置和名称
重启服务systemctl restart named,让配置文件生效
重启后会发现,slaves目录下多出两个文件,这两个文件就是从主DNS服务器中缓存下来的文件
下面来验证一下,在从服务上验证
使用dig命令可以看到是谁解析的地址,dig命令在安装bind-utils工具的时候才会生成这个命令
将主的服务器named功能关闭后,从服务器依然可以解析
如果主服务器的DNS解析数据信息发生改变,从服务器无法得知,从服务器的解析地址还是按照旧信息去解析,如果想要同步,需要等到一天以后,因为我们在配置信息的时候refresh(更新时间)为1D(一天)。所以我们需要进行手动更新
注释:每次主服务器解析数据信息文件发生改变后,想要从服务器立即获取新的信息,必须手动向上调整serial数值,可以调整数值为10位数以内的整数。
调整后重启named服务。下面来验证一下结果
假如各地用户都想去访问百度,但网站服务器架设在国内,那么留学生访问起来速度一定很慢,而将服务器架设在国外,那又会让国内用户访问变得很麻烦,于是我们便可以采用分离解析的办法,虽然访问的是相同的网址,但国内用户访问国内服务器,而留学生则直接访问国外服务器。
分离解析:当来自于不同 IP 地址的用户查询相同域名时会为其提供不同的解析结果,大致流程为:
第 1 步:在区域信息文件中填写不同的 Zone 区域信息。
第 2 步:建立独立的区域数据文件。
第 3 步:重新启动named 服务并验证结果
首先要添加一块网卡
修改主配置文件
修改主配置文件”/etc/named.conf“,将监听端口与允许查询主机修改为 any,并将约在54行的根域信息删除掉:
修改区域解析文件
清空该文件所有默认数据,而后添加图中信息
#匹配所有192.168.83.0/24内的IP地址,对应的域名数据文件为zg.com.china
view "china" {
match-clients { 192.168.83.0/24; };
zone "zg.com" IN {
type master;
file "zg.com.china";
allow-update { none; };
};
zone "." IN {
type hint;
file "named.ca";
};
};
#匹配所有10.0.0.0/24 内的IP 地址,对应的域名数据文件为zg.com.wg
view "wg" {
match-clients { 10.0.0.0/24; };
zone "zg.com" IN {
type master;
file "zg.com.wg";
allow-update { none; };
};
zone "." IN {
type hint;
file "named.ca";
};
};
cp -a named.localhost zg.com.china 修改文件
cp -a named.localhost zg.com.wg 修改此文件内容
systemctl restart named :重启服务,使配置文件生效
国内用户使用Linux系统
将国内用户DNS解析地址设置为第一块网卡的地址
国外用户使用windows系统
总结:此章节重点需要掌握
1.DNS解析的作用
2.递归查询与迭代查询的原理
3.DNS解析过程
4.正向解析、反向解析、主从服务、分离解析的步骤