DNS详解

一、DNS基本概述

1.1为什么需要域名

在互联网中,使用IP地址与服务器进行通信根本行不通,原因如下:
1.不好记忆如:学校官网的IP地址是"39.104 .16.126",难以记忆;
2.IP地址会经常发生变更,所以通过IP地址去访问某台机器就容易出现无法访问的情况;
此时DNS就应运而生了;那DNS解决了什么问题
DNS主要用来维护域名与IP地址的对应关系。将(好记忆的字符串)与(不好记忆的P地址)
进行关联;
jd.com --> 1.1.1.1
tb.com -->2.2.2.2

1.2 什么是DNS

域名系统 DNS (Domain Name System)主要功能是将用户请求的域名转换为IP地址;DNS就像一位"翻译官”,它的基本工作原理可以用下图来表示;
在这里插入图片描述

1.3域名结构

由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。

  1. 互联网中的域名是有结构有规划的;
  2. 由于域名进行了分级,在进行域名和P地址解析时能更容易找到;。
  3. 域名具备全球唯一性;
    在这里插入图片描述
  • 根域:知道所有顶级域名服务器的域名和地址
    • 全世界只有13组根服务器,其中10台设置在美国,另外的三台设置与英国,瑞典,日本;因为UDP端口的原因,不能在扩建新的服务器了。
  • 顶级域:知道所有顶级域名服务器下注册的所有二级域名的IP地址
    • 顶级域有两种:通用域(com、cn)域和国家域(hk、 jp);
    • 顶级域名由ICANN(互联网名称与数字地址分配机构)委任的注册机构负责运行;
  • 二级域:负责一个区的域名服务器(taobao.com)
    • 无需到ICANN进行申请,只需要到运行顶级域的注册机构(阿里、腾讯)去申请即可
    • 如果申请的域名没有被注册,也没有被注册为商标,仅需要缴纳一笔年费即可获取
  • 三级域或主机名:
    • 根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如(www、ops)

1.4 DNS查询原理

下面的示例则概述了本地解析器没有域名对应的缓存,DNS 查询所需的步骤:
1、用户在浏览器中输入example.com,则向本地域名服务器开始进行递归查询。
2、本地域名服务器采用迭代查询的方法,向根域名服务器进行查询。
3、根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器﹒ TLD(top-level domain)的IP地址。·
4、本地域名服务器向顶级域名服务器.com TLD进行查询。
5、.com TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的IP地址。·
6、本地域名服务器向example.com 权威域名服务器发送查询。
7、example.com权威域名服务器告诉本地域名服务器所查询的主机lP地址。
8、本地域名服务器最后把查询的IP地址响应给浏览器。
在这里插入图片描述
在这里插入图片描述

1.4.1 递归查询

是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。

1.4.2 迭代查询

是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

1.5 DNS解析类型

1.5.1 A记录

A 记录可实现将域名指向 IP 地址,也称为正向解析;正向解析:域名–>DNS服务返回 IP
在这里插入图片描述

1.5.2 PTR

PTR记录可以实现IP查找域名,也称为反向解析;
反向解析:IP–>DNS服务返回域名;(主机域 内网使用;)
在这里插入图片描述

1.5.3 CNAME

当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录;最常用 CNAME 的场景有 WAF、CDN
在这里插入图片描述

1.5.4 NS

  1. 客户端查询DNS服务,如当前DNS无法提供权威解析,则返回一条NS记录;
  2. 客户端在通过 NS记录中提供的DNS权威服务器进行解析;在这里插入图片描述

1.6 企业自建DNS

企业常规做法:购买域名、完成ICP备案,并使用公网DNS服务(万网…)进行免费(付费)解析·既然企业可以通过公网来完成域名解析,为何还要自建IDNS呢?
1.内网web服务,例如: jenkins、 jumpserver、elk等,不适合解析至公网
2.内网中间件服务db、mql等,会经常迁移或扩缩容,应该使用域名对外提供,便于维护;
3.服务器都有hostname,hostname应该设置为FQDN,如何维护主机名和主机的内网P的关系;
FQDN:(Fully Qualified Domain Name) FQDN = Hostname + DomainName
综上:我们需要构建至少—套企业内部的DNS服务;

二、BIND基础应用

2.1什么是BIND

