• Linux中bind9的view(视图解析)配置示例与注意事项


    1、view使用场景概述

    view(视图)是Linux中bind9里一种高级功能,能够实现将不同的客户端针对同一个域名发起的解析请求,解析到不同的服务器上,从而实现对流量的分担。通常情况下,bind9中单纯的zone形式的解析是客户端无差别式的解析,而view的出现可以实现针对不同客户端的差异化解析。

    2、本文实验场景和需求

    本文实验场景和需求如下图所示:
    在这里插入图片描述

    3、配置步骤

    3.1、DNS服务器中bind9的配置步骤

    本实验中,DNS服务端是在CentOS-Stream 9操作系统中进行的,IP地址为192.168.80.136,已经事先配置完成,需要注意的是,bind9在不同的Linux发行版中配置略有差异(如红帽系Linux和debian系Linux差异相对较大),具体配置方法需要根据实际情况进行。
    (1) 首先通过“yum install bind”命令在CentOS-Stream 9中安装bind9:
    在这里插入图片描述
    (2) 输入命令“vim /etc/named.conf”,将named.conf配置文件对照修改如下内容(左侧为修改前的配置文件,右侧为修改后的配置文件):
    在这里插入图片描述

    在这里插入图片描述

    需要补充说明的是,因为本实验中的客户端有两个,分别为客户端A(openEuler)和客户端B(debian),因此针对这两个客户端分别创建两个视图,名称可以自定义,此处将名称分别设置为“openeuler”和“debian”来分别和两个客户端对应。
    而针对于视图结构体的讲解,上图中已经进行了相应的注明。

    (3) 在/var/named目录下分别针对两个客户端创建两个解析文件,分别为“openeuler.ymh.com.zone”和“debian.ymh.com.zone”(分别对应/etc/named.conf文件中各自view结构体的“file”字段),其中“openeuler.ymh.com.zone”文件的内容如下,代表将“www.ymh.com” :
    在这里插入图片描述

    “debian.ymh.com.zone”文件内容如下:
    在这里插入图片描述

    (4) 通过“named-checkzone”检查两个解析文件的语法配置是否存在错误,命令如下图所示:
    在这里插入图片描述

    (5) 检查两个解析文件的权限、属主和属组是否正确,尤其是属组,必须是named,否则将会出现客户端无法解析的情况,如下图所示:
    在这里插入图片描述

    (6) 通过命令“systemctl restart named”重启DNS解析服务,以上相关服务重启成功后,上述配置将生效
    在这里插入图片描述

    3.2、修改客户端DNS服务器指向

    针对客户端上的操作,两台客户端都是一致的,通过修改/etc/resolv.conf文件来修改DNS的指向,如下图所示:
    在这里插入图片描述

    4、解析测试

    分别在运行openEuler系统的客户端A和运行debian系统的客户端B上分别通过命令“dig www.ymh.com”进行测试,可以发现openEuler解析到192.168.80.1,而debian解析到192.168.80.2上,此时证明view(视图解析)配置成功:
    在这里插入图片描述
    在这里插入图片描述

    5、附录:配置文件代码

    5.1、DNS服务端/etc/named.conf

    //
    // named.conf
    //
    // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
    // server as a caching only nameserver (as a localhost DNS resolver only).
    //
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    
    options {
            listen-on port 53 { any; };
            #listen-on-v6 port 53 { ::1; };
            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";
            secroots-file   "/var/named/data/named.secroots";
            recursing-file  "/var/named/data/named.recursing";
            allow-query     { any; };
    
            /*
             - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
             - If you are building a RECURSIVE (caching) DNS server, you need to enable
               recursion.
             - If your recursive DNS server has a public IP address, you MUST enable access
               control to limit queries to your legitimate users. Failing to do so will
               cause your server to become part of large scale DNS amplification
               attacks. Implementing BCP38 within your network would greatly
               reduce such attack surface
            */
            recursion yes;
    
            dnssec-validation yes;
    
            managed-keys-directory "/var/named/dynamic";
            geoip-directory "/usr/share/GeoIP";
    
            pid-file "/run/named/named.pid";
            session-keyfile "/run/named/session.key";
    
            /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
            include "/etc/crypto-policies/back-ends/bind.config";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    
    view "openeuler" {
            match-clients { 192.168.80.129/32; };
            zone    "ymh.com" IN {
            type    master;
            file    "openeuler.ymh.com.zone";
            };
            zone "." IN {
            type hint;
            file "named.ca";
            };
    };
    
    view "debian" {
            match-clients { 192.168.80.135/32; };
            zone    "ymh.com" IN {
            type    master;
            file    "debian.ymh.com.zone";
            };
            zone "." IN {
            type hint;
            file "named.ca";
            };
    };
    
    #include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    #include "/var/named/openeuler.cfg";
    #include "/var/named/debian.cfg";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    5.2、DNS服务端/var/named/openeuler.ymh.com.zone

    ;
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @       IN      SOA     ymh.com. root.ymh.com. (
                                  2         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
    ;
            IN      NS      dns.
    ns      IN      A       192.168.80.1
    www     IN      A       192.168.80.1
    @       IN      A       127.0.0.1
    @       IN      AAAA    ::1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5.3、DNS服务端/var/named/debian.ymh.com.zone

    ;
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @       IN      SOA     ymh.com. root.ymh.com. (
                                  2         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
    ;
            IN      NS      dns.
    ns      IN      A       192.168.80.2
    www     IN      A       192.168.80.2
    @       IN      A       127.0.0.1
    @       IN      AAAA    ::1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5.4、DNS客户端/etc/resolv.conf

    # Generated by NetworkManager
    nameserver 192.168.80.136
    
    • 1
    • 2
  • 相关阅读:
    空调玻璃棉管保温好吗?
    LeetCode-19. Remove Nth Node From End of List [C++][Java]
    Mysql高级20-性能分析
    【web实战-业务逻辑】评论点赞逻辑
    【云原生】Redis on k8s 编排部署讲解与实战操作
    腾讯回应没有获得首批游戏版号,先让小公司回血更要紧;小鹏汽车被曝毁约20余名应届生;大厂一半以上程序员愿意降薪跳槽|极客头条
    基于JavaSwing开发记事本程序(新功能替换查找撤销状态栏) 课程设计 大作业源码
    通过WSL在阿里云上部署Django项目MySQL
    蓝桥集训之木棒
    路径穿越(Path Traversal)详解
  • 原文地址:https://blog.csdn.net/muxia_jhy/article/details/126608750