zoukankan      html  css  js  c++  java
  • DNS(二)之bind的视图功能

    bind视图工作原理

    在我国目前的网络环境下面,多个运营商并存,运营商之间的存在一定的网络互通问题,如果把来自不同的运营商或者地域的所有用户通过简单的A记录分配到一个机房,那么就存在部分网民访问延时大或者丢包的问题。那么bind里面就提供了视图(Dns view ) 技术来解决这个问题,DNS视图 就是对同一个资源记录根据的DNS请求来源IP地址不同,分配到解析器的解析结果也不同,也就是说它可以提供这样的功能。

    • 对于山东省的中国电信的DNS请求,可以把用户引导到部署在山东省中国电信机房的服务器上。
    • 对于无法匹配到某个具体运营商或者国外的用户,可以把用户引导到指定的一组默认服务器上。
      所以以上的功能,都是为了实现用户的就近访问,也就是让用户访问到对他来说网络质量较好的服务器上。
    关于视图的配置

    我们在这里配置的是模拟环境,环境如下:

    都是采用Centos6.6系统,yum安装的bind服务。

    dns服务器的named配置如下:

    [root@localhost etc]# cat /etc/named.conf
    options {
    	directory 	"/var/named";
    	dump-file 	"/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
    	recursion yes;
    
    	dnssec-enable yes;
    	dnssec-validation yes;
    
    	/* Path to ISC DLV key */
    	bindkeys-file "/etc/named.iscdlv.key";
    
    	managed-keys-directory "/var/named/dynamic";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
            channel query_log {          #开启请求日志
                 file "/var/log/dns/query.log" versions  5  size  30m;
                 severity  info;    
                 print-time yes;
                 print-category yes;
           };
           category queries {
                query_log;
          };
    };
    
    view  "view_localnet_45" {
        match-clients {            # 使用match-clients指令,指定匹配来自这些用户的ip
           localnet45;             # 写的是acl配置文件定义的aclname
        };
         zone  "ljf.com"  {
            type master;
            file "ljf.com.zone45";   #不同的匹配规则我这里写的是用不同的域名文件,方便管理
        };
    
    };
    
    view "view_localnet_141" {
        match-clients {
            localnet141;
        };
         zone "ljf.com"  {
           type master;
           file "ljf.com.zone141";
        };
    };
    
    #include "/etc/named.rfc1912.zones";           # 注释掉这条,因为开启view以后,所有的zone必须包含在view里面,不然启动报错。
    include "/etc/named.root.key";
    include "/etc/named/acl/localnet141.conf";     # 引入acl配置文件
    include "/etc/named/acl/LocalNet45.conf";      # 引入acl配置文件
    

    下面我们看看ACL的配置文件:

    [root@localhost named]# cat /etc/named/acl/localnet141.conf
    acl "localnet141" {
    192.168.141.0/24;     #针对192.168.141的网段
    };
    You have new mail in /var/spool/mail/root
    [root@localhost named]# cat /etc/named/acl/LocalNet45.conf
    acl "localnet45" {     # 定义acl的名字,方便named.conf里面的match-clients 去调用
    192.168.45.0/24;       # 针对192.168.45的网段
    };
    

    再看下zone的file内容 :

    [root@localhost named]# cat /var/named/ljf.com.zone141
    $TTL 1D
    @	IN SOA	@ rname.invalid. (
    					0	; serial
    					1D	; refresh
    					1H	; retry
    					1W	; expire
    					3H )	; minimum
    @      IN    NS   ns
    www    IN   A 192.168.141.3
    ns    IN    A 102.168.141.3
    
    [root@localhost named]# cat /var/named/ljf.com.zone45
    $TTL 1D
    @	IN SOA	@ rname.invalid. (
    					0	; serial
    					1D	; refresh
    					1H	; retry
    					1W	; expire
    					3H )	; minimum
    @    IN  NS    ns
    www  IN  A    192.168.45.128
    test IN  A    192.168.45.2
    ns   IN  A    192.168.45.129
    

    那么就开始去验证我们刚才的配置的DNS功能
    192.168.141.4上解析域名

    [root@localhost ~]# dig @192.168.141.3 www.ljf.com +short
    192.168.141.3
    

    192.168.45.128上解析域名

    root@leo-virtual-machine:~# dig @192.168.45.129 www.ljf.com +short
    192.168.45.128
    

    由解析结果看得出来,在不同网段解析同一个域名,解析结果确实不同,展示了bind的view功能的强大之处

    总结起来就是用acl指令去圈定一批来源IP,使用view的match-clients匹配该acl,为其分配zone文件用于解析用于解析。


    视图优化的技巧

    相信大家可以看到,view里面的核心内容就是匹配来源IP,那么问题来了,这些ip哪里来的?毫无疑问,肯定是自己通过dns请求日志去收集的
    日志配置我在这里在贴下:

    [root@localhost named]# cat /etc/named.conf
    '''''
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
            channel query_log {          #开启请求日志
                 file "/var/log/dns/query.log" versions  5  size  30m;
                 severity  info;    
                 print-time yes;
                 print-category yes;
           };
           category queries {
                query_log;
          };
    };
    '''''
    

    日志格式如下

    [root@localhost named]# cat /var/log/dns/query.log
    06-Nov-2016 11:56:43.045 queries: client 192.168.45.128#40987: view view_localnet_45: query: www.ljf.com IN A +E (192.168.45.129)
    06-Nov-2016 11:56:43.518 queries: client 192.168.45.128#60098: view view_localnet_45: query: www.ljf.com IN A +E (192.168.45.129)
    '''''''''
    
  • 相关阅读:
    C# 通过Attribute制作的一个消息拦截器
    Newtonsoft.Json高级用法
    这些年,我收集的JavaScript代码(一)
    Storm整体架构分析
    Worker的内部工作原理
    Storm源码分析
    Storm集群部署
    Storm 官方文档翻译 --- 消息的可靠性保障
    [转] 如何快速掌握一门新技术/语言/框架
    小狗钱钱读书笔记
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6035077.html
Copyright © 2011-2022 走看看