实验环境:
CentOS release 6.6(Final) 两台
IP地址:
父域DNS服务器:
172.16.31.3 DNS1 主DNS服务器端
172.16.31.4 DNS2 从DNS服务器端
子域DNS服务器:
172.16.31.5 主DNS服务器
172.16.31.6 从DNS服务器
父域授权和子域转发实现:
假如我们的公司比较大,且很多部门都有自己的域名,如果只用一台DNS,不仅压力会比较大,最重要的是管理起来很复杂,这个时候我们就要用到子域了。
这里假定我们公司的开发部门;有独立的域名为“ops.oracle.com";并且有自己的独立的web服务器,mail服务器等服务器。
关于子域的建立,过程和正常的DNS建立设定相同,因为前面几篇都介绍的很详细了,这里就不做过多的介绍。
对子域的授权,我们需要在父域的配置文件中添加如下项:
1、授权的子域名称;
2、子域的名称服务器;
3、子域名称服务器的IP地址:
如果域内的客户端请求本地DNS不负责解析的区域,怎么办?一种办法是转发给根,但效率就不好说了;另一种是转发给特定的主机,我们明确知道该主机可以解析该请求,那么就可以大大的提高效率。那么我们就接着上面,说说怎么让开发部的dns也能解析到主dns负责的区域。
要想实现转发,首先是我们转向的主机要允许我们递归(DNS查询请求分为递归和迭代两种,递归是指查询提交后,由dns找到结果返回给我们;迭代是指,查询提交后,返回的结果告诉我们,谁可能找到,我们再向它提交查询,以此类推,直到找到结果),递归可以在全局设定,也可以在特定区域设定,说起来很复杂,但做起来很简单,我们选择设定(转发目标)全局递归。
那现在就能确定我们的需求啦!o(∩_∩)o 哈哈
功能描述
父域:oracle.com.
子域:ops.oracle.com.
实现功能:
1、父域对子域授权。
2、子域主机对父域的解析直接转发给父域。
3、父域主机能够解析子域,子域主机也能够解析父域,而不是找根迭代。
主域服务器的主从DNS服务器设置参考上一篇博客;有详细介绍就不再赘述。
我们只修改一下必须修改的配置:
如上图在父域的主配置文件内添加子域的域名NS记录和A记录:
ops IN NS ns1.ops.oracle.com.ops IN NS ns2.ops.oracle.com.ns1.ops IN A 172.16.31.5ns2.ops IN A 172.16.31.6
注意:修改后serial序列号必须+1哦@@
其他的配置就不用变化哦(*^__^*) 嘻嘻
下面就主要介绍子域的主要配置哦!我这里只是做了个正向区域的授权和转发;因为反向的授权和转发好像很困难的酱紫(*^__^*)
子域的主从DNS服务器的主配置文件就像下面的样子啦,注释掉的都是默认允许所有哦!方便实验;生产环境中就不行了;需要做好各种权限限制的啦!
下图就是子域主DNS服务器的主配置文件的内容:/etc/named.conf
前面的博文已经很详细了,我就不贴了。
区域文件/etc/named.rfc1912.zones就添加如下区域了:
一个正向区域和如果解析父域的话就直接转发给父域去执行解析哦:
zone "ops.oracle.com" IN { type master; file "ops.oracle.com.zone" ;}; zone "oracle.com" IN { type forward; forwarders { 172.16.31.3; }; forward only;};
下面就是子域的正向区域解析库文件啦!o(∩_∩)o 哈哈
/var/named/ops.oracle.com.zone
$TTL 600$ORIGIN ops.oracle.com.@ IN SOA ns1.ops.oracle.com. root.ops.oracle.com. ( 2014121003 ;serial 1D ;refresh 5M ;retry 1W ;expiry 1H) ;minimum@ IN NS ns1.ops.oracle.com. IN NS ns2.ops.oracle.com. IN MX 10 mailns1 IN A 172.16.31.5ns2 IN A 172.16.31.6www IN A 172.16.31.5www IN A 172.16.31.6mail IN A 172.16.31.5
检查配置文件语法:
[root@ops1 ~]# named-checkzoneops.oracle.com /var/named/ops.oracle.com.zonezone ops.oracle.com/IN: loaded serial 2014121003OK[root@ops1 ~]# named-checkconf
可以启动子域的主DNS服务器啦(*^__^*)
[root@ops1 ~]# service named startGenerating /etc/rndc.key: [ OK ]Starting named: [ OK ]
测试一下子域DNS成功与否:
[root@ops1 ~]# dig -t SOA ops.oracle.com@172.16.31.5 ; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t SOA ops.oracle.com@172.16.31.5;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY,status: NOERROR, id: 37623;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1,AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION:;ops.oracle.com. IN SOA ;; ANSWER SECTION:ops.oracle.com. 600 IN SOA ns1.ops.oracle.com. root.ops.oracle.com.2014121003 86400 300 604800 3600 ;; AUTHORITY SECTION:ops.oracle.com. 600 IN NS ns1.ops.oracle.com.ops.oracle.com. 600 IN NS ns2.ops.oracle.com. ;; ADDITIONAL SECTION:ns1.ops.oracle.com. 600 IN A 172.16.31.5ns2.ops.oracle.com. 600 IN A 172.16.31.6 ;; Query time: 0 msec;; SERVER: 172.16.31.5#53(172.16.31.5);; WHEN: Fri Dec 12 13:28:51 2014;; MSG SIZE rcvd: 141
子域从服务器配置:
/etc/named.conf文件直接从子域主服务器上拷贝过来啦!
[root@ops2 ~]# scp root@172.16.31.5:/etc/named.conf/etc/named.conf
区域文件/etc/named.rfc1912.zones只需要配置如下:
zone "ops.oracle.com" IN { type slave; file "slaves/ops.oracle.com.zone"; masters { 172.16.31.5; };};
启动服务后查看日志;是否传输区域解析库文件到子域从服务器:
[root@ops2 ~]# tail -f /var/log/messagesDec 12 12:31:08 ops2 named[26975]: zone1.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:loaded serial 0Dec 12 12:31:08 ops2 named[26975]: zonelocalhost.localdomain/IN: loaded serial 0Dec 12 12:31:08 ops2 named[26975]: zonelocalhost/IN: loaded serial 0Dec 12 12:31:08 ops2 named[26975]:managed-keys-zone ./IN: loaded serial 0Dec 12 12:31:08 ops2 named[26975]: runningDec 12 12:31:08 ops2 named[26975]: zoneops.oracle.com/IN: Transfer started.Dec 12 12:31:08 ops2 named[26975]: transferof 'ops.oracle.com/IN' from 172.16.31.5#53: connected using 172.16.31.6#35469Dec 12 12:31:08 ops2 named[26975]: zoneops.oracle.com/IN: transferred serial 2014121003Dec 12 12:31:08 ops2 named[26975]: transferof 'ops.oracle.com/IN' from 172.16.31.5#53: Transfer completed: 1 messages, 10records, 250 bytes, 0.001 secs (250000 bytes/sec)
区域解析库文件传输完毕:
[root@ops2 named]# ls slaves/ops.oracle.com.zone
我们来测试一下:
从服务器是完全可以查看本区域网络内的所有记录的。
[root@ops2 named]# dig axfr ops.oracle.com@172.16.31.6 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6<<>> axfr ops.oracle.com @172.16.31.6;; global options: +cmdops.oracle.com. 600 IN SOA ns1.ops.oracle.com. root.ops.oracle.com.2014121003 86400 300 604800 3600ops.oracle.com. 600 IN NS ns1.ops.oracle.com.ops.oracle.com. 600 IN NS ns2.ops.oracle.com.ops.oracle.com. 600 IN MX 10 mail.ops.oracle.com.mail.ops.oracle.com. 600 IN A 172.16.31.5ns1.ops.oracle.com. 600 IN A 172.16.31.5ns2.ops.oracle.com. 600 IN A 172.16.31.6www.ops.oracle.com. 600 IN A 172.16.31.5www.ops.oracle.com. 600 IN A 172.16.31.6ops.oracle.com. 600 IN SOA ns1.ops.oracle.com. root.ops.oracle.com.2014121003 86400 300 604800 3600;; Query time: 7 msec;; SERVER: 172.16.31.6#53(172.16.31.6);; WHEN: Fri Dec 12 13:36:04 2014;; XFR size: 10 records (messages 1, bytes250)
我们下面来测试父域授权是否成功:
父域查询www.ops.oracle.com的结果不是权威应答,是交给子域进行查询的:
[root@dns1 named]# dig -t Awww.ops.oracle.com @172.16.31.3 ; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.ops.oracle.com@172.16.31.3;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY,status: NOERROR, id: 37455;; flags: qr rd ra; QUERY: 1, ANSWER: 2,AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION:;www.ops.oracle.com. IN A ;; ANSWER SECTION:www.ops.oracle.com. 600 IN A 172.16.31.6www.ops.oracle.com. 600 IN A 172.16.31.5 ;; AUTHORITY SECTION:ops.oracle.com. 600 IN NS ns2.ops.oracle.com.ops.oracle.com. 600 IN NS ns1.ops.oracle.com. ;; ADDITIONAL SECTION:ns1.ops.oracle.com. 600 IN A 172.16.31.5ns2.ops.oracle.com. 600 IN A 172.16.31.6 ;; Query time: 5 msec;; SERVER: 172.16.31.3#53(172.16.31.3);; WHEN: Fri Dec 12 13:36:48 2014;; MSG SIZE rcvd: 136
区域转发测试:
将我的物理机的DNS设置成子域的DNS服务器地址;
在windows上测试区域转发测试:
从上面的结果可以看出我们去查询父域的www.oracle.comd 的时候子域服务器将其转发给父域查询了,得到的是非权威应答;查询子域的www.ops.oracle.com的时候是直接找子域服务器查询的,是权威应答。
以下实验的环境是新建的环境,跟上面的环境不同:
DNS视图功能实现
众所周知网通和电信之间互相的访问速度是很慢的,但是大型网络公司无论你是在哪用的什么方式接入的网络,访问起来速度都很快,那么是怎么实现的呢!首先想到的会是电信和网通各放一些内容完全相同的服务器,那么怎样才能让电信的用户自己去访问电信的服务器,网通的用户访问网通的服务器呢?就需要DNS高级功能视图来实现了。
DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。
注意:
1.一旦使用view,所有的zone都必须定义在view中;只有允许给其地规定客户端所在的view才有必要定义根区域等;
2.客户端请求到达时,其匹配view是自上而下匹配match-clients中定义的地址范围;第一次被匹配到的为最终生效;
全局定义一个ACL列表intnet
将主配置文件的根区域定义到named.rfc1912.zones
注释根区域
下面是主配置文件:/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package toconfigure the ISC BIND named(8) DNS
// server as a caching only nameserver (asa localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ forexample named configuration files.
//
acl intnet {
172.16.0.0/16;
127.0.0.0/8;
};
options {
// listen-on port 53 { 127.0.0.1; };
// 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 { localhost; };
recursion yes;
// dnssec-enable yes;
// dnssec-validation yes;
// dnssec-lookaside auto;
/* 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";
我们将根区域写进去,然后将里面的所有zone定义到一个视图view中;所有来自intnet的客户端都匹配到这个view中:
[root@bind named]# vim/etc/named.rfc1912.zones// named.rfc1912.zones://// Provided by Red Hat caching-nameserverpackage//// ISC BIND named zone configuration forzones recommended by// RFC 1912 section 4.1 : localhost TLDsand address zones// andhttp://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt// (c)2007 R W Franks//// See /usr/share/doc/bind*/sample/ forexample named configuration files.//view int { match-clients { intnet; }; 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 "oracle.com" IN { type master; file "oracle.com.zone";}; };
上面的view只定义了intnet这个网络的访问请求可以到达的区域,其他网络的访问我们还要设置个视图来匹配;视图是自上而下匹配的,还需要明确定义这个视图内部不允许递归;定义访问的区域是这个视图负责的。
我们定义不同视图的客户端访问本机的区域返回的IP不一致,上面的视图是针对内部网络的请求,返回的ip是内部ip,而来自外部网络的客户端返回的结果是下面视图中定义的区域负责返回结果。
view extend { match-clients { any; }; allow-recursion { none; }; zone "oracle.com" IN { type master; file"oracle.com.ext"; };};
我们还需要定义一个来自外部网络请求的区域解析库文件:
[root@bind named]#cd /var/named[root@bind named]# vim oracle.com.ext$ORIGIN oracle.com.@ IN SOA ns.oracle.com. root.oracle.com. ( 2014121101 ;serial 1D ;refresh 5M ;retry 1W ;expiry 1H) ;minimum@ IN NS ns.oracle.com. IN MX 5 mail.oracle.com.ns IN A 172.16.31.100www IN A 192.168.1.100www IN A 192.168.1.101www1 IN A 192.168.1.100www2 IN A 192.168.1.101mail IN A 192.168.1.100pop3 IN CNAME mailiamp4 IN CNAME mail
进行语法检查,启动服务,查看日志:
[root@bind named]# named-checkconf[root@bind named]# service named restartStopping named: [ OK ]Starting named: [ OK ][root@bind named]# tail /var/log/messagesDec 13 09:27:43 bind named[2193]: zone0.in-addr.arpa/IN/int: loaded serial 0Dec 13 09:27:43 bind named[2193]: zone1.0.0.127.in-addr.arpa/IN/int: loaded serial 0Dec 13 09:27:43 bind named[2193]: zone1.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/int:loaded serial 0Dec 13 09:27:43 bind named[2193]: zoneoracle.com/IN/int: loaded serial 2014121101Dec 13 09:27:43 bind named[2193]: zonelocalhost.localdomain/IN/int: loaded serial 0Dec 13 09:27:43 bind named[2193]: zonelocalhost/IN/int: loaded serial 0Dec 13 09:27:43 bind named[2193]:managed-keys-zone ./IN/int: loaded serial 3Dec 13 09:27:43 bind named[2193]: zoneoracle.com/IN/extend: loaded serial 2014121101Dec 13 09:27:43 bind named[2193]:managed-keys-zone ./IN/extend: loaded serial 3Dec 13 09:27:43 bind named[2193]: running
我们找到一台内部网络的主机来解析一下,得到的结果是来自172.16网段的反馈:
[root@www httpd]# dig -t A www.oracle.com @172.16.31.100 ; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.oracle.com@172.16.31.100;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY,status: NOERROR, id: 30864;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2,AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION:;www.oracle.com. IN A ;; ANSWER SECTION:www.oracle.com. 600 IN A 172.16.31.101www.oracle.com. 600 IN A 172.16.31.100 ;; AUTHORITY SECTION:oracle.com. 600 IN NS ns.oracle.com. ;; ADDITIONAL SECTION:ns.oracle.com. 600 IN A 172.16.31.100 ;; Query time: 2 msec;; SERVER: 172.16.31.100#53(172.16.31.100);; WHEN: Sat Dec 13 09:30:03 2014;; MSG SIZE rcvd: 97
我再从外部网络访问此服务器;如图:
其返回的结果是通过192.168.1.0这个网络返回的:
[root@test ~]# dig =t A www.oracle.com @172.16.31.100; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> =t A www.oracle.com@172.16.31.100;; global options: +cmd;; connection timed out; no servers couldbe reached;; Got answer:;; ->>HEADER<<- opcode: QUERY,status: NOERROR, id: 60969;; flags: qr aa rd; QUERY: 1, ANSWER: 2,AUTHORITY: 1, ADDITIONAL: 1;; WARNING: recursion requested but notavailable ;; QUESTION SECTION:;www.oracle.com. IN A ;; ANSWER SECTION:www.oracle.com. 600 IN A 192.168.1.101www.oracle.com. 600 IN A 192.168.1.100 ;; AUTHORITY SECTION:oracle.com. 600 IN NS ns.oracle.com. ;; ADDITIONAL SECTION:ns.oracle.com. 600 IN A 172.16.31.100 ;; Query time: 5 msec;; SERVER: 172.16.31.100#53(172.16.31.100);; WHEN: Sat Dec 13 09:43:22 2014;; MSG SIZE rcvd: 97
我们可以看出结果哦!完成啦(*^__^*)
到这里基本上DNS服务器的重要特性都介绍完成了!!!有什么错误的地方欢迎指证!!!