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

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

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

  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.acl

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.view

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";
};
};

最后是对域的解析:

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

$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.zone

$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不认为这种冲突是错误。话说这本来也不是错误,北京电信的用户既属于北京,也属于电信,这没错啊!
视图配置大概就讲这些。

BIND简易教程(2):BIND视图配置的更多相关文章

  1. BIND简易教程(3):DNSSec配置

    目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置BIND简易教程(3):DNSSec配置 (本篇) DNSSec,有个半英半中的名字叫DNS安全扩展.说的好听一点, ...

  2. BIND简易教程(1):安装及基本配置

    首先,为什么说是简易教程呢?因为BIND的功能实在太多,全写出来的话要连载好久,我觉得我没有那么多精力去写:而我了解的仅仅是有限的一点点,不敢造次.百度上的文章也是一抓一大把呐!所以,教点基本使用方法 ...

  3. BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)

    之前介绍过BIND的基本使用啦.关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装. ...

  4. Linux运维实战之DNS(bind)服务器的安装与配置

    转自http://sweetpotato.blog.51cto.com/533893/1598225 上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器. [本次博文的主要 ...

  5. WebGL简易教程(六):第一个三维示例(使用模型视图投影变换)

    目录 1. 概述 2. 示例:绘制多个三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 数据加入Z值 2.2.2. ...

  6. WebGL简易教程(十三):帧缓存对象(离屏渲染)

    目录 1. 概述 2. 示例 2.1. 着色器部分 2.2. 初始化/准备工作 2.2.1. 着色器切换 2.2.2. 帧缓冲区 2.3. 绘制函数 2.3.1. 初始化顶点数组 2.3.2. 传递非 ...

  7. Ocelot简易教程(五)之集成IdentityServer认证以及授权

    Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么 Ocelot简易教程(二)之快速开始1 Ocelot简易教程(二)之快速开始2 Ocelot简易教程(三)之主要特性及路由详解 ...

  8. [转载]Ocelot简易教程(五)之集成IdentityServer认证以及授权

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 最近比较懒,所以隔了N天才来继续更新第五篇Ocelot简易教程,本篇教程会先简单介 ...

  9. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

随机推荐

  1. Java动态代理的理解

    代码内容: https://github.com/cjy513203427/Java_Advanced_Knowledge/tree/master/src/com/advance/dynamic_pr ...

  2. 智能提示含查询多列(html+JS+handler+ HttpRemoting)二、Remoting代码

    /// <summary> /// 智能查询类型 /// </summary> public enum QueryType : byte { /// <summary&g ...

  3. [android] 界面切换的简单动画

    1. 新建个位移动画的xml文件 Activity中开启动画 使用AnimationUtils类加载动画资源文件 left_to_right.xml <?xml version="1. ...

  4. java swing画图片爱心

    第一次用swing做一个可视化程序,写第一篇随笔,有写的不好的地方请多多见谅.上个星期三在网上看到一个画爱心的软件,就想着自己用java也实现一个程序,画爱心用到的数学函数知识在网上百度的,不是本人原 ...

  5. ueditor PHP版本使用方法

    1.ueditor是百度很好用的一款文本编辑器,第一次使用,在此记录使用方法. 2.从http://ueditor.baidu.com/website/download.html#ueditor下载e ...

  6. cf1043C. Smallest Word(贪心)

    题意 题目链接 Sol 这题打cf的时候真的是脑残,自己造了个abcdad的数据开心的玩了半天一脸懵逼...最后还好ycr大佬给了个思路不然就凉透了... 首先不难看出我们最后一定可以把字符串弄成\( ...

  7. sass变量

    sass变量用法 1.sass变量必须以$符开头,后面紧跟着变量名 2.变量值和变量名之间就需要使用冒号(:)分隔开(就像CSS属性设置一样) 3.如果值后面加上!default则表示默认值 默认变量 ...

  8. 001Java锁之synchronized

    01.synchronized & Lock synchronized锁同步 软件层面依赖JVM Lock锁同步 硬件层面依赖cpu指令 02.synchronized作用域 方法:锁住对象实 ...

  9. (C#) 表达式树

    需求是将一个string 表达式 转换成 逻辑 表达式 并得到结果. 例如: bool result = (key1==val1) || (key2!=val2) && (key3== ...

  10. c windows控制台输出颜色文字

    #include <windows.h> //设置文字颜色void SetColor(int ForgC){ WORD wColor; //We will need this handle ...