实现DNS视图view

从Bind 9开始,bind支持视图功能。什么是视图呢?就是以某种特殊的方式根据用户来源的不同而返回不同的查询结果。比如同样是访问www.baidu.com,DNS返送给电信用户和联通用户的IP地址是不一样的,这样既可以达到分流效果,也提高了用户的访问速度,在CDN中应用较广泛。

需要注意的是:

(1)、如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。

(2)、在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。

(3)、视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。

(4)、如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。

因此,实现DNS试图view步骤:

(1):修改配置文件named.conf,,定义相应的acl和view

(2):创建每个view的zone对于的RR文件

                (3):重启DNS服务后测试

下面来进行模拟实验:

规划:10.1.19.5的这个用户访问www.magedu.com的IP地址是1.1.1.1

      10.1.19.6的这个用户访问www.magedu.com的IP地址是2.2.2.2(我的机器少只能模拟两个主机,这里写上网段也可以)

说明,这里仅实验最简单的view,只实现正向查询,并没有包括根和反向查询,想添加直接写上相应的内容即可

编辑named.conf文件,创建相应的acl和view:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[15:56 [email protected]/var/named]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
acl Anet {
10.1.19.5;
};
acl Bnet {
10.1.19.6;
};
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 yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file  "/etc/named.iscdlv.key" ;
managed-keys-directory  "/var/named/dynamic" ;
};
view Anet {
match-clients { Anet; };
zone  "magedu.com"  IN {
type master;
file  "Anet.magedu.com.zone" ;
};
};
view Bnet {
match-clients { Bnet;  };
zone  "magedu.com"  IN {
type master;
file  "Bnet.magedu.com.zone" ;
};
};
view Default {
match-clients {any;};
zone  "magedu.com"  IN {
type master;
file  "Bnet.nihao.com.zone" ;
};
};

创建每个view的zone对于的RR文件

[root@centos7-1 named]# cat Anet.magedu.com Bnet.magedu.com 
$TTL 6400 
@ IN SOA ns1.magedu.com. admin.magedu.com. (
	2016110601
	1H
	20M
	1D
	10H)
@ IN NS ns1.magedu.com.
ns1 IN A 10.1.19.1
www IN A 1.1.1.1

$TTL 6400 
@ IN SOA ns1.magedu.com. admin.magedu.com. (
	2016110601
	1H
	20M
	1D
	10H)
@ IN NS ns1.magedu.com.
ns1 IN A 10.1.19.1
www IN A 2.2.2.2

测试效果:

  同样是访问www.magedu.com 返回的结果不一样

[root@centos7-2 named]# dig -t A www.magedu.com @10.1.19.1

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.magedu.com @10.1.19.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25680
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		6400	IN	A	1.1.1.1

;; AUTHORITY SECTION:
magedu.com.		6400	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		6400	IN	A	10.1.19.1

;; Query time: 1 msec
;; SERVER: 10.1.19.1#53(10.1.19.1)
;; WHEN: Sun Nov 06 15:54:47 CST 2016
[root@centos7-3 ~]# dig -t A www.magedu.com @10.1.19.1

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.magedu.com @10.1.19.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41419
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		6400	IN	A	2.2.2.2

;; AUTHORITY SECTION:
magedu.com.		6400	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		6400	IN	A	10.1.19.1

;; Query time: 2 msec
;; SERVER: 10.1.19.1#53(10.1.19.1)
;; WHEN: Sun Nov 06 15:55:00 CST 2