BIND(由美国加州大学开发并且维护的)、BIND`是一个开源、稳定、且应用广泛的DNS服务。

  • 开源:指BIND服务源代码是开放的;
  • 稳定:指BIND服务运行非常稳定;
  • 广泛:政府企业、单位机构、学校、等;

2.2 BIND的组成

BIND提供(域名解析服务、权威域名服务、DNS调试工具)
域名解析服务:将域名解析为IP地址
权威域名服务:能从该服务器查询到完整域名对应的IP地址,则这台服务器就算权威解析;
DNS调试工具:主要提供DNS客户端调试工具,供客户端使用;

2.3 BIND实战

1.环境准备

10.0.0.91 DNS-master
10.0.0.92 DNS-slaver
10.0.0.93 DNS-Son

2.安装
Bind的安装非常简单,只需要通过yum 即可完成安装;bind提供主程序包;bind-utils提供工具包;

[root@dns-master ~]# yum install bind bind-utils
[root@dns-master ~]# systemctl enable named
[root@dns-master ~]# systemctl start named


# 默认监听在本地53端口,需要修改配置文件支持远程连接
[root@dns-master ~]# netstat -lntp | grep 53
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      3439/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3439/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      3439/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      3439/named       



options {
        listen-on port 53 { any; };  # 修改为any或localhost 监听在本地任何网段
        allow-query     { any; };  # 修改为any或localhost 允许任何人连接

}

2.客户端解析验证
1.配置 DNS服务器指向:在 /etc/resolv.conf 里配置 DNS的 ip 地址

[root@client ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 172.16.1.91

# 或者
[root@client ~]# dig www.baidu.com @10.0.0.91 +short
www.a.shifen.com.
39.156.66.18
39.156.66.14

3.BIND配置文件

[root@dns-master ~]# cat /etc/named.conf 
// 
options {
	//监听地址及端口
	listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };
	
	//区域配置存储目录
	directory 	"/var/named";
	
	//dns解析过内容的缓存文件
	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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	
	//允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };

	// 递归查询
	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

//控制日志输出的级别以及输出的位置
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

//默认可以对任何域名提供解析服务;因为named.ca中存储的是全球根域服务器;
zone "." IN {
	type hint;
	file "named.ca"; //区域配置文件名称
};

//包含的其他文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

2.4 自定义区域(域名)

自定义域分为如下两类:

  • 主机域(内网):
  1. 主机域其实是一个假的域名;
  2. 主机域是不能解析到互联网上;
  3. 主机域它只对局域网提供服务;
  • 业务域(公网):
  1. 业务域一般都是真实可用的;
  2. 业务域是需要对外网用户提供服务的域名;

2.4.1 自定义区域配置文件

区域 zone 文件定义在 /etc/named.conf 配置;
也可以配置在自定义的其他文件里,并在 named.conf里 include声名一下
注意文件的权限,属主 root 属组 named, 文件权限 640

zone "baidu.net" IN {
    type master|slave;          //自定义区域类型
    file /path/to/zonefile;     //绝对路径和相对路径
    allow-update {ip|none};     //允许哪个ip可以使用nsupdate动态更新区域文件
    };

自定义一个域名:
1.自定义区域配置文件;(告诉bind服务,我提供某某的解析,数据库文件位置)
2.自定义区域数据库文件:

2.5 实操 bertwu.com A记录

  1. 自定义域
zone "bertwu.com" IN {
        type master;
        file "bertwu.com.zone";
};

  1. 自定义数据库文件
    注:;为注释
[root@dns-master ~]# cat /var/named/bertwu.com.zone 
$TTL 600    ; DNS失效时间,单位秒;

;区域名称   IN SOA ns.bertwu.com. 管理员邮箱
;区域名称可以使用过@表示,@表示当前域
bertwu.com. IN SOA  ns.bertwu.com. qq.bertwu.com. (
	2021090101   ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如
	10800        ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900           ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800       ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的
	86400	    ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)


;给客户端返回NS记录,bertwu.com. 域名由哪几台权威服务器提供解析
bertwu.com. IN NS ns1.bertwu.com.



;A记录,配置权威服务器的真实IP地址;
ns1.bertwu.com. IN A 172.16.1.91


;真正的域名解析
www.bertwu.com. IN A 172.16.1.7
blog.bertwu.com. IN A 172.16.1.8

3.检查配置文件语法

[root@dns-master ~]# named-checkconf 

4.检查区域数据库文件配置

[root@dns-master ~]# named-checkzone bertwu.com /var/named/bertwu.come.zone 

5.重载DNS服务器

[root@dns-master ~]# rndc reload

6.客户端测试解析域名

[root@client ~]# dig www.bertwu.com @172.16.1.91 +short
172.16.1.7
[root@client ~]# dig blog.bertwu.com @172.16.1.91 +short
172.16.1.8

2.6 CNAME 实战

用户通过DNS服务器172.16.1.91解析www.job.com。
1.添加job.com区域配置文件
2.添加区域数据库文件,配置NS记录,返回 DNS权威服务器地址
3.该域的DNS权威服务器为172.16.1.91
4.添加该域的CNAME解析记录,解析至 www.bertwu.com域名上

1.添加域配置文件

[root@dns-master ~]# cat /etc/named.conf
zone "job.com" IN {
        type master;
        file "job.com.zone";
};

2.添加数据库表文件

[root@dns-master ~]# cat /var/named/job.com.zone 
$TTL 600
job.com. IN SOA ns.job.com. qq.job.com. (
	2021090102
	10800
	900
	604800
	86400
)

job.com. IN NS   ns1.job.com.

ns1.job.com. IN A 172.16.1.91

www.job.com. IN CNAME www.bertwu.com.

3.重启并测试

[root@dns-master ~]# rndc reload
[root@client ~]# dig www.job.com @172.16.1.91 +short
www.bertwu.com.
172.16.1.7

2.7 配置反向解析 PTR:IP–>FQDN 实战

  1. 反向区域文件名称为 逆向网络地址 加 .in-addr.arpa. 后缀组成
  2. 反向区域数据库文件 完全格式为1.16.172.in-addr.arpa.(DNS服务器地址为172.16.1.91时)

1.新增区域配置文件,在主/etc/named.conf中新增反向区域配置

//反向解析域
zone "1.16.172.in-addr.arpa" IN {
        type master;
        file "1.16.172.zone";
};

2.配置数据库配置表文件

[root@dns-master ~]# cat /var/named/1.16.172.zone 
$TTL 600
@ IN SOA 1.16.172.in-addr.arpa. qq.bertu.com.  (

	2021090102
	10800
	900
	604800
	86400

)
;给客户端返回NS记录,该域名由哪台权威服务器提供解
@ IN NS ns1.bertwu.com.


;权威DNS的反向解析
172.16.1.91 IN  PTR ns1.bertwu.com.

;反向解析
7  IN PTR   web1.bertwu.com. 
8  IN PTR   web2.bertwu.com. 
51 IN PTR   db.bertwu.com. 
32 IN PTR   nfs.bertwu.com. 

3.检查配置语法重启

[root@dns-master ~]# named-checkconf 
[root@dns-master ~]# named-checkzone 1.16.172.in-addr.arpa. /var/named/1.16.172.zone 
[root@dns-master ~]# systemctl restart named

4.测试

[root@client ~]# dig -x 172.16.1.32 @172.16.1.91 +short
nfs.bertwu.com.
[root@client ~]# dig -x 172.16.1.7 @172.16.1.91 +short
web1.bertwu.com.
[root@client ~]# dig -x 172.16.1.8 @172.16.1.91 +short
web2.bertwu.com.
[root@client ~]# dig -x 172.16.1.51 @172.16.1.91 +short
db.bertwu.com.

三、DNS递归查询

就是查询本机不存在的域名,会帮你查询。如果关闭,只能查询本机已经配置的域名。

  • 如果要建立一个授权域名服务器,仅提供本地已存在域名解析;那么将 recursion 参数设置 no;
  • 如果要建立一个递归 DNS 服务器,那么需要将 recursion 参数设置 yes;
  • 如果递归 DNS 服务器有公网 IP 地址,则需要开启访问控制功能,只有合法的用户才可以发起查询。

3.1 递归查询参数配置

参数选项作用
recurisonyes/no是否开启递归查询请求
allow-recursion`{address_match_listany

3.2 递归查询配置

3.2.1 开启递归查询

BIND默认配置中的 recurison 参数是启用的;
1.配置仅允许 172.16.1.0 网段用户可以查询(可选);
2.使用客户端查询系统中存在的域名;
3.使用客户端查询系统中不存在的域名(让BIND进行递归查询,后续进行迭代查询);

 recursion yes;
 allow-recursion {172.16.1.0/24;};


[root@dns-master ~]# rndc reload

1.查询存在BIND服务器中的域名

[root@client ~]# dig blog.bertwu.com @172.16.1.91 +short
172.16.1.8
[root@client ~]# dig www.bertwu.com @172.16.1.91 +short
172.16.1.7

2.查询不存在BIND服务器中的域名

[root@client ~]# dig www.jd.com @172.16.1.91 +short
www.jd.com.gslb.qianxun.com.
www.jdcdn.com.
img2x-v6-sched.jcloudedge.com.
111.31.2.3
183.201.124.3
[root@client ~]# dig www.badiu.com +short
47.254.33.193

3.2.2 关闭递归查询测试

1.修改/etc/named.conf文件

 recursion no;
 allow-recursion {172.16.1.0/24;};

2.查询BIND服务器没有的域名,会提示警告

[root@client ~]# dig www.taobao.com @172.16.1.91 

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.taobao.com @172.16.1.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 18473
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

3.查询BIND已有的域名,不受影响

[root@client ~]# dig blog.bertwu.com @172.16.1.91 +short
172.16.1.8

四、DNS主辅同步

4.1 DNS主辅同步概念

辅助DNS是DNS容灾备份服务:在主DNS和辅DNS之间建立区域数据传输机制,当主DNS遇到故障或者服务中断时,辅DNS仍可以继续提供解析服务,因此保障业务稳定运行。
辅助DNS的优势:

  • 容灾备份,降低业务中断风险:主DNS系统故障,辅助DNS可继续提供域名解析服务,保障业务可用性。
  • 负载均衡,流量均摊降低负载:当辅助DNS与主DNS同时对外提供解析服务时,可以达到流量负载均衡的效果。

4.2 DNS主辅同步原理

在这里插入图片描述

4.3 主辅同步配置

4.3.1 环境准备

1.确保防火墙规则开放(建议关闭);
2.保持主从服务器时钟一致;
3.搭建完主从后,若修改主服务器域配置,Serail Number 必须递增,否则不同步;

4.3.2 主辅同步配置要点

1.主DNS修改named.conf配置文件,在option段添加如下内容:

  • 添加 allow-transfer:允许哪些IP地址能同步Master配置信息;
  • 添加also-notify:Master主动通知Slave域名变发生了变更;

2.辅DNS修改named.conf配置文件:

  • 添加masterfile-format text:同步的文件类型修改为text否则文件类型为data;
  • 辅助DNS添加对应的区域配置文件,类型为 slave,同时masters 参数指向主DNS地址;
  • 辅助DNS不可主动修改DNS数据库文件;

4.3.3 Master服务器配置

1.区域配置文件

[root@dns-master ~]# cat /etc/named.conf 

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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };

	allow-transfer {172.16.1.92;};   //允许哪些`IP`地址能同步Master配置信息;
	also-notify {172.16.1.92;};     //Master主动通知Slave域名变发生了变更


	recursion yes;
	allow-recursion {172.16.1.0/24;};
	dnssec-enable yes;
	dnssec-validation yes;


	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

