配置BIND 9 DNS Views 的原理和需求
--------------------------------------------------------------------------
DNS服务器最基本的任务就是响应域名的查询,返回该域名的地址数据. 在DNS服务器中将一个
域名分成内部与外部做不同的View解析, 可以提升安全性,以及分类应付不同区域的查询请求.
例如您的单位需要分成内部网和外部网,希望将同一个域名解析为不同的IP地址, 以提高安全
防护的目的, 或者应付不同业务的应用; 又比如您需要将业务按地域来划分,打算在各个地区
分别设置各自的主机来处理访问请求(或者单机双线也适用),以图解决中国南北网(电信/网通)
互不相通所导致的速度差异之问题,希望将电信用户解释到由电信网络所提供的IP地址上, 而
网通用户则解释到由网通网络所提供的IP地址上;

要实现将来自不同地域(用IP段来标识)的请求, 自动引导到不同区域的主机,可以采用域名的
多解释方法来简单实现. 在BIND9中有个新的view指令可以完成达到这个目的, 方法就是设置
多个view段落来响应同一个域名的查询请求. 只需要在每个view段落的match-clients项目中,
设置所需匹配的客户端IP段落, 并且在每个段落中都设置该域名的区域数据,但不同的view则
指向不同的区域文件, 然后在各自的区域文件中分别设置相应的区域内容,这样就可以达到按
请求者的IP段落,来分别响应并提供不同的查询结果了.

针对访问者不同的IP段,来解释主机域名的相应的IP地址, 也可以轻易实现负载均衡或者化解
地区局限. 举个例子来说, 目前国内的网络因为种种原因,同外部网络的联机经常出现不稳定
的状况,造成从大陆内部无法访问外部,而外部也无法访问内部,尤其是导致电邮收发异常缓慢
甚至丢失反弹,非常令人头疼. 而且很多时候造成这种不稳定的因素, 还常常是源自于国家级
主干网络的非技术性故障,这就很难从主机供货商方面寻求解决问题的方案. 如果要彻底解决
这个问题的话, 那么一个可能的方案就是按地域来划分业务. 例如,分别在不同地区设置一台
主机(假设在北京设置一台主机,在广州设置一台主机,在香港设置另一台主机),然后就可设法
将大陆内部北方的客户引导到北京(网通)的主机, 将南方的客户引导到广州(电信)的主机,而
将海外的客户则引导到香港的主机.

请注意: view指令是BIND 9的新功能, BIND 8以前的版本无此功能;
----------------------------------------------------------------------------------

----------------------------------------------------------------------------------
(2) 配置BIND 9 DNS Views 的实验范例
----------------------------------------------------------------------------------
【实验环境】

操作系统:        Debian 4.1;
BIND版本:        BIND 9.3.4;
DNS服务器:        192.168.0.8;
内部IP段:        192.168.0.0/24;
外部IP段:        除192.168.0.0/24之外的所有IP;
解释域名:        mytest.com;

希望内部IP和本机IP(192.168.0.8)所解析到www.mytest.com的IP地址为1.1.1.1;
希望外部IP段(192.168.0.7和192.168.0.17)则解析到2.2.2.2;
希望其他IP段(我的测试IP是192.168.0.2)则解释到3.3.3.3;

【BIND9的配置文件】

vi /etc/bind/named.conf;        #
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
include "/etc/bind/named.conf.options";

view "internal" {
        match-clients      { localhost; 192.168.0.8; };
        match-destinations { any; };
        recursion yes;
        allow-query     { localhost; 192.168.0.0/24; };
        allow-transfer  { 192.168.0.7; };
        include "/etc/bind/named.internal.zones";
        include "/etc/bind/named.conf.local";
};

view "external" {
        match-clients      { 192.168.0.7; 192.168.0.17; };
        match-destinations { any; };
        recursion yes;
        allow-query     { any; };
        allow-transfer  { 192.168.0.7; };
        include "/etc/bind/named.external.zones";
        include "/etc/bind/named.conf.local";
};

view "others" {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        allow-query     { any; };
        allow-transfer  { 192.168.0.7; };
        include "/etc/bind/named.others.zones";
        include "/etc/bind/named.conf.local";
};
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
请注意: 各个View指令的应用是按先后顺序执行的,即是按首先符合的条件返回结果,例如本地
请求首先符合第一View指令, 则返回结果,不再检查其他的View; 来自192.168.0.7的请求符合
第二个View指令, 则返回结果, 不再检查后面的View; 所以,如果要在该View的match-clients
中设置任何条件(即any)的话, 就必须将这个View摆在最后面, 而绝不能放在其他View的前面.

vi /etc/bind/named.internal.zones;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

zone "mytest.com" IN {
        type master;
        file "/etc/bind/mytest.com.internal";
};
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

vi /etc/bind/named.external.zones;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

zone "mytest.com" IN {
        type master;
        file "/etc/bind/mytest.com.external";
};
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

vi /etc/bind/named.others.zones;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

zone "mytest.com" IN {
        type master;
        file "/etc/bind/mytest.com.others";
};
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

vi /etc/bind/mytest.com.internal;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
$TTL 4320       ; 1 hour 12 minutes
@       IN      SOA     ns.mytest.com.  root.ns.mytest.com.      (
                                2007101701      ;
                                3600            ;
                                1800            ;
                                36000           ;
                                3600 )          ;
        IN      NS      ns.mytest.com.
ns      IN      A       192.168.0.8
www     IN      A       1.1.1.1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

vi /etc/bind/mytest.com.external;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$TTL 4320       ; 1 hour 12 minutes
@       IN      SOA     ns.mytest.com.  root.ns.mytest.com.      (
                                2007101701      ;
                                3600            ;
                                1800            ;
                                36000           ;
                                3600 )          ;
        IN      NS      ns.mytest.com.
