DNS是互联网上的一项服务,担任域名和IP地址相互映射的一个分布式数据库,相较于IP,域名更便于记忆能够使人更方便的访问互联网。但是计算机只能基于IP来识别对方,而且要上网或通过网络传输数据,也是基于IP地址完成。
用户输入域名或IP地址,服务器查找与域名或IP地址相匹配的IP地址或域名,从而去打开我们想要访问的网站。域名解析主要分为正向解析和反向解析。正向解析就是将域名解析成IP地址,反向解析就是将IP地址解析成域名,通常用的最多的是正向域名解析
(1).edu 教育机构域名后缀
(2).pub 公共大众域名后缀
(3).cn 中国国家顶级域名后缀
(4).org 非盈利组织域名后缀
(5).com 商业组织域名后缀
(6).gov 政府部门域名后缀
(7).net 网络服务商域名后缀
负责接收解析器发送过来的DNS解析请求,通过依次查询根域名服务器、顶级域名服务器、耳机域名服务器来获得DNS条目,然后把相应结果发送给解析器,根据DNS条目的TTL进行缓存,多用于企业局域网内部、运营商等领域
接受解析器发送过来的DNS请求,转发给指定的上级域名服务器获得DNS解析条目,然后把响应结果发送给解析器,不缓存,仅仅是转发。
根域名服务器:是最高层次也是最重要的域名服务器,负责对(.com,.cn等顶级域名向下授权)所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址,从根本上保证了域名解析服务。一般情况下域名服务器并不直接把待查询的域名直接解析出结果返回给用户,会引导本地域名服务器找一个服务器进行查询。
顶级域名服务器:管理在该顶级域名服务器成功注册的二级域名,收到DNS查询时可以立即返回结果。
二级域名服务器:服务于具体域名解析
主要作用是负责管理“区”的域名服务器。权限不能无查询结果返回时,就会引导用户下一步该寻找哪一个域名服务器。
本地域名服务器对域名系统非常重要。用户发出DNS查询请求时,这个查询请求报文就会先发送给本地域名服务器进行解析。
DNS采用分布式数据结构来存放数据信息。
用户发起查询请求后必须向用户返回一个结果,如果此服务器没有结果则会询问查找其他服务器再返回结果,客户端和本地DNS服务器之间是递归查询。开启递归查询等同于将DNS服务器开放,造成大量数据流量流入流出。
用户发起查询请求后不直接返回结果,而是引导你到其他服务器上查询,用户再次向其他服务器发起请求,直到查询到结果。DNS服务器之间使用的是迭代查询。
(1)用户输入域名发起域名查询请求。
(2)计算机操作系统先查找本地hosts文件中是否有这个域名与IP的对应关系,有就返回结果给用户,没有就进入下一步。
(3)hosts文件找那个没有此域名与IP的对应关系,前往查找本地DNS解析器中的缓存,有就返回结果,没有就下一步。
(4)查找TCP/IP传输设置的首选DNS服务器(本地DNS服务器)查找到有就返回,没有就进入下一步。本地DNS服务器解析的结果具有较强权威。
(5)根据本地DNS服务器是否设置转发
转发模式下本地DNS服务器把查询请求发往上一级DNS服务器,把任务交给上一级服务器,如果这一级仍然无法解析就将请求再往上一级发或者直接发送给根域名服务器直到查找到结果返回给本地DNS服务器,本地DNS服务器再把结果返回给用户。
不转发模式下本地DNS服务器就将请求直接发送给根域名服务器,根域名服务器先判断是否有哪一级域名该管理此域名,并将管理该域名的服务器的IP返回给本地DNS服务器,本地DNS服务器按照IP地址向该服务器发送查询请求,如果它无法查到结果又将一个同域但低一级的域名服务器IP给本地DNS服务器,重复操作直到查到结果由本地DNS返回结果给用户。
提供DNS服务的软件叫bind,服务名是named。
提供DNS服务的软件叫bind,服务名是named。
[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
[root@localhost ~]# vim /etc/named.conf
options {
#定义监听端口,如果所有地址都监听,则只写端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
#定义数据文件目录
directory "/var/named";
#只允许本地主机进行查询
allow-query { localhost; };
};
#定义区域
zone "." IN {
type hint;
file "named.ca";
};
[root@localhost ~]# yum install -y bind
[root@localhost ~]# systemctl start named
[root@localhost ~]# systemctl enable named
www.xx.com——分配一个真实ip
dns.xx.com——分配一个真实ip
dhcp.xx.com——可以选择分配虚拟地址
nfs.xx.com——可以选择分配虚拟地址
ntp.xx.com——可以选择分配虚拟地址
修改监听的服务器的地址为真实地址
[root@localhost ~]# vim /etc/named.conf
listen-on port 53 { 192.168.119.130; };
directory "/var/named";
};
zone "baidu.com" IN {
type master;
file "named.baidu.com";
};
(1)在/var/named/下vim一个“.zone”结尾的区域文件
(2) 目前里面内容为空,格式有点不好把控,可以使用cp命令去将本地数据配置文件拷贝到本文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -a named.localhost named.baidu.zone
//-a可以将组合权限等一起复制
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
(3) 进行配置
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.119.130
mail IN A 192.168.119.130
www IN A 192.168.119.130
ftp IN CNAME www
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl disable firewalld --now
SOA主要是与区域有关,所以domain要写域名。而SOA后面会接七个参数,这七个参数的意义如下:
Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思。
管理员的Email,发生问题可以联系这个管理员。由于@在数据库文件中有特殊含义,所以将用“.”代替@
序号(Serial),这个序号代表的是这个数数据库文件的新旧,序号越大代表越新。所以当你更改了数据库内容时,需要将这个数值放大。
更新频率(Refresh)定义slave多久向Master要求数据更新。
失败重新尝试时间(Retry),如果Slave无法对Master实现连接,那么在多长时间内,Slave会尝试重新连接到Master。
失效时间(Expire),如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续尝试连接,并且尝试删除这份下载的zone file信息。
缓存时间(Minumum TTL),如果这个数据库zone file中,每条记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。
时间单位:M(分钟),H(小时),D(天),W(周),默认是秒
6.进行测试
(1)Linux上测试,另外开一台虚拟机使用host,dig,nslookup、ping命令进行测试。
只需要在区域文件书写处新添加区域文件即可
[root@localhost ~]# vim /etc/named.conf
zone "119.168.192.in-addr.arpa" IN {
//倒着写你服务器ip所在网段,最后一位0可以省略,后缀需要加上.in-addr-arpa
type master;
file "119.168.192.zone";
};
在/var/named/目录下vim一个119.168.192.zone 文件
PRT表示反向解析
[root@localhost ~]# vim /var/named/119.168.192.zone
//基本格式和正向解析相同
$TTL 1D
@ IN SOA dns.lll.com. test.163.com (
0
1D
1H
1W
3H
)
IN NS dns.ssll.com.
//将域名与IP指向反过来书写,这里的因为都属于是同一网段只需要写末尾一位
160 IN PTR dns.lll.com
161 IN PTR mail.lll.com
160 IN PTR www.lll.com
xx IN PTR ftp
xx IN PTR dhcp
xx IN PTR ntp
[root@localhost ~]# systemctl restart named
nslookup 被解析的ip (主服务服务器ip)
[root@localhost named]# nslookup 192.168.119.10
** server can't find 10.119.168.192.in-addr.arpa: NXDOMAIN
[root@localhost named]# nslookup 192.168.119.160
160.119.168.192.in-addr.arpa name = dns.lll.com.119.168.192.in-addr.arpa.