//自行配置权威域名解析
zone "bertwu.com" IN {
	type master;
	file "bertwu.com.zone";
};

zone "1.16.172.in-addr.arpa" IN {
	type master;
	file "1.16.172.zone";
};


zone "job.com" IN {
        type master;
        file "job.com.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

2.添加区域数据文件(需要多添加一条NS记录)

[root@dns-master ~]# cat /var/named/bertwu.com.zone 
$TTL 600

bertwu.com. IN SOA  ns.bertwu.com. qq.bertwu.com. (
	2021090104
	10800
	900 
	604800
	86400	
)

;给客户端返回NS记录,由于是主辅模式,所以需要两台解析
bertwu.com. IN NS ns1.bertwu.com.
bertwu.com. IN NS ns2.bertwu.com.


;将两条NS记录指向两台权威的DNS地址
ns1.bertwu.com. IN A 172.16.1.91
ns2.bertwu.com. IN A 172.16.1.92

;域名解析
www.bertwu.com. IN A 172.16.1.7
blog.bertwu.com. IN A 172.16.1.8





[root@dns-master ~]# cat /var/named/job.com.zone 
$TTL 600
job.com. IN SOA ns.job.com. qq.job.com. (
	2021090103
	10800
	900
	604800
	86400
)

job.com. IN NS   ns1.job.com.
job.com. IN NS   ns2.job.com.

ns1.job.com. IN A 172.16.1.91
ns2.job.com. IN A 172.16.1.92

www.job.com. IN CNAME www.bertwu.com.






[root@dns-master ~]# cat /var/named/1.16.172.zone 
$TTL 600
@ IN SOA 1.16.172.in-addr.arpa. qq.bertu.com.  (

	2021090103
	10800z
	900
	604800
	86400

)

@ IN NS ns1.bertwu.com.
@ IN NS ns2.bertwu.com.

172.16.1.91 IN  PTR ns1.bertwu.com.
172.16.1.92 IN  PTR ns2.bertwu.com.

7  IN PTR   web1.bertwu.com. 
8  IN PTR   web2.bertwu.com. 
51 IN PTR   db.bertwu.com. 
32 IN PTR   nfs.bertwu.com. 

3.检测语法,重启服务

[root@dns-master ~]# named-checkconf
[root@dns-master ~]# rndc reload

4.3.4 Slave服务器配置

1.安装bind服务

[root@dns-slave ~]# yum install bind bind-utils -y

2.修改并添加区域配置文件

[root@dns-slave ~]# vim /etc/named.confoptions {
	...
	listen-on port 53 { any; };
	allow-query     { any; };
	masterfile-format text;
	 ...

4.最终的文件如下

[root@localhost ~]# cat /etc/named.conf 
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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };

	masterfile-format text; //添加此字段



	recursion yes;
	allow-recursion {172.16.1.0/24;};
	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};