ns      IN      A       192.168.0.8
www     IN      A       2.2.2.2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

vi /etc/bind/mytest.com.others;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
$TTL 4320       ; 1 hour 12 minutes
@       IN      SOA     ns.mytest.com.  root.ns.mytest.com.      (
                                2007101701      ;
                                3600            ;
                                1800            ;
                                36000           ;
                                3600 )          ;
        IN      NS      ns.mytest.com.
ns      IN      A       192.168.0.8
www     IN      A       3.3.3.3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

【测试与结果】

设置好后重启BIND服务: /etc/init.d/bind9 restart;

如果一切设置正常的话,现在DNS服务器应该能分别针对不同IP地址的请求,来返回不同的主机
解释了, 这里测试从192.168.0.2,192.168.0.7和192.168.0.8(本机)查询结果是:

从192.168.0.2查询(dig @191.168.0.2 www.mytest.com;)则返回3.3.3.3;
从192.168.0.7查询(dig @191.168.0.7 www.mytest.com;)则返回2.2.2.2;
从192.168.0.8查询(dig @191.168.0.8 www.mytest.com;)则返回1.1.1.1;

转载于:https://blog.51cto.com/360admin/677254

配置BIND 9 DNS Views 的原理和需求相关推荐

  1. DNS解析原理与Bind部署DNS服务

    DNS是什么? DNS(Domain Name System,域名系统)是互联网上最核心的带层级的分布式系统,它负责把域名转换为IP地址.反查IP到域名的反向解析以及宣告邮件路由等信息,使得基于域名提 ...

  2. linux 智联 网卡设置,Linux初学者DNS配置指南(四)配置Bind常见问题

    手把手教你如何配置Linux下的DNS(四)配置Bind常见问题 一.rndc: connect failed: connection refused错误 1.1.问题发生:配置DNS完成后,输入命令 ...

  3. 计算机网络——DNS域名解析服务器原理

    摘要 本博文主要介绍DNS协议和DNS服务器域名解析相关知识和原理,帮助大家在理解计算机网络中的域名解析服务原理. 计算机网络知识脑图 计算机网络--计算机网络知识脑图_庄小焱的博客-CSDN博客_计 ...

  4. linux基础第7节 ----配置与管理DNS服务器

    目录 一.了解DNS服务 1.认识域名空间 2.了解DNS服务的分类 Ⅰ.主DNS服务器 Ⅱ.辅助DNS服务器 Ⅲ.转发DNS服务器 Ⅳ.唯高速缓存DNS服务器 3.掌握DNS查询模式 Ⅰ.递归查询 ...

  5. centos7配置bind重启后错误解决

    最近研究centos7安装bind做DNS服务器,都配置好了后,重启后用systemctl status named 发现好多诸如以下错误:error (network unreachable) re ...

  6. Linux学习之CentOS(三十四)--配置域主DNS服务器

    在上一篇随笔里 Linux学习之CentOS(三十三)--DNS基础及域名系统架构,讲解了DNS的一些基础知识以及域名系统架构,在本篇随笔里将详细地讲解主DNS服务器的配置... 一.DNS服务器的类 ...

  7. Kubernetes 集群 DNS 服务发现原理

    简介:本文介绍 Kubernetes 集群中 DNS 服务发现原理. 本文介绍 Kubernetes 集群中 DNS 服务发现原理. 前提需要 拥有一个 Kubernetes 集群(可以通过 ACK ...

  8. 使用 bind 搭建DNS 服务器

    Part 1: 使用 bind 搭建DNS 服务器 软件包: 1 2 3 4 5 6 7 ======================================================= ...

  9. bind mysql django_Django+bind dlz DNS管理平台

    经过两周开发,DNS管理平台终于开发完成.今天正好有时间,给大家分享一下. 1.整体架构       > DNS 服务器分成两组,每组在不同的机房.保障一组机器出现问题,减少对用户的影响. &g ...

最新文章

  1. 未来计算机体系结构,华中科大金海:未来是计算机体系结构的“黄金十年” 要培养大量创新人才...
  2. PriorityBlockingQueue详解
  3. EID-:宏病毒组技术在新发腹泻病毒鉴定中的应用
  4. python中字典的value可以为任意对象_Python学习入门(13)—字典
  5. BI怎么选?重点看这10个技术指标
  6. Java进阶:Set、Map线程安全问题
  7. 如何让JAVA程序实现一段时间等待
  8. Torque2D MIT 实战记录: 塔防进度(3)
  9. DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)
  10. 【渝粤教育】电大中专职业应用写作作业 题库
  11. 织梦内核风吟导航QQ导航天下网址管理源码
  12. c语言中数组结尾的0的作用,C语言里面一个数组最后的\0表示什么意思?
  13. opencv手册_OpenCV之单目测距实现
  14. 如何调试JavaScript代码
  15. 项目部 vs 项目组
  16. 前端提高篇(三十九)CSS进阶7:columns多列布局
  17. passing ‘const XXX’ as ‘this’ argument discards qualifiers
  18. 小白学习 指针,指针变量,指针变量大小
  19. 【信息检索】【评价】 IR Evaluation
  20. Altera的单时钟同步FIFO,带empty和full端口

热门文章

  1. 第九章 性能监控诊断
  2. python 字符串部分总结
  3. 重定向、别名、绝对路径、相对路径 详解
  4. 任正非迷茫的背后是华为在“治未病”
  5. 开源,是一种新的平台之战
  6. 用户一亿的网易新闻客户端质量如何?
  7. 那些年php编程犯过的错(1) -- 字符串相等
  8. java 获取绝对路径
  9. Mastercam X4中文版三维造型设计基础与典型范例
  10. 高内聚、低耦合的含义是什么?