zoukankan      html  css  js  c++  java
  • 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的高级功能:视图查询。

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

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

  • 相关阅读:
    js 经纬度计算直线距离
    lua 把图片转换成base64
    js 选中div中的文本
    .net EasyTree显示所级层级(无限级、整层级颗树)的另类写法。非递归
    c# windows服务 一个项目安装多个服务
    MD5 .net与PHP加密值一样的加密代码
    mvc 目录不存在/Directory does not exist.的解决方案
    .net webapi项目中支持session
    .net 中HttpClient 携带cookie传输
    iis虚拟目录或应用程序不继承父站点的web.config配置信息
  • 原文地址:https://www.cnblogs.com/anpengapple/p/5879350.html
Copyright © 2011-2022 走看看