zone "bertwu.com" IN {
        type slave;    //从
        file "slaves/bertwu.com.zone";  //数据库文件目录 /var/named/slaves 自动生成无需改动
		masters { 172.16.1.91; };
};

zone "job.com" IN {
        type slave;
        file "slaves/job.com.zone";
		masters { 172.16.1.91; };
};


zone "1.16.172.in-addr.arpa" IN {
        type slave;
        file "slaves/1.16.172.zone";
		masters { 172.16.1.91; };
};





include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

5.检查语法重启服务

[root@dns-slave ~]# named-checkconf
[root@dns-slave ~]# rndc reload

4.3.5 测试主辅解析

[root@client ~]# dig -x 172.16.1.51 @172.16.1.91 +short
db.bertwu.com.
[root@client ~]# dig -x 172.16.1.51 @172.16.1.92 +short
db.bertwu.com.
[root@client ~]# dig -x 172.16.1.32 @172.16.1.91 +short
nfs.bertwu.com.
[root@client ~]# dig -x 172.16.1.32 @172.16.1.92 +short
nfs.bertwu.com.
[root@client ~]# dig -x 172.16.1.7 @172.16.1.91 +short
web1.bertwu.com.
[root@client ~]# dig -x 172.16.1.7 @172.16.1.92 +short
web1.bertwu.com.
[root@client ~]# dig www.bertwu.com @172.16.1.91 +short
172.16.1.7
[root@client ~]# dig www.bertwu.com @172.16.1.92 +short
172.16.1.7
[root@client ~]# dig blog.bertwu.com @172.16.1.91 +short
172.16.1.8
[root@client ~]# dig blog.bertwu.com @172.16.1.92 +short
172.16.1.8
[root@client ~]# dig www.job.com @172.16.1.91 +short
www.bertwu.com.
172.16.1.7
[root@client ~]# dig www.job.com @172.16.1.92 +short
www.bertwu.com.
172.16.1.7

