BIND简易教程(2):BIND视图配置
目录:
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的高级功能:视图查询。
配置视图,主要需要三个步骤:
- 收集IP地址的集合。例如我现在有3个IP地址的集合,让每个集合能访问到不同的地址,即,某个集合中的一个ip在查询的时候,提供一个解析结果,另一个集合中的另一个ip查询的时候,提供另一个结果;
- 给每个IP集合提供一个视图。这个视图中要写清楚是哪个集合,能请求到哪个域。
- 给每个视图的每个域提供一个解析文件。
下面,我们假设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视图配置的更多相关文章
- BIND简易教程(3):DNSSec配置
目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置BIND简易教程(3):DNSSec配置 (本篇) DNSSec,有个半英半中的名字叫DNS安全扩展.说的好听一点, ...
- BIND简易教程(1):安装及基本配置
首先,为什么说是简易教程呢?因为BIND的功能实在太多,全写出来的话要连载好久,我觉得我没有那么多精力去写:而我了解的仅仅是有限的一点点,不敢造次.百度上的文章也是一抓一大把呐!所以,教点基本使用方法 ...
- BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)
之前介绍过BIND的基本使用啦.关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装. ...
- Linux运维实战之DNS(bind)服务器的安装与配置
转自http://sweetpotato.blog.51cto.com/533893/1598225 上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器. [本次博文的主要 ...
- WebGL简易教程(六):第一个三维示例(使用模型视图投影变换)
目录 1. 概述 2. 示例:绘制多个三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 数据加入Z值 2.2.2. ...
- WebGL简易教程(十三):帧缓存对象(离屏渲染)
目录 1. 概述 2. 示例 2.1. 着色器部分 2.2. 初始化/准备工作 2.2.1. 着色器切换 2.2.2. 帧缓冲区 2.3. 绘制函数 2.3.1. 初始化顶点数组 2.3.2. 传递非 ...
- Ocelot简易教程(五)之集成IdentityServer认证以及授权
Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么 Ocelot简易教程(二)之快速开始1 Ocelot简易教程(二)之快速开始2 Ocelot简易教程(三)之主要特性及路由详解 ...
- [转载]Ocelot简易教程(五)之集成IdentityServer认证以及授权
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 最近比较懒,所以隔了N天才来继续更新第五篇Ocelot简易教程,本篇教程会先简单介 ...
- JavaScript简易教程(转)
原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...
随机推荐
- js中的特殊符号含义
一. !! js中的!! var o ={flag:4}; var test = !!o.flag; console.log(test); // true 二.~~,<< (~~(Mat ...
- online contest
http://atcoder.jp/contest https://nanti.jisuanke.com/contest http://codeforces.com/ https://www.nowc ...
- Laravel 使用Voyager导致多个数据库连接总是返回默认连接?
问题与分析 最近的项目碰到一个奇怪的问题,在Laravel(5.3)中想建立多个数据库连接连到MySQL的不同数据库(另一个连接名为conn2),执行如下语句得到却发现得到的仍然是默认连接: $con ...
- angular 之 jquery-autocomplete
自动完成还是原来的 bassistance.de 好用,详细用法参考官网. angular的js paths配置及依赖关系不多说: 'jquery': 'static/jquery-1.11.3/jq ...
- PHP读取配置文件连接MySQL数据库
读取配置文件方法parse_ini_file($filepath [,$section]) 代码: conn.php <?php //连接数据库 //$conn =new mysqli('loc ...
- Vue-[v-model]理解示例
对应文档节点: https://vuefe.cn/v2/guide/components.html#Customizing-Component-v-model <body> <div ...
- Javaweb之EL表达式
1.EL表达式简介 EL全名为Expression Language.EL的主要作用为: 获取数据:EL表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据. ...
- cocos-creator 脚本逻辑-1
1.节点 编辑组件的脚本文件时.可以通过以下语句获得节点 this 就是当前组件 this.node 拿到组件依附的节点 This.node.parent 拿到组件依附的节点 的父节点 This.no ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- ActiveMQ相关:
MQ连接字符串:failover:tcp://127.0.0.1:61616 管理地址:http://localhost:8161/admin/