目录:
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
下面,咱们假设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不认为这种冲突是错误。话说这原本也不是错误,北京电信的用户既属于北京,也属于电信,这没错啊!视图配置大概就讲这些。