4.3.5 测试主辅同步

主新增一条解析记录,然后滚动 serial

zh.bertwu.com. IN A 172.16.1.150

测试

[root@client ~]# dig zh.bertwu.com. @172.16.1.91 +short
172.16.1.150
[root@client ~]# dig zh.bertwu.com. @172.16.1.92 +short
172.16.1.150

查看辅,可以看到的确将新的解析记录同步过来了

[root@localhost ~]# cat /var/named/slaves/bertwu.com.zone 
$ORIGIN .
$TTL 600	; 10 minutes
bertwu.com		IN SOA	ns.bertwu.com. qq.bertwu.com. (
				2021090106 ; serial
				10800      ; refresh (3 hours)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				86400      ; minimum (1 day)
				)
			NS	ns1.bertwu.com.
			NS	ns2.bertwu.com.
$ORIGIN bertwu.com.
blog			A	172.16.1.8
ns1			A	172.16.1.91
ns2			A	172.16.1.92
www			A	172.16.1.7
zh			A	172.16.1.150

4.3.6 配置DNS高可用

1.linux配置

[root@client ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 172.16.1.91
nameserver 172.16.1.92

2.windows配置
在这里插入图片描述

五、DNS子域授权

5.1 什么是DNS子域授权

5.3.1 父域配置(Master)
1.区域配置文件此前可以复用之前主辅配置,所以无需修改;
2.区域文件数据库文件,将 ops 三级子域授权给子域服务器;

[root@dns-master ~]# cat /var/named/bertwu.com.zone 
$TTL 600

bertwu.com. IN SOA  ns.bertwu.com. qq.bertwu.com. (
	2021090900
	10800
	900 
	604800
	86400	
)

bertwu.com. IN NS ns1.bertwu.com.
bertwu.com. IN NS ns2.bertwu.com.

ns1.bertwu.com. IN A 172.16.1.91
ns2.bertwu.com. IN A 172.16.1.92

www.bertwu.com. IN A 172.16.1.7
blog.bertwu.com. IN A 172.16.1.8
zh.bertwu.com. IN A 172.16.1.150
xx.bertwu.com. IN A 172.16.1.51
sb.bertwu.com. IN A 1.1.1.1

;子域配置(通常子域也应该是主从模式,如果为主从,则应该授权两台NS记录)
ops.bertwu.com. IN NS ns1.ops.bertwu.com.
ns1.ops.bertwu.com. IN A 172.16.1.93

5.3.2 子域配置

1.安装bind
2.修改主配置文件,然后增加子域的配置文件

 listen-on port 53 { any; };
 allow-query     { localhost;any; };



zone "ops.bertwu.com" IN {
        type master;
        file "ops.bertwu.com.zone";
};

3.添加区域数据数据库文件

[root@localhost slaves]# cat /var/named/ops.bertwu.com.zone
$TTL 600
ops.bertwu.com. IN SOA ns.ops.bertwu.com. qq.bertwu.com. (
	2021090103
	10800
	900
	604800
	86400
)


ops.bertwu.com. IN NS ns1.ops.bertwu.com.

ns1.ops.bertwu.com. IN A 172.16.1.93

;配置子域解析记录
www.ops.bertwu.com. IN A 11.11.11.11
sb.ops.bertwu.com. IN A 22.22.22.22

4.检查语法,启动服务

[root@dns-son ~]# named-checkconf 
[root@dns-son ~]# systemctl start named
[root@dns-son ~]# systemctl enable named

5.测试

[root@client ~]# dig www.bertwu.com @172.16.1.92 +short
172.16.1.7
[root@client ~]# dig www.ops.bertwu.com @172.16.1.93 +short
11.11.11.11
[root@client ~]# dig www.ops.bertwu.com @172.16.1.91 +short
11.11.11.11
[root@client ~]# dig sb.ops.bertwu.com @172.16.1.91 +short
22.22.22.22
[root@client ~]# dig sb.ops.bertwu.com @172.16.1.93 +short
22.22.22.22
[root@client ~]# dig sb.ops.bertwu.com @172.16.1.92 +short
22.22.22.22
[root@client ~]# dig www.ops.bertwu.com @172.16.1.92 +short
11.11.11.11

解析父域名

[root@client ~]# dig www.bertwu.com @172.16.1.93 +short # 什么都解析不到
[root@client ~]# 

问题:由于父域与子域互相维护不同的区域配置,它们之间并不存在任何的联系,所以子域在解析父域的域名时,它并不会直接通过父域来获取权威的解析记录,那它会怎么做呢?
第一步:它会先找顶点根域;
第二步:寻找找 com 域对应的 DNS 服务器;
第三步:寻找 bertwu 域对应的 DNS 服务器,而后获取 www 对应的解析记录;这种查找模式是由 DNS 的机制所决定的;
解决的方法:明确告诉子域,让其能找到父域进项查询解析,而无需查找根域;(需要配置 DNS 的转发)

六、DNS转发模式

6.1 什么是DNS转发

转发指的是将域名查询请求,转至某一台服务器解析(被转发的服务器必须允许为当前服务器做递归)
转发分为两类;

  • 区域转发:仅转发对某特定区域的解析请求;
  • 全局转发:针对本地没有通过 zone 定义的区域查询请求,统统转发;

转发参数:

forwarders:转发给哪台服务器;可以多台;
forwarder only:仅转发;
forwarder first:优先转发给对应的服务器查询,如转发器未响应,则自行迭代查询;

6.2 转发配置

全局转发示例配置(所有本地不存在的域名都进行转发)

options {
   ...
   forward { first | only };
   forwarders { SERVER_IP; };
   ...
}

区域转发示例配置(符合该区域则进行条件转发)

zone
"ZONE_NAME" IN {
	type forward;
	forward { first | only };
	forwarders { SERVER_IP; };
};

6.3 DNS区域转发实践

6.3.1 子域配置转发

1.在子域服务器上,添加父域的域名,然后配置转发;

zone "bertwu.com" IN {
        type forward;
        forward first;
        forwarders { 172.16.1.91; 172.16.1.92; };
};

2.检查语法并重载
3.通过子域的地址解析父域的域名

七、智能DNS概述

智能DNS就是根据用户的来源地域,自动智能化判断来路IP返回给用户,而不需要用户进行选择;

7.1 什么是智能DNS

传统DNS解析,不判断访问者来源,会随机选择其中一个IP地址返回给访问者。智能DNS解析,会判断访问者的来源,为不同的访问者智能返回不同的IP地址,可使访问者在访问网站时可获取用户指定的IP地址,能够减少解析时延,并提升网站访问速度。
比如一个企业的站点三个运营商的带宽都有:电信、联通、移动;同样来自三个不同 运营商网络的访问用户,假设电信用户访问企业网站的时候,智能DNS会自动根据IP判断,返回电信服务器节点IP给电信用户,其他运行商也同理;

  • 电信用户:访问 www.bertwu.com 返回1.1.1.1
  • 联通用户:访问 www.bertwu.com 返回2.2.2.2
  • 移动用户:访问 www.bertwu.com 返回3.3.3.3

在这里插入图片描述

7.2 如何实现智能DNS

实现智能DNS需要VIEW视图以及ACL访问控制列表协同完成;
在这里插入图片描述

7.2.1 ACL访问控制

访问控制列表(Access Control Lists,ACL)

  • ACL访问控制列表,是用来限制哪些主机可以通过DNS查询,哪些不可以;
  • 系统默认内置了四种ACL
  • any:允许所有主机节点查询;
  • none:拒绝所有主机节点查询;
  • localhost:仅允许本地接口网络主机查询;
  • localnet:本地子网所有IP;

当然内置的可能无法满足企业需求,所以我们也可以自定义ACL规则;

//简单ACL规则定义
ac1 "ips" {    //定义一个名为ips的ACL
10.0.0.1;10.0.0.2;192.168.1.1; //包含3个单个IP
172.16.1.0/24;
...
};


//复杂ac1规则定义
ac1 "a11_rule" //定义一个名为a11_rule的ACL
"ips "; //可以嵌套包含其他ACL
10.0.15.0/24; //包含10.0.15.0子网中的所有IP
!10.0.16.1/24; //非10.0.16.1子网的IP
{10.0.17.1;10.0.18.2;}; //包含了一个IP组
localhost; //本地网络接口IP(含实际接口IP和127.0.0.1)
};

