概述
互联网访问绝大多数都是基于域名的访问,互联网访问的基础是基于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 区域名称服务或者domain named system 区域名称系统,是互联网最基础的服务,分为正向域名解析(将域名解析为IP地址)和反向域名解析(将IP地址解析为域名)两部分、分别监听在tcp/udp的53号端口上,TCP用来进行区域传送、UDP用来解析请求
2、域名分类:
根域 .
TLD(top level domain顶级域):
组织域:.com、.net、.org、.gov、.mil
国家域:.iq、.tw、.hk、.jp、.cn
二级域:就是在顶级域上个人或组织申请的名称
3、DNS查询过程:
递归查询:
客户端向自己所指定的DNS服务器请求的过程,是递归的,也就是说客户端向服务器请求时,服务器返回的必须是一个明确的结果,要么找到,要么找不到
迭代查询:
是指当客户端请求到达直接指定的DNS服务器后,如果该服务器上没有缓存相关的条目,则需要向根域请求,根域返回给DNS服务器一个顶级域的地址,然后DNS服务器又根据返回的顶级域地址去找,顶级域又返回一个二级域的地址,而后,DNS服务器又向二级域去请求,追踪返回出一个明确的解析结果给DNS服务器,这个DNS一级一级去查找的过程就是迭代查询
4、DNS名称解析方式:
正向解析:
名称 –> IP
正向解析时,给的地址是,如:www.magedu.com.
反向解析:
IP –> 名称
反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.
解析的实际地址是1.2.3.4
注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库
5、DNS服务器类型:
主DNS服务器:
维护所负责解析的域内解析库服务器,解析库由管理维护
辅助DNS服务器:
从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库;
缓存DNS服务器:
可以提高DNS访问速度,对局域网上网实现快速解析
转发器:
全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;
区域转发:仅转发对特定的区域的请求至某服务器;
注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;
6、DNS解析的答案类型:
肯定答案:
有解析出来的结果
否定答案:
不存在查询的键,因此,不存在与其查询的键对应的值
注意:对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长
权威答案:
由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案
非权威答案:
给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案
7、完整的请求过程:
1)客户端一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件
2)如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存
3)如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器发送查询请求,此时的请求是递归请求(recursion请求)
4)DNS服务器收到请求后,如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案
,如果客户端请求的不是自己负责解析的域,则先×××器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端
8、区域传送
全量传送:
axfr,传送整个数据库;一般在从服务器第一次向主服务器同步数据时
增量传送:
lxfr,进传送变化的数据
9、区域资源类型:
资源记录:Resource Record, RR
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
A:internet Address,作用,FQDN --> IP
AAAA: FQDN --> IPv6
PTR: PoinTeR,IP --> FQDN ,完全合格域名
NS: Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX: Mail eXchanger,邮件交换器
10、资源记录定义的格式:
语法:name [TTL] IN rr_type value
(1) TTL可从全局继承;
(2) @可用于引用当前区域的名字;
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;
SOA:
name: 当前区域的名字,例如“magedu.com.”;
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)
序列号:serial
也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步
刷新时间间隔:refresh
从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况
重试时间间隔:retry
当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔
注意:重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔
过期时长:expire
从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务
否定答案的缓存时长:TTL
当结果是明确的无法解析到时,此类否定答案缓存多长时间
11、包与配置文件
1)BIND的安装包:
BIND是dns协议的一种实现
BIND的程序运行时的进程名为named
2)DNS包:
bind 提供DNS服务器端程序,和解析库文件,以及几个常用的测试程序
bind-libs 被bind的主程序和bind-utils包中的程序共同用到的库文件
bind-utils bind客户端程序集,提供了如dig、host、nslookup等工具
bind-chroot 可选装的程序包,让bind程序能运行在一个子shell中,万一bind程序被劫持,不会影响外面的shell的程序
3)相关配置文件
/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文件
12、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服务器
bind程序安装完成后,默认即可作为缓存名称服务器使用,可以让其他客户端将DNS指向该主机,作为其DNS服务器,当该DNS服务器中没有相应的缓存,或不是自己负责解析的区域后,也能够向根域发起迭代的查询请求,从而能够返回给客户端答案
如果安装完成bind后,如果没有专门负责解析的区域,将配置文件中的监听地址由120.0.0.1改为可与外部通信的地址,关闭dnssec功能,然后直接启动服务即可
1、修改配置文件
[root@localhost ~]# vim /etc/named.conf
options { //全局配置段 listen-on port 53 { any; }; //修改为监听所有地址上的53号端口 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; }; //修改为允许来自所有地址的查询请求 recursion yes; dnssec-enable no; //关闭dnssec相关功能 dnssec-validation no; //关闭dnssec相关功能 /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; //关闭dnssec相关功能 // managed-keys-directory "/var/named/dynamic"; //关闭dnssec相关功能 }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
2、重启服务
[root@localhost ~]# service named restart
停止 named:. [确定]
启动 named: [确定]
3、测试
[root@localhost ~]# dig -t A www.magedu.com @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A www.magedu.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1490 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 9 ;; QUESTION SECTION: ;www.magedu.com. IN A ;; ANSWER SECTION: www.magedu.com. 600 IN A 101.200.188.230 ;; AUTHORITY SECTION: magedu.com. 172800 IN NS v2s1.xundns.com. magedu.com. 172800 IN NS v2s2.xundns.com. ;; ADDITIONAL SECTION: v2s1.xundns.com. 172771 IN A 113.17.169.37 v2s1.xundns.com. 172771 IN A 115.238.241.21 v2s1.xundns.com. 172771 IN A 115.238.253.250 v2s1.xundns.com. 172771 IN A 124.232.156.76 v2s1.xundns.com. 172771 IN A 183.57.38.184 v2s2.xundns.com. 172771 IN A 115.238.253.252 v2s2.xundns.com. 172771 IN A 116.10.184.143 v2s2.xundns.com. 172771 IN A 116.10.189.64 v2s2.xundns.com. 172771 IN A 115.238.241.20 ;; Query time: 260 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Oct 18 10:02:58 2016 ;; MSG SIZE rcvd: 237
三、DNS正向解析区域
1、定义区域
[root@localhost ]# vim /etc/named.rfc1912.zones
zone "ops.com." IN { //ops.com是需要定义的正向区域 type master; //master 为主服务器 file "ops.com"; //文件名为/var/named/下的ops.com allow-update { none; }; //不允许自动更新文件 };
2、添加区域解析库
[root@localhost # vim /var/named/ops.com
$TTL 1D ;定义缓存时长为1天 $ORIGIN ops.com. ;没写完的会自动补上该值 @ IN SOA @ ops.qumaiyao.com ( ;@为配置文件里的区域名 0 ; serial 序列号 1D ; refresh 刷新时间 1H ; retry 重试时间 1W ; expire 过期时间 3H ) ; minimum 否定答案的TTL值 IN NS ns1 ;定义NS服务器 IN NS ns2 IN NS ns3 ns1.ops.com. IN A 192.168.122.94 ;定义NS服务器A记录 ns2.ops.com. IN A 192.168.122.95 ns3.ops.com. IN A 192.168.122.96 www IN A 192.168.122.94 ftp IN A 192.168.122.95
3、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
named-checkzone ops.com. /var/named/ops.com
指明区域名称,和区域数据文件的位置
[root@localhost named]# named-checkzone ops.com. /var/named/ops.com
zone ops.com/IN: loaded serial 0
OK
3)设定解析库权限
[root@localhost named]# chown :named /var/named/ops.com
[root@localhost named]# ll /var/named/ops.com
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/ops.com
4、重启并测试
[root@localhost named]# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@localhost named]# dig -t NS ops.com. @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27715 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns3.ops.com. ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns1.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.96 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Oct 18 14:37:52 2016 ;; MSG SIZE rcvd: 127 [root@localhost named]# dig -t A www.ops.com. @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A www.ops.com. @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39277 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.ops.com. IN A ;; ANSWER SECTION: www.ops.com. 86400 IN A 192.168.122.94 ;; AUTHORITY SECTION: ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns3.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.96 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Oct 18 14:37:59 2016 ;; MSG SIZE rcvd: 147 [root@localhost named]# dig -t A ftp.ops.com. @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A ftp.ops.com. @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22681 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;ftp.ops.com. IN A ;; ANSWER SECTION: ftp.ops.com. 86400 IN A 192.168.122.95 ;; AUTHORITY SECTION: ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns3.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.96 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Oct 18 14:38:02 2016 ;; MSG SIZE rcvd: 147
四、DNS反向解析区域
1、定义区域
[root@localhost ]# vim /etc/named.rfc1912.zones
zone "122.168.192.in-addr.arpa" IN { //122.168.192.in-addr.arpa是需要定义的反向区域 type master; //master 为主服务器 file "ops.arpa"; //文件名为/var/named/下的ops.arpa allow-update { none; }; //不允许自动更新文件 };
2、添加区域解析库
[root@localhost] vim ops.arpa
$TTL 1D ;定义缓存时长为1天 $ORIGIN 122.168.192.in-addr.arpa. ;没写完的会自动补上该值 @ IN SOA @ ops.qumaiyao.com ( ;@为配置文件里的区域名 0 ; serial 序列号 1D ; refresh 刷新时间 1H ; retry 重试时间 1W ; expire 过期时间 3H ) ; minimum 否定答案的TTL值 IN NS ns1.ops.com. ;定义NS服务器 IN NS ns2.ops.com. IN NS ns3.ops.com. 94 IN PTR ns1.ops.com. 95 IN PTR ns2.ops.com. 94 IN PTR www.ops.com. ;定义主机的反向解析 95 IN PTR ftp.ops.com.
3、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
指明区域名称,和区域数据文件的位置
[root@localhost ~]# named-checkzone "122.168.192.in-addr.arpa." /var/named/ops.arpa
zone 122.168.192.in-addr.arpa/IN: loaded serial 0
OK
3)设定解析库权限
[root@localhost named]# chown :named /var/named/ops.arpa
[root@localhost named]# ll /var/named/ops.arpa
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/ops.arpa
4、重启并测试
[root@localhost named]# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@localhost ~]# dig -x 192.168.122.94 @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -x 192.168.122.94 @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58057 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;94.122.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 94.122.168.192.in-addr.arpa. 86400 IN PTR ns1.ops.com. 94.122.168.192.in-addr.arpa. 86400 IN PTR www.ops.com. ;; AUTHORITY SECTION: 122.168.192.in-addr.arpa. 86400 IN NS ns3.ops.com. 122.168.192.in-addr.arpa. 86400 IN NS ns2.ops.com. 122.168.192.in-addr.arpa. 86400 IN NS ns1.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.105 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Oct 20 15:34:41 2016 ;; MSG SIZE rcvd: 186
五、主从DNS
主从复制:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低;
注意:主服务器要添加一条到从服务器的NS记录
1、修改从DNS配置文件
[root@localhost ~]# vim /etc/named.conf
options { listen-on port 53 { any; }; //修改为监听所有地址上的53号端口 listen-on-v6 port 53 { ::1; }; 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; }; /修改为允许来自所有地址的查询请求 recursion yes; dnssec-enable no; //关闭dnssec相关功能 dnssec-validation no; //关闭dnssec相关功能 /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; //关闭dnssec相关功能 // managed-keys-directory "/var/named/dynamic"; //关闭dnssec相关功能 }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
[root@localhost~]# vim /etc/named.rfc1912.zones
zone "ops.com." IN { type slave; file "slaves/ops.com"; masters { 192.168.122.94; }; };
2、查看同步过来的文件
[root@localhost ~]# ll /var/named/slaves/ 总用量 4 -rw-r--r-- 1 named named 436 10月 18 15:31 ops.com [root@localhost ~]# cat /var/named/slaves/ops.com $ORIGIN . $TTL 86400 ; 1 day ops.com IN SOA ops.com. ops.qumaiyao.com.ops.com. ( 0 ; serial 86400 ; refresh (1 day) 3600 ; retry (1 hour) 604800 ; expire (1 week) 10800 ; minimum (3 hours) ) NS ns1.ops.com. NS ns2.ops.com. NS ns3.ops.com. $ORIGIN ops.com. ftp A 192.168.122.95 ns1 A 192.168.122.94 ns2 A 192.168.122.95 ns3 A 192.168.122.105 www A 192.168.122.94
3、重启并测试
[root@localhost ~]# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@yaojianju ~]# dig -t NS ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20753 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns3.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.105 ;; Query time: 0 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Tue Oct 18 15:34:17 2016 ;; MSG SIZE rcvd: 127 [root@yaojianju ~]# dig -t A www.ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A www.ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17789 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.ops.com. IN A ;; ANSWER SECTION: www.ops.com. 86400 IN A 192.168.122.94 ;; AUTHORITY SECTION: ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns3.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ns3.ops.com. 86400 IN A 192.168.122.105 ;; Query time: 0 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Tue Oct 18 15:34:37 2016 ;; MSG SIZE rcvd: 147
六、子域授权
在前的ops.com.这个域中,添加一个子域,子域的域名为:ha.ops.com. ,该子域自己内部有自己的DNS服务器
这样在父域的DNS服务器上实现对子域的解析,都交给子域自己去实现,而不是直接利用父域上添加相应的资源记录来实现。
1、修改ops.com.这个域的配置
[root@localhost ~]# vim /var/named/ops.com
$TTL 1D $ORIGIN ops.com. @ IN SOA @ ops.qumaiyao.com ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1 IN NS ns2 ha IN NS ns3 ;定义子域的NS记录 ns1.ops.com. IN A 192.168.122.94 ns2.ops.com. IN A 192.168.122.95 ns3.ops.com. IN A 192.168.122.105 www IN A 192.168.122.94 ftp IN A 192.168.122.95
2、重启服务
[root@localhost ~]# service named restart
停止 named:. [确定]
启动 named: [确定]
3、修改子域配置文件
[root@localhost named]# vim /etc/named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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; }; recursion yes; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "ha.ops.com." IN { type master; file "ha.ops.com"; allow-update { none; }; };
4、添加子域解析库
[root@localhost named]# vim ha.ops.com
$TTL 1D $ORIGIN ha.ops.com. @ IN SOA @ admin.163.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns1 ns1 A 192.168.122.105 www A 192.168.122.105
5、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
named-checkzone ha.ops.com. /var/named/ha.ops.com
指明区域名称,和区域数据文件的位置
root@yaojianju named]# named-checkzone ha.ops.com. /var/named/ha.ops.com
zone ha.ops.com/IN: loaded serial 0
OK
3)设定解析库权限
[root@localhost named]# chown :named /var/named/ha.ops.com
[root@localhost named]# ll /var/named/ha.ops.com
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/ha.ops.com
6、重启并测试
[root@yaojianju named]# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@yaojianju named]# dig -t NS ha.ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ha.ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63910 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;ha.ops.com. IN NS ;; ANSWER SECTION: ha.ops.com. 86400 IN NS ns1.ha.ops.com. ;; ADDITIONAL SECTION: ns1.ha.ops.com. 86400 IN A 192.168.122.105 ;; Query time: 0 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Wed Oct 19 10:08:19 20 [root@yaojianju named]# dig -t A www.ha.ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A www.ha.ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32141 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.ha.ops.com. IN A ;; ANSWER SECTION: www.ha.ops.com. 86400 IN A 192.168.122.105 ;; AUTHORITY SECTION: ha.ops.com. 86400 IN NS ns1.ha.ops.com. ;; ADDITIONAL SECTION: ns1.ha.ops.com. 86400 IN A 192.168.122.105 ;; Query time: 1 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Wed Oct 19 10:08:38 2016 ;; MSG SIZE rcvd: 82
7、父域测试是否能解析
[root@localhost ~]# dig -t NS ha.ops.com. @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ha.ops.com. @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57381 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;ha.ops.com. IN NS ;; ANSWER SECTION: ha.ops.com. 86174 IN NS ns1.ha.ops.com. ;; ADDITIONAL SECTION: ns1.ha.ops.com. 86174 IN A 192.168.122.105 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Oct 19 10:09:26 2016 ;; MSG SIZE rcvd: 62
七、区域转发
在正常情况下,子域是无法直接找到父域内的解析的,因为当子域内的客户端向子域内的DNS服务器,请求解析某地址时,如果该地址不是子域DNS服务器自己负责解析的区域,则子域的DNS服务器会去找根域,然后根域告诉其找顶级域,顶级域告诉其找二级域,这样进行迭代查询。
但是在本实验中,子域内的主机如果要找的是父域的DNS负责解析的地址,则按照上述的工作模式还是要先去找根域,然后一级一级找到父域,然后解析,这样不符合实际需求,此时就需要用到定义转发的概念了
定义转发有两种:
区域转发:表示仅将某特定区域的解析请求进行转发
全局转发:表示只要不是本DNS服务器直接负责解析的区域,都进行转发。相当于针对本地没有通过zone定义的区域查询请求,一律转发到某目标服务器
forward 定义转发的类型,有first和only两种:
first:首先转发,表示当本DNS服务器解析不了时,就转发给目标服务器进行解析,当目标服务器由于不在线或其他原因,不响应时,则当前DNS服务器就自己去找根域,然后一步一步迭代查询
only:只转发,表示当本地DNS服务器解析不了时,不管转发的目标服务器有没有响应,都转发,没响应就一直等着
注意:被转发的服务器,必须允许为当前定义转发的服务器对其做递归查询,默认情况下,是允许给任何人递归的
1、修改子域配置文件
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "ops.com." IN { type forward; forward first; forwarders { 192.168.122.94; }; };
2、重启并测试
[root@localhost named]
# service named restart
停止 named:. [确定]
启动 named: [确定]
[root@yaojianju named]# dig -t NS ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34873 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns1.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ;; Query time: 3 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Wed Oct 19 10:39:29 2016 ;; MSG SIZE rcvd: 93 [root@yaojianju named]# dig -t A www.ops.com. @192.168.122.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t A www.ops.com. @192.168.122.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61597 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.ops.com. IN A ;; ANSWER SECTION: www.ops.com. 86400 IN A 192.168.122.94 ;; AUTHORITY SECTION: ops.com. 86373 IN NS ns2.ops.com. ops.com. 86373 IN NS ns1.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ;; Query time: 3 msec ;; SERVER: 192.168.122.105#53(192.168.122.105) ;; WHEN: Wed Oct 19 10:39:56 2016 ;; MSG SIZE rcvd: 113
注意:
如果定义全局转发,就不需要定义区域的方式进行配置,而是要在主配置文件/etc/named.conf中的全局配置段options中定义
forward only|first ; 根据需要选择是first还是only
forwarders { IP; }; //选择转发的目标服务器地址
八、dns安全相关配置
访问控制列表,可以把一个或多个地址归并为一个命名的集合,随后,通过此名称即可对此集合内的所有主机实现统一调用;
1、定义方式:
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的定义中,表示仅对该区域生效
如果将allow-transfer定义在某个具体的zone中,则可以实现该区域的数据仅向指定的主机传送
3)allow-recursion {};
表示允许哪些主机向当前DNS服务器发起递归查询请求,也就是要求本DNS如果没有解析的内容,本DNS就要一级一级的向根域,顶级域迭代查询的
注意:配置文件中默认有一项 recursion yes;表示允许所有的递归请求,如果要实现只对本地的请求进行递归,则需要将该项注释掉
4)allow-update {};
表示允许动态更新区域数据库文件中的内容(也就是区域的具体各个资源记录的内容);一般情况下,除非使用了DDNS,否则需要定义为allow-update { none; };
ACL控制指令例子
3、修改配置文件
[root@localhost ~]# vim /etc/named.conf
acl mynet { 127.0.0.1; }; options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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 { mynet; }; recursion yes; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
4、重启并测试
[root@localhost ~]# service named restart
停止 named:. [确定]
启动 named: [确定]
使用本地地址无法请求查询
[root@localhost ~]# dig -t NS ops.com. @192.168.122.94 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @192.168.122.94 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 59101 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;ops.com. IN NS ;; Query time: 0 msec ;; SERVER: 192.168.122.94#53(192.168.122.94) ;; WHEN: Wed Oct 19 11:05:25 2016 ;; MSG SIZE rcvd: 25
使用acl里的地址进可以正常请求
[root@localhost ~]# dig -t NS ops.com. @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18067 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns2.ops.com. ops.com. 86400 IN NS ns1.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Oct 19 11:06:19 2016 ;; MSG SIZE rcvd: 93
九、智能DNS(DNS的view)
bind视图的意义是:假设一个主机www.ops.com 这台服务器上有两个IP,一个是内网IP,一个是外网IP,或者一个是联通服务器的IP,一个是电信服务器的IP;那么,我们可以在DNS服务器上定义,当来自内网用户的访问,都解析到内网的IP上,通过外网用户的访问,都解析到外网的IP上。或者来自联通的用户访问,都解析到联通的IP上,来自电信的用户,都解析到电信的IP上,这样就可以实现来自对同一个域名的请求,根据需要,可以解析到不同的IP上
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
每个view用一来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
注意:
(1) 一旦启用了view,所有的zone都只能定义在view中;
(2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;
定义视图:
view VIEW_NAME {
match-clients { };
ZONE1;
ZONE2;
};
1、修改配置文件
[root@localhost named]# vim /etc/named.rfc1912.zones
view a { match-clients { 192.168.122.0/24; }; zone "ops.com." IN { type master; file "ops.com"; allow-update { none; }; }; }; view b { match-clients { 172.16.200.0/24; }; zone "ops.com." IN { type master; file "opsb.com"; allow-update { none; }; }; }; view default { zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "ops.com." IN { type master; file "ops.com"; allow-update { none; }; }; zone "122.168.192.in-addr.arpa" IN { type master; file "ops.arpa"; allow-update { none; }; }; };
2、添加新的解析库
[root@localhost named]# vim /var/named/opsb.com
$TTL 1D $ORIGIN ops.com. @ IN SOA @ ops.qumaiyao.com ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1 IN NS ns2 ns1.ops.com. IN A 172.16.200.100 ns2.ops.com. IN A 172.16.200.200 www IN A 172.16.200.200
3、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)设定解析库权限
[root@localhost named]# chown :named /var/named/opsb.com
[root@localhost named]# ll /var/named/opsb.com
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/opsb.com
4、重启并测试
[root@localhost named]# service named restart
停止 named:. [确定]
启动 named: [确定]
192.168.122.0网段 [root@localhost named]# dig -t NS ops.com. @192.168.122.94 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @192.168.122.94 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61578 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns2.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 192.168.122.94 ns2.ops.com. 86400 IN A 192.168.122.95 ;; Query time: 1 msec ;; SERVER: 192.168.122.94#53(192.168.122.94) ;; WHEN: Wed Oct 19 11:52:40 2016 ;; MSG SIZE rcvd: 93 172.16.200.0网段 [root@localhost named]# dig -t NS ops.com. @172.16.200.100 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS ops.com. @172.16.200.100 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16629 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;ops.com. IN NS ;; ANSWER SECTION: ops.com. 86400 IN NS ns1.ops.com. ops.com. 86400 IN NS ns2.ops.com. ;; ADDITIONAL SECTION: ns1.ops.com. 86400 IN A 172.16.200.100 ns2.ops.com. 86400 IN A 172.16.200.200 ;; Query time: 0 msec ;; SERVER: 172.16.200.100#53(172.16.200.100) ;; WHEN: Wed Oct 19 11:53:16 2016 ;; MSG SIZE rcvd: 93