概述
互联网访问绝大多数都是基于域名的访问,互联网访问的基础是基于IP来实现的,因此,需要有一种将域名解析成IP的机制,让用户在利用域名访问时,自动将域名转换成为对应的IP,这就是DNS的功能,本章将介绍一些DNS相关的内容,具体分为:
1、DNS的基础概念
2、配置DNS作为缓存DNS服务器
3、DNS的正向解析区域
4、DNS的反向解析区域
5、主从DNS实现
6、子域授权
7、区域转发
8、DNS安全相关的配置(ACL及安全配置项)
9、智能DNS(DNS的view)
第一章 DNS的基础概念
1、DNS:Domain Name Service,基于C/S模式的域名解析服务,应用层协议
监听在53/udp,53/tcp端口
TCP用来区域传送
UDP用来解析
2、域名分类
根域 .
TLD(top level domain顶级域):
组织域:.com、.net、.org、.gov、.mil
国家域:.iq、.tw、.hk、.jp、.cn……
二级域:就是在顶级域上个人或组织申请的名称
所谓注册域名实际是在某个顶级域内注册的某个二级域
如:nwc.com.
然后在申请到的域内的建自己的各个子域名
www.nwc.com.
test.nwc.com.
ftp.nwc.com.
….
3、DNS的查找过程:
递归查询:
客户端向自己所指定的DNS服务器请求的过程,是递归的,也就是说客户端向服务器请求时,服务器返回的必须是一个明确的结果,要么找到,要么找不到
迭代查询:
是指当客户端请求到达直接指定的DNS服务器后,如果该服务器上没有缓存相关的条目,则需要向根域请求,根域返回给DNS服务器一个顶级域的地址,然后DNS服务器又根据返回的顶级域地址去找,顶级域又返回一个二级域的地址,而后,DNS服务器又向二级域去请求,追踪返回出一个明确的解析结果给DNS服务器,这个DNS一级一级去查找的过程就是迭代查询
4、DNS的名称解析方式:
名称 –> IP 正向解析
正向解析时,给的地址是,如:www.nwc.com.
IP –> 名称 反向解析
反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.
解析的实际地址是1.2.3.4
注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库
5、DNS服务器的类型:
负责解析至少一个域的服务器
主名称服务器:新增的解析条目只能通过主服务器
辅助名称服务器:可以接受解析请求并响应,但新增的解析条目只能在主服务器上新增。主服务器故障后,从服务器也不向外提供解析服务了
不负责域解析的服务器:缓存名称服务器
6、DNS解析的答案类型:
肯定答案:有解析出来的结果
否定答案:不存在查询的键,因此,不存在与其查询的键对应的值
对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长
权威答案:由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案
非权威答案:给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案
7、DNS一次完整的查询请求所经过的流程:
Client一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件
如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存
如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器(可能是缓存DNS服务器,也可能是负责具体解析的某DNS主名称服务器)发送查询请求,此时的请求是递归请求(recursion请求)
DNS服务器收到请求后,
如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案
如果客户端请求的不是自己负责解析的域,则先找服务器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端
8、主-辅DNS服务器:
主DNS服务器:维护所负责解析的域的数据库的那台服务器;读写操作均可进行
从DNS服务器:从主DNS服务器那里,或其他的从DNS服务器那里同步或复制一份解析库,但是只能进行读操作
复制或同步操作的实施方式:
序列号:serial
也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步
刷新时间间隔:refresh
从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况
重试时间间隔:retry
当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔
故重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔
过期时长:expire
从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务
否定答案的缓存时长:
当结果是明确的无法解析到时,此类否定答案缓存多长时间
主服务器"通知"从服务器随时更新数据
9、区域(zone)和域(domain):区域是物理概念,域是逻辑概念
比如:nwc.com.这个域
FQDN–>IP:
正向解析库和正向解析的功能,就是一个正向解析区域
IP–>FQDN:
反向解析库和反向解析的功能,就是一个反向解析区域
一般而言,一个域分为正向解析区域和反向解析区域,但是单纯的域却不一定比区域大,因为父域的区域,可能就比子域的域要大
10、区域传送:
全量传送:axfr,传送整个数据库;一般在从服务器第一次向主服务器同步数据时
增量传送:lxfr,进传送变化的数据
11、区域数据库文件:主要由资源记录(RR,resource record)组成
常见资源记录类型:A、AAAA、PTR、SOA、NS、CNAME、MX
SOA:start of authority,起始授权记录,一个区域解析库有且只能有一个SOA记录,且必须放在所有资源记录的第一条
NS:name service,域名服务记录,一个区域解析库可以有多个NS记录,一个NS记录表示一台DNS服务器,其中一个为主的,其余的为辅的
A:address,地址记录,也就是从FQDN–>IPv4
AAAA:address,地址记录,从FQDN–>IPv6
CNAME:别名记录
PTR:pointer,主要用于实现IP–>FQDN
MX:mail exchanger,邮件交换器,用于标明域内邮件服务器的地址的记录,MX记录可以有多个,其MX记录有优先级的概念
优先级 0-99,数字越小,优先级越高
12、资源记录的定义格式:
语法:NAME [TTL] IN RR_TYPE VALUE
SOA记录:
NAME:当前区域的名字,例如:nwc.com. 或者如果是反向区域,则 1.168.192.in-addr.arpa.
VALUE:有多部分组成
<1>当前区域的区域名称(也可以使用主DNS服务器名称);
<2>当前区域的管理员的邮箱地址,但地址中不能使用@符号,一般用点号.来替代;
<3>主从服务的协调属性的定义以及否定答案的缓存时长,整个内容要用()括号括起来,每行内容之后可以用;分号表示后面的都是注释信息
完整的SOA记录定义示例:
nwc.com. 86400 IN SOA nwc.com. admin.nwc.com (
2016091801 //代表序列号,不能超过10位
2H //代表从服务器向主服务器同步数据的刷新时间间隔,此处表示2小时
10M //表示联系不上主服务器时,从服务器再次联系主服务器时的间隔时间,10分钟
1W //表示过期时间,也就是服务器始终联系不上主服务器时的最长等待时间,也就是此时间一过,就判定主服务器故障,然后从服务器也停止服务,1周
1D //表示否定答案的缓存时长,1天
)
NS记录:可有多个NS记录,一个NS记录对应一个DNS服务器,每个NS记录应该有一个对应的A记录
NAME:当前区域的区域名称
VALUE:当前区域的某DNS服务器的名字,例如ns1.nwc.com
例如:
nwc.com. 86400 IN NS ns1.nwc.com.
nwc.com. 86400 IN NS ns2.nwc.com.
MX记录:MX记录可以有多个,一个MX记录对应一个邮件服务器,每个记录的VALUE之前应该有一个数字,用于表示其优先级,数字越小,优先级越高。每个MX记录应该有一个对应的A记录
NAME:当前区域的区域名称
VALUE:当前区域某邮件服务器的主机名
例如:
nwc.com. IN MX 5 mail1.nwc.com.
nwc.com. IN MX 20 mail2.nwc.com.
A记录:FQDN–>IPv4
NAME:某FQDN,如:web.nwc.com.
VALUE:某IPv4地址
例如:
web.nwc.com. IN A 1.1.1.1
web.nwc.com. IN A 1.1.1.2
bbs.nwc.com. IN A 1.1.1.2
一个主机名额可以有多个IP,一个IP也可以有多个主机名
*.nwc.com. IN A 10.1.32.1
表示将前面没有单独定义的都解析到10.1.32.1
nwc.com. IN A 10.1.32.1
表示当用户访问域名前不带任何字符时,也即是直接访问nwc.com.时解析到的地址是10.1.32.1
$GENERATE 1-254 server$ IN A 1.1.1.$
表示将server1.nwc.com. 解析的地址为1.1.1.1
server2.nwc.com. 解析的地址为1.1.1.2
server3.nwc.com. 解析为1.1.1.3
….
server254.nwc.com. 解析为1.1.1.254
同理:
$GENERATE 5-20 test$ IN A 1.1.1.2$
表示将test5.nwc.com. 解析的地址为1.1.1.25
test6.nwc.com. 解析的地址为1.1.1.26
test7.nwc.com. 解析为1.1.1.27
….
test20.nwc.com. 解析为1.1.1.220
AAAA记录FQDN–>IPv6地址,定义方式与A记录类似
PTR记录:反向解析记录
NAME:IP地址,有特定格式,IP反过来写,而且要加特定后缀,如:192.168.1.2的记录应该写成2.1.168.192.in-addr.arpa。
VALUE:为FQDN
例如:
2.1.168.192.in-addr.arpa. IN PTR bbs.nwc.com.
CNAME记录:别名记录
NAME:FQDN格式的别名;
VALUE:FQDN格式的正式名称
例如:
web.nwc.com. IN CNAME www.nwc.com.
表示web.nwc.com.是www.nwc.com.的别名
注意:
<1>TTL值可以从全局继承,不用每个记录都单独定义
<2>@可以用来表示当前的区域的名字
<3>相邻的两条记录,其NAME相同时,后面那条记录的NAME可以省略
<4>任何MX、NS等类型的记录的value为一个FQDN,此FQDN应该有一个A记录
13、测试DNS的工具:dig、host、nslookup
dig工具:用于测试DNS系统,因此其不会查询hosts文件
dig -t RR_TYPE NAME @SERVER [QUERY_OPTIONS]
表示测试哪种资源记录类型,NAME表示需要测试的地址或反向测试时的IP,@SERVER表示通过那个DNS服务器进行解析
常见查询选项:
+[no]trace 跟踪或不跟踪解析过程
+[no]recurse 进行递归解析
如果不写@SERVER,则表示通过本机测试
如:
dig -t A www.baidu.com
dig -t A www.nwc.com @10.1.32.11
反向解析:dig -x IP
如:dig -x 119.75.222.17
有正向解析不一定有反向解析的记录
dig命令模拟完全区域传送:
dig -t axfr DOMAIN [@SERVER]
host工具:
host -t A www.baidu.com
表示解析www.baidu.com这个域名的A记录,也就是其对应的IP
host -t NS baidu.com
表示解析baidu.com的NS记录,也就是看baidu.com这个域内,有哪些DNS服务器
host -t MX baidu.com
表示解析baidu.com的MX记录,也就是看baidu.com这个域内,有哪些邮件服务器
host -t PTR 119.75.222.17
表示解析 119.75.222.17这个IP对应的域名是什么
注意,以上使用方式中,可以在命令后面加上SERVER_IP表示利用指定的DNS服务器进行测试,而不是使用本机测试
nslookup工具:
nslookup [-OPTIONS] [NAME] [SERVER]
有两种工作模式,一种是交互式模式,一种是命令行模式,命令行模式与上述的工具类似,交互式则直接在命令行中输入nslookup然后回车即可
交互式模式下的命令:
server IP 表示以指定的IP作为DNS服务器进行查询
set q=RR_TYPE 表示要查询的资源记录类型
NAME 表示查询的名称(各种资源记录类型对应的NAME是不一样的)
14、rndc的使用
rndc是DNS远程管理的工具,默认只监听在本地的127.0.0.1的953端口,只能在本机使用,如果要远程主机上管理,需要在/etc/named.conf配置文件中修改相关的配置选项,不过为了安全考虑,不建议用rndc命令在远程主机上管理,在本地管理即可
rndc status 可显示DNS服务器的状态信息
rndc stats 可显示DNS的统计数据
rndc stop 可停止DNS服务
rndc flush 表示清空DNS服务器的DNS缓存条目
rndc reload 表示重新装载DNS服务的配置文件和区域数据库文件
第二章 配置DNS作为缓存DNS服务器
1、BIND的安装包:
BIND是dns协议的一种实现
BIND的程序运行时的进程名为named
2、BIND的程序包:bind
bind 提供DNS服务器端程序,和解析库文件,以及几个常用的测试程序
bind-libs 被bind的主程序和bind-utils包中的程序共同用到的库文件
bind-utils bind客户端程序集,提供了如dig、host、nslookup等工具
bind-chroot 可选装的程序包,让bind程序能运行在一个子shell中,万一bind程序被劫持,不会影响外面的shell的程序
3、bind安装完成后,生成了许多文件,其中:
/etc/named.conf 是其主配置文件,其内部用include指令包含进来了很多其他的文件,如
/etc/named.rfc1912.zones 区域定义文件
/etc/named.iscdlv.key
/etc/named.root.key
/var/named/ 是区域解析库文件的存放位置,也就是named的工作目录,该目录下文件名一般为ZONE_NAME.zone
/usr/sbin/rndc 是DNS的远程控制工具程序,其工作在tcp/953端口,默认只监听在127.0.0.1的地址,因此仅允许本地使用
注意:
<1>1台DNS服务器可同时为多个区域提供解析
<2>在/etc/named/目录下,必须要有根域的解析库文件,在centos上一般为name.ca
<3>在/etc/named/目录下,还应该有两个区域解析库文件:localhost和127.0.0.1的正向和反向解析的解析库文件,正向为named.localhost、反向为named.loopback文件
bind程序安装完成后,默认即可作为缓存名称服务器使用,可以让其他客户端将DNS指向该主机,作为其DNS服务器,当该DNS服务器中没有相应的缓存,或不是自己负责解析的区域后,也能够向根域发起迭代的查询请求,从而能够返回给客户端答案
如果安装完成bind后,如果没有专门负责解析的区域,将配置文件中的监听地址由120.0.0.1改为可与外部通信的地址,关闭dnssec功能,然后直接启动服务即可
4、主配置文件格式:
全局配置段:
options {
…
}
日志配置段:
logging {
…
}
区域配置段:定义由本机负责解析的区域,或转发的区域
zone {
…
}
可单独定义在/etc/named.rfc1912.zones文件中
注意:
每个配置语句必须以分号;结尾,否则为语法错误
注释的风格为C语言风格,//表示注释单行,/* */表示注释多行
5、修改相关配置
修改全局配置段中的监听地址为可与外部通信的地址:
listen-on port 53;表示监听本机所有地址的53端口
listen-on port 53 { 10.1.32.11; }; 表示监听本机10.1.32.11这个IP的53端口,多个IP用分号间隔,{}两段有空格
学习时,建议关闭dnssec功能:
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询:
注释掉该行,// allow-query { localhost; };
6、检查配置文件语法错误
named-checkconf /etc/name.conf
7、启动服务
centos6 : service named start
centos7 : systemctl start named.service
第三章 DNS的正向解析区域
1、定义区域
在主配置文件中或主配置文件的辅助配置文件中实现;
在配置文件中,利用:
zone "ZONE_NAME" IN { 定义区域名称,就是域名
type master|slave|hint|forward;
指明区域的类型是主|从|根|转发
file "ZONE_NAME.zone";
指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找
};
注意:区域名字即为域名
一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义
vim /etc/named.rfc1912.zones
zone "nwc.com." IN {
type master;
file "nwc.com.zone";
};
区域名最后那个.可以不用加
2、建立区域数据文件(主要记录为A记录或AAAA记录)
在区域数据库存放的位置/var/named/目录下建立区域数据文件
一般数据文件其权限为640,属主为root,属组为named
如:vim /etc/named/nwc.com.zone
$TTL 3600
$ORIGIN nwc.com. 表示当域名没写完整时,自动补上的部分的内容
@ IN SOA nwc.com. dnsadmin.nwc.com (
2016091801
1H
10M
3D
1D
)
//SOA记录中的NAME可以写成域名,也可以写成该区域内的主DNS服务器的主机名,如此处的"nwc.com."可以用"ns1.nwc.com.替代"
IN NS ns1
//前面没写@,是因为两个相邻的记录NAME一样,则后面不用写,后面写ns1是因为利用$ORIGIN定义了之后,会自动补上nwc.com.
IN MX 10 mail1
//表示定义了一个mail1.nwc.com.的邮件服务器,其优先级为10
IN MX 20 mail2
//又定义了一个mail2.nwc.com.的邮件服务器,其优先级为20
ns1 IN A 10.1.32.11
//ns1.nwc.com.的IP地址为10.1.32.11
mail1 IN A 10.1.32.33
//mail1.nwc.com.的IP地址为10.1.32.1
mail2 IN A 10.1.32.55
//mail2.nwc.com.的IP地址为10.1.32.55
www IN A 10.1.32.1
//www.nwc.com.的IP地址为10.1.32.1
www IN A 10.1.32.2
//www.nwc.com.的IP地址为10.1.32.2
web IN CNAME www
//web.nwc.com.是www.nwc.com.的别名
bbs IN A 10.1.32.1
//bbs.nwc.com.的IP为10.1.32.1
修改区域数据文件的属主为root,属组为named,并修改其权限为640
3、检查配置文件语法和区域数据文件语法
named-checkconf /etc/named.conf
named-checkzone nwc.com. /var/named/nwc.com.zone
指明区域名称,和区域数据文件的位置
4、让服务器重载配置文件和区域数据文件即可
用rndc reload命令即可实现
如果是centos7,也可以用:
systemctl reload named.service
5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup
第四章 DNS的反向解析区域
1、定义区域
在主配置文件中或主配置文件的辅助配置文件中实现;
在配置文件中,利用:
zone "ZONE_NAME" IN { 定义区域名称,就是域名
type master|slave|hint|forward;
指明区域的类型是主|从|根|转发
file "ZONE_NAME.zone";
指明区域数据文件,如果不指名文件的目录,则默认会到/var/named/目录下去找
};
注意:反向区域的名字的格式为:
网段地址反写.in-addr.arpa.
如本例为:32.1.10.arpa.
一般不在主配置文件中编辑,而是到其include进来的专门定义区域文件/etc/named.rfc1912.zones中定义
vim /etc/named.rfc1912.zones
zone "32.1.10.arpa." IN {
type master;
file "32.1.10.zone";
};
区域名最后那个.可以不用加
2、定义区域解析库文件:(反向解析库的主要记录为PTR记录)
在区域数据库存放的位置/var/named/目录下建立区域数据文件
一般数据文件其权限为640,属主为root,属组为named
vim /var/named/32.1.10.zone
$TTL 3600
$ORIGIN 32.1.10.in-addr.arpa.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com (
2016091801
1H
10M
3D
12H
)
IN NS ns1.nwc.com.
//域内的NS记录,表示DNS服务器为ns1.nwc.com.
11 IN PTR ns1.nwc.com.
//ns1.nwc.com.的IP为10.1.32.11
1 IN PTR www.nwc.com.
2 IN PTR www.nwc.com.
1 IN PTR bbs.nwc.com.
注意:
反显区域数据文件中补充的是32.1.10.in-addr.arpa.,故其中的域名就不能与正向解析数据文件中写成www,bbs之类的,因为自动补充的不是域名,是网络地址反写的区域名
反向区域文件中不需要MX记录的反向解析,也就是不需要对邮箱服务器进行反向解析
不需要为正向解析区域的别名记录定义反向解析
反向解析也可以有别名记录,只是别名记录的意义是ip到ip,相当于两个IP地址之间的别名
修改该反向解析区域文件的属主为root,属组为named,权限为640
3、检查配置文件语法和区域数据文件语法
named-checkconf /etc/named.conf
named-checkzone 32.1.10.in-addr.arpa /var/named/32.1.10.zone
指明区域名称,和区域数据文件的位置
4、让服务器重载配置文件和区域数据文件即可
用rndc reload命令即可实现
如果是centos7,也可以用:
systemctl reload named.service
5、用rndc status查看DNS服务器的状态,然后利用相关DNS测试工具进行测试dig、host、nslookup
第五章 主从DNS
1、从服务器是区域级别的概念;
如,上述实验中,我们将ns1.nwc.com这台服务器,配置成了nwc.com.这个正向区域解析的主DNS服务器,同时也配置成了32.1.10.in-addr.arpa这个反向解析区域的主DNS服务器,但是我们可以在另外一台服务器上,假设为ns2.nwc.com这台服务器上,只配置其作为正向区域nwc.com.的从DNS服务器,或者只配置其作为反向区域32.1.10.in-addr.arpa的从DNS服务器,这样相当于ns2.nwc.com服务器只作为正向的从服务器,或者反向的从服务器
当然,我们也可以将ns2.nwc.com这台服务器即作为正向区域nwc.com.的从DNS服务器,也作为反向区域32.1.10.in-addr.arpa的从DNS服务器
也可以将ns1.nwc.com这台服务器做为正向区域的主DNS服务器,但是作为反向区域的从DNS服务器,而ns2.nwc.com这台服务器作为反向区域的主DNS服务器,正向区域的从DNS服务器
注意:在主从同步时,区域数据文件的复制可以级联复制
也就是说可以ns1.nwc.com这个服务器作为主服务器,ns2到ns1这台服务器上进行复制区域数据文件,作为ns1的从服务器,而ns3可以在ns2上同步数据文件,ns3作为ns2的从服务器,这样一级一级的级联
2、环境及准备工作
环境:
利用上述实验中的ns1.nwc.com作为主DNS服务器,其地址为10.1.32.11,添加一台ns2.nwc.com作为其从DNS服务器,其地址为10.1.32.22
准备工作:
在ns2上安装bind,然后修改其监听的地址为10.1.32.22
关掉dnssec的相关功能
关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };
3、在从服务器上定义一个区域,其区域类型为slave
在/etc/named.rfc1912.zones中定义:
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters {MASTER_IP;}
};
区域数据文件不用手动建立,因为从服务器会自动的从主服务器去同步数据文件
注意:此处file 指定区域文件的路径要放在/var/named/目录下的slaves目录下的原因是:因为named进程是以named这个用户的身份运行,而named用户针对/var/named/这个目录的权限为r-x,也就是没有写权限,因此当从服务器从主服务器那边同步过来的数据文件,要写入该目录时,是无法完成的。但是在/var/named/这个目录下,专门建了一个目录为slaves,而named用户对这个目录是有写权限的,故区域数据文件放在该目录下,则可以完成同步的操作
例如:
vim /etc/named.rfc1912.zones
zone "nwc.com." IN {
type slave ;
file "slaves/nwc.com.slave.zone" ;
masters { 10.1.32.11 ; };
};
4、在从服务器上,检测配置文件语法检查:named-checkconfig
5、在从服务器上,启动服务service named start或重载配置
用rndc reload命令即可实现
如果是centos7,也可以用:
systemctl reload named.service
6、在主服务器上,确保区域数据文件中为每一个从服务器配置了NS记录,且有对应的A记录
如,在本例中,我们需要在主服务器的区域数据文件/etc/named/nwc.com.zone中加上一个NS记录和对应的A记录:
@ IN NS ns2.nwc.com.
ns2.nwc.com. IN A 10.1.32.22
注意:在配置了主从的结构中,从服务器已经启动,当我们手动修改了主服务器的区域配置文件后,要将其序列号人为的加1,否则从服务器无法通过判断主服务器的序列号来进行同步
7、如何让一部分客户端用主DNS服务器解析请求,一部分客户端利用从DNS服务器解析请求
在不同的客户端上匹配不同的DNS服务器,一部分执行主DNS服务器地址,一部分指向从DNS服务器
8、如果想让ns2作为ns1上的反向解析区域的从服务器,步骤根上述类似,现在从服务器上定义一个区域,指明区域类型为slave,指明区域文件路径,指明master为哪个服务器
然后在主服务器上的反向区域的区域数据文件中增加一个NS记录,指向到ns2上,添加对应的PTR记录
<1>在从服务器上,添加区域:
vim /etc/named.rfc1912.zones
zone "32.1.10.in-addr.arpa" IN {
type slave ;
file "slaves/32.1.10.zone"
masters { 10.1.32.11 ; };
};
<2>在主服务器上的反向解析的区域数据文件中增加NS记录和PTR记录
vim /var/named/32.1.10.zone
增加:
@ IN NS ns2.nwc.com.
22 IN PTR ns2.nwc.com.
注意修改其序列号+1
检查主服务器配置文件,区域配置文件语法:
named-checkconf /etc/named.conf
named-checkzone 32.1.10.in-addr.arpa /var/named/32.1.10.zone
指明区域名称,和区域数据文件的位置
重载配置文件:
rndc reload
<3>检查从服务器匹配文件语法:named-checkconf
<4>重载从服务器配置文件:rndc reload
<5>在从服务器上利用dig、host、nslookup进行测试
9、如果从服务器的区域数据文件没有从主服务器上正常同步过来,则可以利用dig -t axfr nwc.com. @10.1.32.11测试区域传送,表示从主服务器10.1.32.11上完全传送 nwc.com.这个区域数据文件到本机
10、注意:主从服务器的时间要同步,ntpdate命令
第六章 子域授权
假设,在我们之前的nwc.com.这个域中,我们希望建一个子域,子域的域名为:ops.nwc.com.,该子域自己内部有自己的DNS服务器,而针对nwc.com.这个父域有我们之前建的两个DNS服务器,也就是上述实验中建的一主一从DNS服务器
如果在父域的DNS服务器上实现,将对子域的解析,都交给子域自己去实现,而不是直接利用父域上添加相应的资源记录来实现。
环境:
在之前实验的基础上,添加对子域的授权,假设子域为 ops.nwc.com. 子域内的DNS服务器为ns1.ops.nwc.com这台服务器,服务器地址为10.1.32.111,子域的ns1的从DNS服务器ns2.ops.nwc.com,其地址为:10.1.32.222
1、在父域的主DNS服务器上,编辑其区域数据文件,添加对子域的授权NS记录和A记录:
vim /var/named/nwc.com.zone
加入:
ops.nwc.com. IN NS ns1.ops.nwc.com.
ops.nwc.com. IN NS ns2.ops.nwc.com.
ns1.ops.nwc.com. IN A 10.1.32.111
ns2.ops.nwc.com. IN A 10.1.32.222
注意:父域的DNS服务器由于有从服务器,且从服务器已经在工作,故修改完配置文件后,要将其序列号+1
检查配置文件和区域数据文件的语法:
named-checkconfig
named-checkzone nwc.com. /var/named/nwc.com
重载配置文件:rndc reload
在各个顶级域如.com域内,实际上也是用类似的方法授权子域的
2、在子域的主DNS服务器ns1.ops.nwc.com这台服务器上配置:
<1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能
关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };
<2>添加区域的定义:
vim /etc/named.rfc1912.zones
加上:
zone "ops.nwc.com" IN {
type master ;
file "ops.nwc.com";
};
<3>添加区域数据文件:
vim /var/named/ops.nwc.com.zone
$TTL 3600
$ORIGIN ops.nwc.com.
@ IN SOA ns1.ops.nwc.com. dnsadmin.ops.nwc.com. (
2016091801
1H
10M
1D
2H
)
IN NS ns1
IN NS ns2
IN MX 10 mail1
ns1 IN A 10.1.32.111
ns2 IN A 10.1.32.222
www IN A 10.1.32.100
web IN CNAME www
mail1 IN A 10.1.32.100
mail2 IN A 10.1.32.200
修改区域文件的属主为root,属组为named,权限为640
<4>检查配置文件和区域数据文件语法:
named-checkconfig
named-checkzone ops.nwc.com /var/named/ops.nwc.com.zone
<5>启动服务,或重载配置文件rndc reload
3、定义子域的从DNS服务器
在子域的从DNS服务器上:
<1>安装bind程序,修改监听的地址为10.1.32.111,关闭dnssec功能
关闭仅允许本地查询:注释掉该行,// allow-query { localhost; };
<2>添加区域的定义:
vim /etc/named.rfc1912.zones
加上:
zone "ops.nwc.com" IN {
type slave ;
file "slaves/ops.nwc.com"
master { 10.1.32.111 ; };
};
<3>检查配置文件语法:
named-checkconfig
<4>启动服务,或重载配置文件rndc reload
第七章 区域转发
在正常情况下,子域是无法直接找到父域内的解析的,因为当子域内的客户端向子域内的DNS服务器,请求解析某地址时,如果该地址不是子域DNS服务器自己负责解析的区域,则子域的DNS服务器会去找根域,然后根域告诉其找顶级域,顶级域告诉其找二级域,这样进行迭代查询。
但是在本实验中,子域内的主机如果要找的是父域的DNS负责解析的地址,则按照上述的工作模式还是要先去找根域,然后一级一级找到父域,然后解析,这样不符合实际需求,此时就需要用到定义转发的概念了
定义转发有两种:
<1>区域转发:表示仅将某特定区域的解析请求进行转发
<2>全局转发:表示只要不是本DNS服务器直接负责解析的区域,都进行转发。相当于针对本地没有通过zone定义的区域查询请求,一律转发到某目标服务器
注意:被转发的服务器,必须允许为当前定义转发的服务器对其做递归查询,默认情况下,是允许给任何人递归的
1、如何定义某区域转发:
要在区域定义文件中/etc/named.rfc1912.zones中定义一个区域:区域类型为forward
zone "ZONE_NAME" IN {
type forward ;
forward first|only ;
forwarders { SERVER_IP ; };
};
区域类型为forward
forward 定义转发的类型,有first和only两种
first:首先转发,表示当本DNS服务器解析不了时,就转发给目标服务器进行解析,当目标服务器由于不在线或其他原因,不响应时,则当前DNS服务器就自己去找根域,然后一步一步迭代查询
only:只转发,表示当本地DNS服务器解析不了时,不管转发的目标服务器有没有响应,都转发,没响应就一直等着
forwarders 定义转发给谁,转发的目标服务器的IP(注意:转发的目标服务器必须要允许本服务器对其发起递归查询请求,默认都是允许的)
如,在上述实验中,希望子域在解析请求时,先去找父域(父域的主DNS服务器IP为10.1.32.11,父域的从DNS服务器IP为10.1.32.22),如果父域没响应时,则子域自己去找根域,然后迭代查询,则可以如下定义:
在子域的主DNS服务器ns1.ops.nwc.com服务器上进行:
vim /etc/named.rfc1912.zones
加入:
zone "nwc.com" IN {
type forward ;
forward first ;
forwarders { 10.1.32.11 ; 10.1.32.22 ; };
};
在实验环境中,可以将forward类型为only,因为没有外网环境,无法找到根域
因为父域有主从两个DNS服务器,两个DNS服务器都能解析请求,故此处可以定义转发的目标服务器为两个
配置完成后检查配置文件语法:
named-checkconfig
重载配置文件:rndc reload
2、如何定义全局转发
假设我们在子域上定义,凡是不是子域DNS服务器直接负责解析的,就都转到父域的DNS服务器上
如果定义全局转发,就不需要定义区域的方式进行配置,而是要在主配置文件中的全局配置段options中定义
在子域的ns1.ops.nwc.com这台服务器上:
vim /etc/named.conf
在options段中加入:
forward only|first ;
//根据需要选择是first还是only
forwarders { 10.1.32.11; 10.1.32.22; };
//选择转发的目标服务器地址
这样定义之后,表示只要不是自己负责的区域,则都转交给10.1.32.11或10.1.32.22的DNS服务器(注意:前提是目标服务器要允许本机对其发起DNS的递归查询请求,默认是允许的)
配置完成后检查配置文件语法:
named-checkconfig
重载配置文件:rndc reload
第八章 DNS安全相关的配置
1、acl :
访问控制列表,可以把一个或多个地址归并为一个命名的集合,随后,通过此名称即可对此集合内的所有主机实现统一调用;
定义方式:
acl ACL_NAME {
IP ;
NET_ADDR/MASK ;
};
如:
acl mynet {
10.1.32.0/24;
127.0.0.0/8;
};
注意:
定义acl的语句,要放在bind主配置文件/etc/named.conf文件最前面,不能放在某个具体配置段中间
acl只能先定义,后使用
bind有4个内置的acl:
none 表示没有一个主机
any 表示所有任意的主机
local 表示本机上的所有IP地址
loaclnet 表示本机IP所在的网络的网络内的所有主机
2、可以调用acl的访问控制指令
<1>allow-query { };
表示允许查询的主机,也就是只允许哪些主机对本机的DNS发起查询请求,括号内填入acl名称,如果不指定该指令,则默认允许所有的主机进行查询
此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效
<2>allow-transfer {};
表示允许向哪些主机做区域传送,默认为向所有主机;为了加强安全性,应该配置为仅允许向自己服务器的从服务器做区域传送
此指令可以加在options中,表示对全局生效,也可以加在某个zone的定义中,表示仅对该区域生效
如:
vim /etc/named.conf
加入:
acl slaves {
10.1.32.22;
127.0.0.1;
};
定义一个acl叫slaves,其内部的主机为10.1.32.22
然后在options中加入:
allow-transfer { slaves; };
表示所有的区域数据,仅允许对10.1.32.22这个主机进行区域传送
如果将allow-transfer定义在某个具体的zone中,则可以实现该区域的数据仅向指定的主机传送
<3>allow-recursion {};
表示允许哪些主机向当前DNS服务器发起递归查询请求,也就是要求本DNS如果没有解析的内容,本DNS就要一级一级的向根域,顶级域迭代查询的
如:实现本DNS服务器允许本地的主机对其发起递归查询请求
配置acl,定义本地网络:
vim /etc/named.conf
加入:
acl mynet {
10.1.32.0/24;
127.0.0.0/8;
};
在options配置段中加入:
allow-recursion { mynet ; };
注意:配置文件中默认有一项 recursion yes;表示允许所有的递归请求,如果要实现只对本地的请求进行递归,则需要将该项注释掉
<4>allow-update {};
表示允许动态更新区域数据库文件中的内容(也就是区域的具体各个资源记录的内容);一般情况下,除非使用了DDNS,否则需要定义为allow-update { none; };
第九章 智能DNS(view)
1、bind view bind视图,也就是智能解析
bind视图的意义是:假设一个主机www.nwc.com这台服务器上有两个IP,一个是内网IP,一个是外网IP,或者一个是联通服务器的IP,一个是电信服务器的IP;那么,我们可以在DNS服务器上定义,当来自内网用户的访问,都解析到内网的IP上,通过外网用户的访问,都解析到外网的IP上。或者来自联通的用户访问,都解析到联通的IP上,来自电信的用户,都解析到电信的IP上,这样就可以实现来自对同一个域名的请求,根据需要,可以解析到不同的IP上
定义视图:
view VIEW_NAME {
ZONE1;
ZONE2;
};
2、示例
假设nwc.com.域内有一个主机为www.nwc.com,其有两个IP地址,一个面向外网,172.16.32.1,一个面向内网,10.1.32.1
实现将来自10.1.32.0/24这个网络的主机访问www.nwc.com时,解析到10.1.32.1上
实现将来自172.16.32.0/24这个完了的主机访问www.nwc.com时,解析到172.1.32.1上
DNS服务器为ns1.nwc.com,IP为10.1.32.11
<1>在DNS服务器上定义区域(要将区域定义在view中)
vim /etc/named.rfc1912.zones
加入:
view inside {
match-client {
10.1.32.0/24;
};
//表示匹配请求的来源的IP地址,可以是acl定义的地址
zone "nwc.com" IN {
type master;
file "nwc.com.inside.zone"
};
};
view outside {
match-client {
172.16.32.0/24;
};
//表示匹配的来源的IP地址,可以是acl定义的地址
zone "nwc.com" IN {
type master;
file "nwc.com.outside.zone"
};
};
<2>配置区域数据文件,将不同的请求解析到不同的IP上
vim /var/named/nwc.com.inside.zone
$TTL 3600
$ORIGIN nwc.com.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com. (
2016091801
1H
10M
1D
1D
)
IN NS ns1
ns1 IN A 10.1.32.11
www IN A 10.1.32.1
vim /var/named/nwc.com.outside.zone
$TTL 3600
$ORIGIN nwc.com.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com. (
2016091801
1H
10M
1D
1D
)
IN NS ns1
ns1 IN A 172.16.32.11
www IN A 172.16.32.1
view的实现过程实际就是将区域定义在view内部,然后view匹配不同的请求来源地址,然后指向不同的区域数据文件,各个区域数据文件中解析的内容不一样来实现
原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/49376