定义的acl规则如何使用

allow-update { "ips"; }; //允许谁能更新
allow-transfer { "a11_rule";};//允许谁能同步

7.2.2 VIEW视图功能

view 语句定义了视图功能,视图是BIND9提供的强大功能,允许DNS服务器根据不同的客户端,请求相同的域名,但返回不同的解析结果;
view语法示例:

view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_1ist } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
[zone; ....]
};

7.3 智能DNS场景实践

  1. 维护一个主机域;根据不同环境的IP地址,查询相同域名,返回不同的结果;(企业常用)
  2. 维护一个业务域,根据不同的运行商IP地址,解析到不同的地址;(需要大量IP地址库)

7.3.1 定义ACL规则

//模拟测试业务地址段
acl "test" {
        172.16.1.10;
};
//模拟生产业务地址段
acl "prod" {
        172.16.1.93;
};

7.3.2 总配置文件如下

[root@dns-master ~]# cat /etc/named.conf
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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };

	allow-transfer {172.16.1.92;};
	also-notify {172.16.1.92;};




	recursion yes;
	allow-recursion {172.16.1.0/24;};
	dnssec-enable yes;
	dnssec-validation yes;


	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};


acl "test" {
	172.16.1.10;
};

acl "prod" {
	172.16.1.93;
};


//定义测试环境视图
view "test-project" {
	match-clients { "test"; };
	recursion yes;
	zone "example.com" {
		type master;
		file "test/example.com.zone";
	};

	zone "." IN {
        type hint;
        file "named.ca";
	};


};

