前言
BIND域名服务基础
域名服务 Bind
在日常生活中人们习惯使用域名访问服务器,但机器间互相只认IP地址,域名写IP地址之间是多对一的关系,一个ip地址不一定只对应一个域名,且一个完整域名只可以对应一个ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的
DNS的定义
域名管理系统DNS(Domain Name System)是域名解析服务器的意思,应用层协议,是互联网的一项服务。它在互联网的作用是:把域名转换成网络可以识别的ip地址,在通过IP地址访问主机。 种由文字组成的名称,显而易见要更容易记忆
DNS系统的作用
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名
DNS系统的分布式数据结构
域名结构
http:// www. sina. com .cn ./
http://主机名.子域.二级域.顶级域 根域/
树状结构最顶层称为根域,用“.”表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机
根域:
位于域名空间最顶层,一般用一个“.” 表示
顶级域:
一般代表—种类型的组织机构或国家地区
如. net (网络供应商)、.com(工商 企业)、.org (团体组织)、.edu (教育机构)、.gov (政府部门)、.cn(中国国家域名)
二级域:
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理
如.cn 顶级域名下面设置的二级域名: .com.cn、.net.cn、.edu.cn
子域:
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机:
主机位于域名空间最下层,就是一台具体的计算机
如www、mail都是具体的计算机名字,可用www.sina.com.cn.、 mail.sina.com.cn. 来表示,这种表示方式称为FQDN(完全合格域名),也是这台主机在域名中的全名
DNS服务器类型
主域名服务器:负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件
从域名服务器:当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源
转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果
DNS 查询方式
DNS查询方式分为 “ 递归查询 ” 和 “ 迭代查询 ”
递归查询
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后, 若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结 果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手)
迭代查询
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对 方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起 进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需 要发起多次查询。(需要自己动手)
DNS正向解析查询过程
- 先查本机的缓存记录
- 查询hosts文件
- 查询DNS域名服务器,交给dns域名服务器处理
以上过程成为递归查询:我要一个答案你直接会给我结果 - 这个DNS服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
- 求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
- 求助顶级域服务器,顶级域服务器返回可能会知道结果的而基于服务器然他去找二级域服务器
- 求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的 ip 地址返回给本地域名服务器
- 本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
windows系统查询dns缓存命令:ipconfig /displaydns
windows系统清理dns缓存命令:ipconfig /flushdns
linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts
使用BIND构建域名服务器
BIND 的安装及配置文件
BIND(Berkeley Internet Name Daemon)
- BIND 是应用最广泛的DNS服务程序
- 官方站点:https://www.isc.org/
- 相关软件包
bind-9.9.4-37.el7.x86_64.rpm
bind-utils-9.9.4-37.el7.x86_64.rpm
bind-libs-9.9.4-37.el7.x86_64.rpm
bind-chroot-9.9.4-37.el7.x86_64.rpm
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 bind 前提挂载光盘(系统盘ISO镜像)
DNS 正向解析
修改主要配置文件
vim /etc/named.conf
##进入配置文件
options {
listen-on port 53 { 192.168.128.10; };
##监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有
1isten-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代表所有
.....
}
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.126.10 ###记录主机IP地址
IN MX 10 mail.benet.com. ###MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.126.10 ###记录正向解析www.benet.com对应的IP
mail IN A 192.168.126.11 ###MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www ###CNAME使用别名,ftp 是www的别名
- IN A 192.168.126.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-checkconf -z /etc/named.conf
##对域名语法进行检查(named.conf)
在客户端的域名解析配置文件中添加DNS服务器地址
vi /etc/resolv .conf ###修改完后立即生效
nameserver 192.168.126.10
或
vi /etc/sysconfig/network-scripts/ifcfg-ens33 ###修改完后需要重启网卡
DNS1=192.168.126.10
systemctl restart network
测试DNS解析
[root@localhost named]# host www.benet.com
[root@localhost named]# nslookup www.benet.com
DNS 反向解析
修改区域配置文件,添加反向区域配置
vim /etc/named.rfc1912.zones
zone "10.168.192.in-addr.arpa" IN {
##192.168.126.0 反向则是 126.168.192
type master;
file "benet.com.zone.local";
##指定反向解析的数据文件,也可以跟正向解析的数据文件相同
allow-update { none; };
};
配置反向区域数据文件
cd /var/named/
cp -p benet.com.zone benet.com.zone.local
vim benet.com.zone.local
$TTL 1D ###有效解析记录的生存周期,默认单位为秒
@ IN SOA benet.com. admin.benet.com. ( ###SOA标记、域名和管理员邮箱,@变量表示域名
0 ; serial ###更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步
1D ; refresh ###刷新时间
1H ; retry ###重试刷新时间间隔
1W ; expire ###失效时间,超过该时间则放弃
3H ) ; minimum ###无效解析记录的生存周期
NS benet.com.
A 192.168.126.20
110 IN PTR www.benet.com.
120 IN PTR mail.benet.com.
### 20是192.168.126.20的意思
### RTP反向指针 功能:反向解析
重载配置文件
systemctl restart named
反向解析出域名
host 192.168.126.120
###会反向解析出域名www.benet.com
host 192.168.126.110
DNS 主从服务器及自动同步
主服务器:192.168.126.10
从服务器:192.168.126.128
yum install -y bind ###安装bind
配置主服务器
192.168.126.10
主配置文件
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.126.128; }; ###设置从服务器地址
};
zone "126.168.192.in-addr.arpa" IN {
type master;
file "benet.com.zone.local";
allow-transfer{ 192.168.126.128; };
};
配置正向区域数据文件
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.126.10 ###记录主机IP地址
IN MX 10 mail.benet.com. ###MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.126.10 ###记录正向解析www.benet.com对应的IP
mail IN A 192.168.126.11 ###MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www ###CNAME使用别名,ftp 是www的别名
* IN A 192.168.126.100 ###泛域名解析,“*"代表任意主机名
配置从服务器
192.168.126.128
yum install -y bind ###安装bind
主配置文件
vim /etc/named.conf
options {
listen-on port 53 { 192.168.126.128; }; ###监听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.126.10; }; ###设置主服务器地址
};
zone "126.168.192.in-addr.arpa" IN {
type slave;
file "slaves/benet.com.zone.local";
masters { 192.168.126.10; };
};
主、从都重启动服务,并查看区域数据文件是否已下载成功
systemctl restart named
host 192.168.126.10
nslookup 192.168.126.128
DNS 分离解析
主服务器:192.168.126.10 网卡vmnet1 192.168.126.10
Web服务器:10.0.0.100 网卡vmnet2 10.0.0.100
为网关服务器配置双网卡
在关机状态下再添加一块网卡,重启系统
ens33 192.168.80.10
ifconfig ens37 10.0.0.100/24
ifconfig
安装bind软件包
yum install -y bind
修改主配置文件
vim /etc/named.conf
options {
listen-on port 53 { any; }; ###监听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代表所有
}
include "/etc/named. rfc1912. zones";
修改区域配置文件
vim /etc/named.rfc1912.zones
view "lan" { ###定义内网view,view代表容器分割
match-clients { 192.168.126.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 { any; } ; ###匹配除了内网网段以外的任意地址
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 named.localhost benet.com.zone.wan
vim benet.com.zone.lan
$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.126.10 #记录主机IP地址
www IN A 192.168.126.10 #记录正向解析www.benet.com对应的IP
vim benet.com.zone.wan
$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 10.0.0.100 #记录主机IP地址
www IN A 10.0.0.100 #记录正向解析www.benet.com对应的IP
启动服务,进行测试
systemctl start named
###在内、外网客户端的域名解析配置文件中添加DNS服务器地址
echo "nameserver 192.168.126.10" >> /etc/resolv.conf ###内网客户端
echo "nameserver 10.0.0.100" >> /etc/resolv.conf ###外网客户端
在内、外网客户端上测试
nslookup www.benet.com
总结
■DNS系统的作用与常见类型
■BIND服务相关软件及其作用
■BIND服务的主配置文件与区域数据文件中重要配置项
■构建缓存域名服务器
■构建主域名服务器
■构建从域名服务器