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";

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

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

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

# Generated by NetworkManager
nameserver 192.168.80.136
### urllib3 ProtocolError 的原因解决方案 `urllib3.exceptions.ProtocolError: ('Connection aborted.', error(10054, ...))` 是一种常见的网络错误,通常表示客户端服务器之间的通信中断。以下是可能的原因及其对应的解决方案: #### 可能原因一:网络连接不稳定 如果设备未正确连接到互联网或者网络环境较差,则可能导致 `ProtocolError` 发生[^3]。 - **解决方法**: 确保计算机已稳定连接至 Wi-Fi 或有线网络,并测试其他网页加载情况以验证网络状态正常。 #### 可能原因二:目标网站关闭了连接 当请求的目标站点主动断开连接而没有返回任何响应数据时也会触发此异常[^2]。 - **解决方法**: 尝试更换访问地址;如果是特定API接口调用失败,请联系服务提供方确认其运行状况以及是否存在限流策略等问题。 #### 可能原因三:代理设置不当 某些情况下使用了不合适的HTTP/HTTPS代理也可能引发此类问题。 - **代码调整建议**: ```python import requests proxies = { "http": None, "https": None } response = requests.get(url="your_url_here", proxies=proxies) print(response.status_code) ``` 上述代码片段展示了如何禁用默认代理配置来避免潜在冲突[^1]。 #### 可能原因四:SSL证书验证失败 有时由于自定义CA根证书或其他安全机制的存在使得标准库无法顺利完成握手过程从而抛出异常。 - **临时处理措施**: ```python from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) respose = requests.post(your_post_data,url=url, verify=False ) ``` 注意这种方法虽然可以绕过认证但仍存在安全隐患因此仅适用于调试阶段而非生产环境中推荐的做法是获取并安装正确的ssl cert文件然后传递给request函数作为参数之一即`verify='/path/to/certfile.pem'`. --- ### 总结 通过以上几种途径应该能够有效缓解甚至彻底消除由`urllib3 exceptions protocolerror connection aborted badstatusline`所引起的各种麻烦情形。不过具体实施效果还需视实际应用场景而定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值