//定义生产环境视图
view "prod-project" {
        match-clients { "prod"; };
        recursion yes;
        zone "example.com" {
                type master;
                file "prod/example.com.zone";
        };

	zone "." IN {
        type hint;
        file "named.ca";
        };
};


// 定义默认视图
view "default" {
        match-clients { "any"; }; //匹配其他的ip
        recursion yes;
        zone "example.com" {
                type master;
                file "default/example.com.zone";
        };

	zone "." IN {
        type hint;
        file "named.ca";
        };
};


#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

默认域名解析与测试环境保持一致

[root@dns-master ~]# cat /var/named/test/example.com.zone 
$TTL 600
example.com. IN SOA ns.example.com. qq.example.com. (
	20211111
	10800
	900
	604800
	86400
)

example.com. IN NS ns1.example.com.

ns1.example.com. IN A 172.16.1.91

www.example.com. IN A 4.4.4.4

生产环境数据库

[root@dns-master ~]# cat /var/named/prod/example.com.zone 
$TTL 600
example.com. IN SOA ns.example.com. qq.example.com. (
	20211111
	10800
	900
	604800
	86400
)

example.com. IN NS ns1.example.com.

ns1.example.com. IN A 172.16.1.91



www.example.com.  IN A 5.5.5.5

默认环境数据库,只需要对test目录做 一个软连接到default目录,注意权限属组为named

7.3.3 测试不同ip请求同一域名www.example.com 返回不同解析

[root@client ~]# dig www.example.com @172.16.1.91 +short
4.4.4.4


[root@dns-son ~]# dig www.example.com @172.16.1.91 +short
5.5.5.5


# 默认与测试环境保持一致
[root@dns-slave ~]# dig www.example.com @172.16.1.91 +short
4.4.4.4

7.3.4 多域名智能DNS实现

只需要在view视图中定义zone 然后写相应的zone区域数据库文件即可

acl "test" {
	172.16.1.10;
};

acl "prod" {
	172.16.1.93;
};

view "test-project" {
	match-clients { "test"; };
	
	recursion yes;
	zone "example.com" {
		type master;
		file "test/example.com.zone";
	};

	zone "." IN {
        type hint;
        file "named.ca";
	};

	zone "bertwu.com" IN {
		type master;
		file "test/bertwu.com.zone";
	 };
};

view "prod-project" {
        match-clients { "prod"; };
        recursion yes;
        zone "example.com" {
                type master;
                file "prod/example.com.zone";
        };

	zone "bertwu.com" IN {
                type master;
                file "prod/bertwu.com.zone";
         };


	zone "." IN {
        type hint;
        file "named.ca";
        };
};

view "default" {
        match-clients { "any"; };
        recursion yes;
        zone "example.com" {
                type master;
                file "default/example.com.zone";
        };


	 zone "bertwu.com" IN {
                type master;
                file "default/bertwu.com.zone";
         };


	zone "." IN {
        type hint;
        file "named.ca";
        };
};


#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

需要default返回测试环境定义的ip 只需要给default/bertwu.com.zone为 test下面对应的文件的软连接或硬连接即可。

[root@client ~]# dig www.bertwu.com @172.16.1.91 +short
8.8.8.8
[root@dns-son ~]# dig www.bertwu.com @172.16.1.91 +short
7.7.7.7
[root@dns-slave ~]# dig www.bertwu.com @172.16.1.91 +short
8.8.8.8

7.4智能DNS主从场景实践

基于TSIG KEY实现多view主从同步,TSIG KEY是基于对称密钥加密技术实现的DNS报文认证机制。·密钥生成后存放至通信双方的配置文件中,报文传送前使用对称加密技术;

7.4.1生成TSIG-KEY

使用BIND自带的工具ddns-confgen生成 TSIG-KEY,每个view需要一对TSIG-KEY

[root@dns-slave ~]# ddns-confgen -a hmac-md5
# 生成的key为秘钥
key "ddns-key" {
	algorithm hmac-md5;
	secret "lCm3/QgazXr4TWAJF5h8ng==";
};

执行三次,得到三对对称秘钥

key "test-key" {
	algorithm hmac-md5;
	secret "lCm3/QgazXr4TWAJF5h8ng==";
};


key "prod-key" {
	algorithm hmac-md5;
	secret "i1wKS+csvggMPaiYqIvgjA==";
};


key "default-key" {
	algorithm hmac-md5;
	secret "nOyzIgpHDUgeu16PWguuiQ==";
};

master主配置文件

acl "test" {
	172.16.1.10;
};

acl "prod" {
	172.16.1.93;
};


key "test-key" {
	algorithm hmac-md5;
	secret "lCm3/QgazXr4TWAJF5h8ng==";
};


key "prod-key" {
	algorithm hmac-md5;
	secret "i1wKS+csvggMPaiYqIvgjA==";
};


key "default-key" {
	algorithm hmac-md5;
	secret "nOyzIgpHDUgeu16PWguuiQ==";
};





