一、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域名结构
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。
- 互联网中的域名是有结构有规划的;
- 由于域名进行了分级,在进行域名和P地址解析时能更容易找到;。
- 域名具备全球唯一性;
- 根域:知道所有顶级域名服务器的域名和地址
- 全世界只有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
- 客户端查询DNS服务,如当前DNS无法提供权威解析,则返回一条NS记录;
- 客户端在通过 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 自定义区域(域名)
自定义域分为如下两类:
- 主机域(内网):
- 主机域其实是一个假的域名;
- 主机域是不能解析到互联网上;
- 主机域它只对局域网提供服务;
- 业务域(公网):
- 业务域一般都是真实可用的;
- 业务域是需要对外网用户提供服务的域名;
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记录
- 自定义域
zone "bertwu.com" IN {
type master;
file "bertwu.com.zone";
};
- 自定义数据库文件
注:;为注释
[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 实战
- 反向区域文件名称为 逆向网络地址 加 .in-addr.arpa. 后缀组成
- 反向区域数据库文件 完全格式为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 递归查询参数配置
参数 | 选项 | 作用 |
---|---|---|
recurison | yes/no | 是否开启递归查询请求 |
allow-recursion | `{address_match_list | any |
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场景实践
- 维护一个主机域;根据不同环境的IP地址,查询相同域名,返回不同的结果;(企业常用)
- 维护一个业务域,根据不同的运行商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文件,然后浏览器测试。