一、DNS解析的定义与作用
1.定义
DNS(Domain Name System,域名系统)是互联网中的一种分布式数据库系统,它用于将域名(例如 www.example.com)转换为对应的IP地址(例如 192.0.2.1),以便于计算机网络设备进行通信和数据传输。DNS是互联网基础设施的重要组成部分,其主要作用是提供域名与IP地址之间的映射服务,使用户能够通过便于记忆的域名访问到全球范围内的网络资源
DNS通过层级结构和分布式的设计,包含了多种类型的服务器和解析器,如递归DNS服务器、授权DNS服务器、缓存DNS服务器等,以确保域名解析的高效性、可靠性和快速响应
2.作用
主要作用:
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名
(1)域名转换:
最基本的作用是将域名转换为对应的IP地址。这使得用户可以通过简单易记的域名来访问互联网上的各种服务和资源,而不需要记住复杂的数字地址
(2)全球唯一性:
DNS确保了全球范围内每个域名都具有唯一的IP地址。即使一个域名在不同地区的访问者之间可能指向不同的服务器,DNS也确保它们在各自区域内解析到正确的IP地址
(3)负载均衡:
DNS可以通过将同一个域名解析成不同的!P地址,实现负载均衡。这意味着请求可以分散到多个服务器上,以提高服务的稳定性和性能
(4)故障转移:
在服务器出现故障时,DNS可以通过更新IP地址来实现流量的自动重定向到备用服务器,从而实现故障转移和持续的服务可用性
(5)电子邮件路由:
DNS不仅用于网站访问,还用于电子邮件系统中的邮件路由。它能够将电子邮件地址中的域名转换为邮件服务器的实际IP地址,确保邮件能够正确传送到目标收件人的邮箱服务器上
(6)安全性:
DNS还可以通过DNSSEC(DNS Security Extensions)来提供域名验证和数据完整性保护,防止DNS劫持和其他安全威胁总之,DNS解析是互联网基础设施中不可或缺的一部分,它使得互联网上的各种服务能够通过简单的域名进行访问,为用户提供了便利和高效性
二、DNS使用的协议及端口号
DNS(Domain Name System)使用两种主要的协议:UDP(User Datagram Protocol)和TCP(Transmission Control Protocol),同时它们使用不同的端口号
(1)UDP协议:大多数DNS查询和响应都使用UDP协议。UDP协议在传输数据时不保证数据包的顺序和可靠性,但它速度快,适合用于DNS查询这种轻量级的数据交换
端口号:DNS的UDP端口号是53(无论是查询还是响应都使用这个端口号)(2)TCP协议:DNS也可以使用TCP协议,通常用于大数据量的传输或者一些特殊情况下,比如DNS响应超过512字节时(因为UDP有时会被截断)
端口号:DNS的TCP端口号同样是53。DNS在TCP上的通信通常是在UDP无法满足要求时使用,如传输较大的响应数据或者特殊的DNS查询情况总结:
1.大多数情况下,DNS查询和响应都使用UDP协议,端口号是53
2.TCP协议在特定情况下用于DNS,也使用端口号53,但通常不是首选,因为UDP更高效UDP用于DNS解析
TCP用于主从同步
三、域名体系结构
DNS服务协议采用类似目录树的层次结构记录域名与IP地址的映射对应关系,形成一个分布式的数据库系统:DNS 结构模型
域名空间的树状图:
域名组成图:
由高向低进行层次划分,可分为以下几大类:
分类作用根域名服务器最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助顶级域名服务器负责管理在该顶级域名服务器下注册的二级域名权限域名服务器负责一个区的域名解析工作本地域名服务器当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器
四、查询方式
1. 递归查询
递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机
总的来说:就是客户机发送请求后自己只用等待结果即可,中间具体过程交给服务器实现
例子:当你在浏览器中输入一个网址时,你的计算机的DNS客户端会向本地DNS服务器发送一个递归查询请求,以获取该域名对应的IP地址
2.迭代查询
DNS服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止
总的来说:客户机的请求需要自己挨个去查询才能得到结果,服务器没有结果时候只会给你提供其它服务器的地址,而不会帮你去请求查询,这与递归截然相反
3.总结
从递归和迭代查询可以看出:
客户端-本地DNS服务器:这部分属于递归查询
本地DNS服务端----外网:这部分属于迭代查询
递归查询时,返回的结果只有两种:查询成功或查询失败
迭代查询又称作重指引,返回的是最佳的查询点或者主机地址
五、DNS域名解析过程
假定某客户机想获知域名为xxx.xyk.com主机的IP地址,域名解析的过程(共使用8个UDP报文)如下:
①客户机向其本地域名服务器发出DNS请求报文
②本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求
③根域名服务器收到请求后,判断该域名属于.com域,将对应的顶级域名服务器dns.com的IP地址返回给本地域名服务器
④本地域名服务器向顶级域名服务器dns.com发出解析请求报文⑤顶级域名服务器dns.com收到请求后,判断该域名属于xyk.com域,因此将对应的授权域名服务器dns.xyk.com的IP地址返回给本地域名服务器
⑥本地域名服务器向授权域名服务器dns.xyk.com发起解析请求报文
⑦授权域名服务器dns.xyk.com收到请求后,将查询结果返回给本地域名服务器
⑧本地域名服务器将查询结果保存到本地缓存,同时返回给客户机
六、DNS系统类型
缓存域名服务器:
(1)也称为DNS高速缓存服务器
(2)通过向其他域名服务器查询获得域名 ->IP地址记录
(3)将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器:
(1)特定DNS区域的权威服务器,具有唯一性
(2)负责维护该区域内所有域名->IP地址的映射记录
(3)需要自行建立所负责区域的地址数据文件
从域名服务器:
(1)也称为辅助域名服务器,是对主域名服务器的热备份
(2)其维护的域名->IP地址记录来源于主域名服务器
(3)需要从主域名服务器自动同步区域地址数据库
转发域名服务器:
负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果
七、搭建DNS解析服务器
1.BIND软件安装
BIND(Berkeley Internet Name Daemon)
(1)BIND是应用最广泛的DNS服务程序
(2)官方站点:https://www.isc.org相关软件包
ebind-9.9.4-37.el7.x86 64.rpm #提供了域名服务的主要程序及相关文件
ebind-utils-9.9.4-37.el7.x86 64.rpm #提供了对 DNS 服务器的测试工具程序,如nslookup等
ebind-libs-9.9.4-37.el7.x86 64.rpm #提供了bind、bind-utils需要使用的库函数
ebind-chroot-9.9.4-37.el7.x86 64.rpm#为BIND服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND服务的根目录),以提高安全性
默认已安装 bind-utils 和 bind-libs,因此只需要安装 bind 和 bind-chroot 即可
yum install -y bind*
2.BIND服务
BIND服务器端程序
主要执行程序:/usr/sbin/named
默认监听端口:53
主配置文件
/etc/named.conf
保存DNS解析记录的数据文件位于
/var/named/
BIND服务控制
systemctl [statusstart|stoprestart] named.service
TCP是用来做区域传送,多用于主从同步
在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息UDP是用来做DNS解析的
域名:通常由一个完全合格域名(FQDN)标识。FQDN全称 Fully Qualified Domain Name ,它能准确表示出其相对于DNS域树根的位置, 也就是节点到DNS树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS域google来说,其完全正式域名(FQDN)为google.com例如,google 为 com 域的子域,其表示方法为 google.com,而 www 为 google 域中的子域, 可以使用www.google.com. 表示
注意:通常,FQDN 有严格的命名限制,长度不能超过 256 字节,只允许使用字符 a-z,0-9,A-Z 和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者 FQDN 的结尾使用。域名不区分大小,由最顶层到下层,可以分成:根域、顶级域、二级域、子域
www.87bok.com hexo
即全域名:同时带有主机名和域名的名称 www fzx.baidu.com
FQDN = Hostname + DomainName
如:www.baidu.com.
注意:最前面的一定是主机,最后一个点表示根域,通常是省略不写的,但实际上www.abc.com=www.abc.com.
域名结构:
http://www.sina.com.cn./
http://主机名.子域.二级域.顶级域 根域/
3.主配置文件named.conf
全局配置部分
(1)设置DNS服务器的全局参数
(2)包括监听地址和端口、区域数据文件存放的目录等
(3)使用options{.…};的配置段
修改主要配置文件
vim /etc/named.conf
options {
listen-on port 53 { 172.16.58.120; };#监听53端口,ip地址使用提供服务的本地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; };#允许使用本DNS解析服务的网段,也可用any代表所有
}
4.修改区域配置文件
cp -p named.localhost benet.com.zone
#文件里有模版,可复制粘贴后修改
正向解析配置
vim benet.com.zone
vim /etc/named.rfc1912.zones
反向解析配置
cp -p benet.com.zone benet.com.zone.local
vim /etc/named.rfc1912.zones
启动服务,关闭防火墙
systemctl start named
systemctl stop firewalld
setenforce 0
在客户端的域名解析配置文件中添加DNS服务器地址
vim /etc/resolv.conf
或
vim /etc/sysconfig/network-scripts/ifcfg-ens33
5.正反解析验证
6.DNS主从服务器及自动同步
主配置文件
vim /etc/named.conf
listen-on port 53{} 中值为any
allow-query{}中值改为any
区域配置文件
vim /etc/named.rfc1912.zones
zone "benet.com" IN {
type master; #类型为主区域
file "benet.com.zone";
allow-transfer { 172.16.58.130; }; #设置从服务器地址
};zone "58.16.192.in-addr.arpa" IN {
type master;
file "benet.com.zone.local";
allow-transfer{ 172.16.58.130; };
};
配置正向区域数据文件
cd /var/named/
cp -p name.localhost benet.com.zone
vim /var/named/benet.com.zone
配置从域名服务器主配置文件以及区域配置文件并添加正反区域配置
vim /etc/named.conf
vim /etc/named.rfc1912.zones
zone "benet.com" IN {
type slave; #类型为从区域
file "slaves/benet.com.zone"; #下载的区域数据文件保存到slaves/目录下
masters { 172.16.58.120; }; #设置主服务器地址 172.16.58.120
};zone "58.16.172.in-addr.arpa" IN {
type slave;
file "slaves/benet.com.zone.local";
masters { 172.16.58.120; };
vim /etc/named.resolv.conf
修改2个nameserver
关闭防火墙 systemctl stop firewalld
重启服务 systemctl restart named
开始验证:
主、从都重启动服务,并查看区域数据文件是否已下载成功
ls /var/named/slaves
停止主服务器的服务,模拟主服务器故障
7.DNS分离解析
实验准备:
1台Linux和2台Windows
安装bind软件包
yum install -y bind*因为只用了一台Linux所以额外添加一个网段进行配置
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
每个人的网络接口不同,先ip a查看一下
修改主配置文件
vim /etc/named.conf
修改区域配置文件
vim /etc/named.rfc1912.zones
view "lan" { #定义内网view,view代表容器分割
match-clients { 172.16.58.0/24; } ; #匹配内网网段
zone "benet.com" IN { #设置要解析的区域
type master;
file "benet.com.zone.lan"; #数据配置文件
};zone "." IN { #可将根域配置从主配置文件剪切过来,dd+p
type hint; #hint是根区域类型
file "named.ca";
};};
view "wan" { #定义外网view .
match-clients { 10.0.0.0/24; } ; #匹配除了内网网段以外的任意地址
zone "benet.com" IN {
type master;
file "benet.com.zone.wan";
};
};
#注意:一旦启用view,所有的zone必须都在view下,所以要把系统默认的自检用的zone也放在view下或者删除
修改区域数据配置文件
cd /var/named
cp -p named.localhost benet.com.zone.lan
cp -p benet.com.zone.lan benet.com.zone.wan
vim benet.com.zone.lan
vim benet.com.zone.wan
启动服务
systemctl start named在内、外网客户端的域名解析配置文件中添加DNS服务器地址
echo "nameserver 172.16.58.120" >> /etc/resolv.conf #内网客户端echo "nameserver 10.0.0.100" >> /etc/resolv.conf #外网客户端
在内、外网客户端上测试
nslookup www.benet.com
在2台windows上进行测试
nslookup www.benet.com
版权归原作者 单字叶 所有, 如有侵权,请联系我们删除。