view "test-project" {
	//须取消两台DNS主机通过地址匹配,使其通过 TSIG-KEY匹配,如果不取消会出现拒绝访问
	match-clients { key test-key; !172.16.1.91;!172.16.1.92; "test"; };
	// /Master节点与SLave节点通讯使用 key-test
	server 172.16.1.92 { keys test-key; };
	//允许从使用key传输文件
	allow-transfer { key test-key; };
	recursion yes;
	zone "example.com" {
		type master;
		file "test/example.com.zone";
	};

	zone "." IN {
        type hint;
        file "named.ca";
	};

	zone "bertwu.com" IN {
		type master;
		file "test/bertwu.com.zone";
	 };
};

view "prod-project" {
	match-clients { key prod-key; !172.16.1.91;!172.16.1.92; "prod"; };
        server 172.16.1.92 { keys prod-key; };
        allow-transfer { key prod-key; };

        recursion yes;
        zone "example.com" {
                type master;
                file "prod/example.com.zone";
        };

	zone "bertwu.com" IN {
                type master;
                file "prod/bertwu.com.zone";
         };


	zone "." IN {
        type hint;
        file "named.ca";
        };
};

view "default" {
	match-clients { key default-key; !172.16.1.91;!172.16.1.92; "any"; };
        server 172.16.1.92 { keys default-key; };
        allow-transfer { key default-key; };

        recursion yes;
        zone "example.com" {
                type master;
                file "default/example.com.zone";
        };


	 	zone "bertwu.com" IN {
                type master;
                file "default/bertwu.com.zone";
         };


		zone "." IN {
        type hint;
        file "named.ca";
        };
};


#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


slave从配置文件

acl "test" {
	172.16.1.10;
};

acl "prod" {
	172.16.1.93;
};


key "test-key" {
	algorithm hmac-md5;
	secret "lCm3/QgazXr4TWAJF5h8ng==";
};


key "prod-key" {
	algorithm hmac-md5;
	secret "i1wKS+csvggMPaiYqIvgjA==";
};


key "default-key" {
	algorithm hmac-md5;
	secret "nOyzIgpHDUgeu16PWguuiQ==";
};





view "test-project" {
	match-clients { key test-key; !172.16.1.91;!172.16.1.92; "test"; };
	server 172.16.1.91 { keys test-key; };
	recursion yes;
	zone "example.com" {
		type slave;
		file "test/example.com.zone";
		 masters { 172.16.1.91; };

	};

	zone "." IN {
        type hint;
        file "named.ca";
	};

	zone "bertwu.com" IN {
		type slave;
		file "test/bertwu.com.zone";
		 masters { 172.16.1.91; };

	 };
};

view "prod-project" {
	match-clients { key prod-key; !172.16.1.91;!172.16.1.92; "prod"; };
        server 172.16.1.91  { keys prod-key; };

        recursion yes;
        zone "example.com" {
                type slave;
                file "prod/example.com.zone";
		masters { 172.16.1.91; };
        };

	zone "bertwu.com" IN {
                type slave;
                file "prod/bertwu.com.zone";
		 masters { 172.16.1.91; };

         };


	zone "." IN {
        type hint;
        file "named.ca";
        };
};

view "default" {
	match-clients { key default-key; !172.16.1.91;!172.16.1.92; "any"; };
        server 172.16.1.91 { keys default-key; };

        recursion yes;
        zone "example.com" {
                type slave;
                file "default/example.com.zone";
		 masters { 172.16.1.91; };

        };


	 zone "bertwu.com" IN {
                type slave;
                file "default/bertwu.com.zone";
		 masters { 172.16.1.91; };

         };


	zone "." IN {
        type hint;
        file "named.ca";
        };
};




#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


测试

[root@client ~]# dig www.bertwu.com @172.16.1.91 +short
8.8.8.8
[root@client ~]# dig www.bertwu.com @172.16.1.92 +short
8.8.8.8
[root@client ~]# dig www.example.com @172.16.1.92 +short
4.4.4.4
[root@client ~]# dig www.example.com @172.16.1.91 +short
4.4.4.4

八、DNS接入项目

master :


 zone "." IN {
        type hint;
        file "named.ca";
        };





zone "bertwu.online" IN {
	type master;
	file "bertwu.online.zone";
	
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";






区域配置文件
[root@dns-master ~]# cat /var/named/bertwu.online.zone 
$TTL 600

bertwu.online. IN SOA  ns.bertwu.online. qq.bertwu.online. (
	2021090907
	10800
	900 
	604800
	86400	
)

bertwu.online. IN NS ns1.bertwu.online.
bertwu.online. IN NS ns2.bertwu.online.

ns1.bertwu.online. IN A 172.16.1.91
ns2.bertwu.online. IN A 172.16.1.92


blog.bertwu.online. IN A 10.0.0.200
zrlog.bertwu.online. IN A 10.0.0.200

slave:

 zone "." IN {
        type hint;
        file "named.ca";
        };


zone "bertwu.online" IN {
        type slave;
        file "slaves/bertwu.online.zone";
        masters { 172.16.1.91; };
};
     

修改vmnet8网卡
在这里插入图片描述
删除本地hosts文件,然后浏览器测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值