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