目录
一.DNS的作用和类型
二.BIND的安装和配置
三.使用BIND构建域名服务器
一.DNS的作用和类型
(一).概述
DNS域名系统(Domain Name System缩写DNS,Domain,Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。全球互联网中枢顶级域名服务器的分布俗称"母服务器",准确的说法是世界上有13个根服务器系统。其实全球至少有1000多台根服务器,北京有3台。另外,在这13个根服务器系统之上,还有一个更高级的、隐藏着的母服务器。全世界所有的顶级域名,都是由这台母服务器来确定的。全球1000多台根服务器上的解析系统都是这台母服务器的复制,这13个根服务器系统由12家机构管理,分布在全球100多个地区。所以每一个编号的根服务器系统,不是一台机器,而是有几十台或上百台服务器。
(二).DNS的作用
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名
DNS系统的分布式数据结构
(二).DNS使用的协议和端口号
DNS的默认端口为53。DNS端口 分为TCP和UDP.
1.TCP是用来做区域传送,多用于主从同步
在--个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DN服务器则从区的主DNS服务器中读取该区的DNS数据信息
2.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
的结尾使用。域名不区分大小,由最顶层到下层,可以分成:根域、顶级域、二级域、子域
即全域名:同时带有主机名和域名的名称。
FQDN = Hostname + DomainName
如: www. baidu. com.
注意:最前面的一定是主机,最后一个点表示根域,通常是省略不写的,但实际上www. abc .com=www. abc. com.
域名结构: .
http://www.sina.com. cn./
http://主机名,子域,二级域,顶级域 根域/
(三).DNS系统类型
缓存域名服务器
也称为DNS高速缓存服务器
通过向其他域名服务器查询获得域名-> IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度
(四).DNS域名解析的基本过程
正向解析查询过程:
1.先查本机的缓存记录
2.查询hosts文件
3.查询dns域名服务器,交给dns域名服务器处理
以上过程成为递归查询:我垂一个答案你直接会给我结果
4.这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
5.求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
6.求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
7.求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
8.本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
windows系统查询dns缓存命令: ipconfig /displaydns
windows系统清理dns级存命令: ipconfig /flushdns
linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts
两种查询方式
(1)递归查询
递归查询是一-种DNS服务器的查询模式,在该模式下DNS
服务器接收到客户机请求,必须使用--个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
总的一句话,就是客户机发送请求后自己只用等待结果即可,中间具体过程交给服务器实现。
(2)迭代查询
DNS服务器另外--种查询方式为迭代查询,当客户机发送查询请求时,DNS
服务器并不直接回复查询结果,而是告诉客户机另一台DNS服务器地址,客户机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止
总的一句话,客户机的请求需要自己挨个去查询才能得到结果,服务器没有结果时候只会给你提供其它服务器的地址,而不会帮你去请求查询,这与递归截然相反
从递归和迭代查询可以看出:
客户端-本地DNS服务器: 这部分属于递归查询
本地DNS服务端---外网:这部分属于迭代查询
递归查询时,返回的结果只有两种:查询成功或查询失败
迭代查询又称作重指引,返回的是最佳的查询点或者主机地址。
(五).DNS系统类型
1.主域名服务器:负贵维护--个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
2.从域名服务器:当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
3.缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它子以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
4.转发域名服务器:负贵所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果.
二.BIND的安装和配置文件
(一).BIND的下载
BIND的软件包如下
bind-9.9.4-37.el7.x86_64.rpm //提供了域名服务的主要程序及相关文件。
bind-utils-9.9.4-37.el7.x86_64.rpm // 提供了对 DNS 服务器的测试工具程序,如 nslookup 等
bind-libs-9.9.4-37.el7.x86_64.rpm //提供了 bind、bind-utils 需要使用的库函数。
bind-chroot-9.9.4-37.el7.x86_64.rpm // 为 BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹 作为 BIND 服务的根目录),以提高安全性。
默认已安装 bind-utils 和 bind-libs,因此只需要安装 bind 和 bind-chroot 即可
(二).BIND主配置文件
named.conf
[root@localhost ~]# rpm -qc bind //#查询bind软件配置文件所在路径
/etc/logrotate.d/named //主配置文件 控制系统全局
/etc/named.rfc1912.zones //区域配置文件 控制具体单个区域
/var/named/named.localhost //区域数据配置文件 区域信息
安装bind软件包
yum install bind -y (必须网络源或光盘挂载) 或rpm -ivh 前提挂载光盘(系统盘ISO镜像)
修改主要配置文件
vim /etc/named.conf
options {
listen-on port 53 { 192.168.80.10; }; ●监听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代表所有
}
zone "." IN {#正向解析“."根区域
type hint;#类型为根区域
file "named.ca";#区域数据文件为named.ca,#记录了13台根域服务器的域名和IP地址等信息
};
include "/etc/named. rfc1912. zones"; #包含区域配置文件里的所有配
修改:
修改区域配置文件,添加正向区域配置
vim /etc/named. rfc1912. zones
#文件里有模版,可复制粘贴后修改
zone "benet.com" IN {●正向解析"benet.com"区域
type master;#类型为主区域
file "benet.com.zone"; ●指定区域数据文件为benet.com.zone
allow-update { none; } ;
};
配置正向区域数据文件
cd /var/ named/
cp -p named.localhost benet.com.zone #保留源文件的权限和属主的属性复制
vim /var/named/benet.com.zone
$TTL 1D #有效解析记录的生存周期
@ in SOA benet.com. admin.benet.com. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS benet.com. #记录当前区域的DNS服务器的名称
A 192.168.80.10 #记录主机IP地址
IN MX 10 mail.benet.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.80.10 #记录正向解析www.benet.com对应的IP
mail IN A 192.168.80.11 #MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 192.168.80.100 #泛域名解析,“*"代表任意主机名
#“@”这里是一个变量,当前DNS区域名
#SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与
本地区域数据中的序列号相同,则不会进行下载。
# "benet.com. "此为完全合格域名(FQDN) ,后面有个“."不能漏掉
#“admin.benet.com.”表示管理员邮箱,这里的“@”符号已有其他含义,所以用“.”代替
#IN 表示internet
启动服务,关闭防火墙
systemctl start named
systemctl stop firewalld
setenforce 0
#如果服务启动失败,可以查看日志文件来排查错误
tail -f /var/log/messages
#如果服务启动卡住,可以执行下面命令解决
rndc-confgen -r /dev/urandom -a
#对域名语法进行检查(named.conf)
named-checkconf -z /etc/named.conf
(6)在客户端的域名解析配置文件中添加DNS服务器地址
vi /etc/resolv .conf
#修改完后立即生效
nameserver 192.168.80.10
或
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#修改完后需要重启网卡
DNS1=192.168.80.10
systemctl restart network
(7)测试DNS解析
host
www.benet.com
nslookup www.benet.com
ext file
lenath:11.599 lines:231
Ln:121 Co
三.使用BIND构建域名服务器
(一).正向解析
正向解析查询过程:
先查本机的缓存记录
查询hosts文件
查询dns域名服务器,交给dns域名服务器处理
以上过程成为递归查询:我要一个答案你直接会给我结果
这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
windows系统查询dns缓存命令: ipconfig /displaydnswindows
系统清理dns缓存命令: ipconfig /flushdns
linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts
(二).反向解析
vim /etc/named.rfc1912.zones
192.168.126.30反向则是126.168.192
zone "126.168.192.in-addr.arpa"IN{
type master;
file "benet.com.zone.local";
指定反向解析的数据文件,也可以跟正向解析的数据文件相同
allow-update { none; };
) ;
cd /var/ named/
cp -p benet.com. zone benet.com. zone .local
Vim /var/named/benet.com.zone.local
$TTL 1D#有效解析记录的生存周期,默认单位为秒
IN SOA benet.com, admin.benet.com.
0 :serial
更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步
1D: refresh
1H: retry
1W; expire
3H ); minimum#无效解析记录的生存周期
NS benet.com.
A 192.168.126.30
30 IN PTR www . benet.com.
31 IN PTR mail.benet. com..
30是192.168.126.30的意思
PTR反向指针功能:反向解析
重新加载
systemctl restart named
rndc reload也可以重载配置文件
客户端验证
(三).主从解析
实验环境:
主服务器:192.168.10.20
从服务器:192.168.10.21
配置主服务器192.168.10.20
vim /etc/named.conf
listen-on port 53{} 中值为any
allow-query{}中值改为any
vim /etc/named.rfc1912.zone
zone "benet.com" IN {
type master; //类型为主区域
file "benet.com.zone";
allow-transfer { 192.168.10.21; }; //设置从服务器地址
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "benet.com.zone.local";
allow-transfer{ 192.168.10.21; };
};
配置从服务器192.168.10.21
yum install -y bind
vim /etc/named.conf
options {
listen-on port 53 { 192.168.10.21; }; ●监听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 { any; }; ● 允许使用本DNS解析服务的网段,也可用any代表所有
}
修改从域名服务器区域配置文件,添加正、反区域配置
vim /etc/named.rfc1912.zone
zone "benet.com" IN {
type slave; //类型为从区域
file "slaves/benet.com.zone"; //下载的区域数据文件保存到slaves/目录下
masters { 192.168.10.20; }; //设置主服务器地址
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
file "benet.com.zone.local";
masters { 192.168.10.20; };
###主、从都重启动服务,并查看区域数据文件是否已下载成功
systemctl restart named
ls -1 /var/named/slaves/
#####在客户端的域名解析配置文件中添加从DNs服务器地址
echo "nameserver 192.168.10.21" >> /etc/ resolv.conf
####测试
host 192.168.10.20
nslookup 192.168.10.21
#停止主服务器的服务,模拟主服务器故障