BIND简易教程(2):BIND视图配置

目录:
BIND简易教程(1):安装及基本配置
BIND简易教程(2):BIND视图配置(本篇)
BIND简易教程(3):DNSSec配置html

 

上文书说到,咱们把aaa.apple.tree解析到192.168.4.100。那么世界上任何一我的在请求aaa.apple.tree的时候,解析到的都是这个IP地址,以后,再访问这个域名(固然这个IP地址只是实验的,并且我域名也没注册,除了我内网以外,世界上任何一我的都访问不到)。那么问题来了,两我的一个在电信,一个在联通,都想访问这个域名的话,个人服务器要放在哪一个运营商更好呢?毕竟,“世界上最遥远的距离,不是你在我面前我却不认识你,而是你在电信,我在联通”。那么可不能够这样,我如今提供两台服务器,一台放在电信,一台放在联通,而后,让电信的用户查询 aaa.apple.tree的时候,解析到电信的服务器上去,联通的用户查询aaa.apple.tree的时候,解析到联通的服务器上去?答案是,能够的。这就是我今天要讲的BIND的高级功能:视图查询。

配置视图,主要须要三个步骤:ubuntu

  1. 收集IP地址的集合。例如我如今有3个IP地址的集合,让每一个集合能访问到不一样的地址,即,某个集合中的一个ip在查询的时候,提供一个解析结果,另外一个集合中的另外一个ip查询的时候,提供另外一个结果;
  2. 给每一个IP集合提供一个视图。这个视图中要写清楚是哪一个集合,能请求到哪一个域。
  3. 给每一个视图的每一个域提供一个解析文件。

下面,咱们假设192.168.4.x这个网段是电信的,192.168.1.x这个网段是联通的,对比配置一下视图。
先写IP集合:
电信地址集合:dianxin.acl服务器

acl “dianxin” {
    192.168.4.0/24;
};

联通地址集合:liantong.aclapp

acl “liantong” {
    192.168.1.0/24;
};

 

再写视图:
电信视图:dianxin.view测试

include "/etc/bind/views/acls/dianxin.acl";
view "dianxin" {
    match-clients { "dianxin"; };
    zone "apple.tree" IN {
        type master;
        file "/etc/bind/views/zones/dianxin.apple.tree.zone";
    };
};

联通视图:liantong.viewspa

include "/etc/bind/views/acls/liantong.acl";
view "liantong" {
    match-clients { "liantong"; };
    zone "apple.tree" IN {
        type master;
        file "/etc/bind/views/zones/liantong.apple.tree.zone";
    };
};

 

最后是对域的解析:code

电信apple.tree域: dianxin.apple.tree.zonehtm

$TTL 86400
@   IN  SOA apple.tree. apple.apple.tree. (
          2016090100     ; Serial
               28800     ; Refresh
                7200     ; Retry
              604800     ; Expire
               86400     ; Negative Cache TTL
)
@   IN  NS  apple.tree.
@   IN  A   192.168.4.43
aaa IN A 192.168.4.100
bbb     IN      A       192.168.4.101
ccc     IN      CNAME   bbb

联通apple.tree域: liantong.apple.tree.zoneblog

$TTL 86400
@   IN  SOA apple.tree. apple.apple.tree. (
          2016090100     ; Serial
               28800     ; Refresh
                7200     ; Retry
              604800     ; Expire
               86400     ; Negative Cache TTL
)
@   IN  NS  apple.tree.
@   IN  A   192.168.4.43
aaa IN A 1.1.1.1
bbb     IN      A       2.2.2.2
ccc     IN      CNAME   bbb

 

OK。这样咱们就配置了一套电信视图和一套联通视图(所谓一套就是“acl+view+zone”这三者解析)。

若是你乐意,还能够配一套移动视图和一套移不动视图,大概就都是酱婶的。先测试一下吧(别忘了sudo rndc reload加载):
当我从电信的机器(192.168.4.43)查询时:教程

$ dig aaa.apple.tree @192.168.4.43
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> aaa.apple.tree @192.168.4.43
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57758
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;aaa.apple.tree. IN A
;; ANSWER SECTION:
aaa.apple.tree. 86400 IN A 192.168.4.100
;; Query time: 4 msec
;; SERVER: 192.168.4.43#53(192.168.4.43)
;; WHEN: Mon Jan 11 08:58:28 CST 2016
;; MSG SIZE rcvd: 59

而当我从联通的机器(192.168.1.100)查询时:

$ dig aaa.apple.tree @192.168.4.43
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> aaa.apple.tree @192.168.4.43
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40018
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;aaa.apple.tree. IN A
;; ANSWER SECTION:
aaa.apple.tree. 86400 IN A 1.1.1.1
;; Query time: 3 msec
;; SERVER: 192.168.4.43#53(192.168.4.43)
;; WHEN: Sun Sep 04 12:32:56 CST 2016
;; MSG SIZE rcvd: 59

 

视图配置就是这样的。有个问题我一直没有介绍,那就是:我怎么知道哪些IP是电信的IP,哪些是联通的?若是你之前看过个人博客,那应该看过这篇《解析纯真IP地址库》。没错,写程序来得到每一个运营商的IP集合。再开动一下脑筋,咱们还能得到些什么呢?——除了运营商,咱们还能够根据地域来划分IP,写出来各个省的视图。

密集恐惧症患者的福音。我我的建议若是你真要配置全国各省甚至各市的视图,就不要手动写配置文件了,写个脚本生成吧。并且,一台机器的内存有可能撑不住,可能要考虑主从。甚至,咱们还能够用地域和运营商相结合。固然,这种不一样维度结合的时候,须要有化解冲突的方式,好比,电信解析到P地址,而北京解析到Q地址。那么你让北京电信的用户怎么想?实际上,对于这种状况,BIND是这么处理的:首先,咱们收集IP集合的时候,一个北京电信的IP就既在北京的IP集合中,又在电信的IP集合中,当客户端访问DNS服务器时,BIND首先对客户端IP进行匹配,找到这个IP属于某一个集合,就会去查询这个集合对应的视图。谁先谁后?那就要看两个acl在named.conf加载时候的前后顺序了。谁写在前面,谁先加载。BIND不认为这种冲突是错误。话说这原本也不是错误,北京电信的用户既属于北京,也属于电信,这没错啊!视图配置大概就讲这些。

相关文章
相关标签/搜索