[linux系列|DNS]DNS详解①

背景

         前面我们做的所有实验,都是通过一个域名去访问web页面,实际上我们都是通过配置HOST解析来实现的,在实际生产中需要通过DNS进行解析,来获取域名对应的ip(或者ip对应的域名)。本章节我们将从如下几个方面说说dns:
        1.   dns的基本概述;
        2.   dns实现基本原理;
        3.   dns的记录类型;
        4.   A记录,NS记录,CNAME记录,PTR记录的实验!

DNS基本概述

1.    为什么需要域名?

         在互联网中,使用ip地址与服务器进行通信是行不通的,因为IP地址不好记忆,同时IP地址可能会经常变更,所以此时DNS协议就应运而生,然而DNS解决了什么问题呢?

        DNS主要用来管理域名与IP地址的对应关系表。

2     什么是DNS?

         DNS(Domain  Name  System)是“域名系统”的英文缩写,它所提供的服务是用来将域名转换为IP地址的工作。DNS就是一位翻译官,基本工作原理如下:

[linux系列|DNS]DNS详解①_第1张图片

 3.    DNS域名结构

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

        1.    互联网中的域名是有结构有规划的;
        2.    由于域名进行了分级,在进行域名和ip地址解析时能更容易找到;
        3.    其次域名具有全球唯一性。

[linux系列|DNS]DNS详解①_第2张图片

 根域:知道所有顶级域名服务器的域名和ip地址。

        全世界只有13组根域服务器,其中10组设置在美国,另外三组设置在英国,瑞典,日本。

顶级域:指导所有顶级域名服务器下注册的所有二级域名的ip地址

        顶级域有两种:通用域(com,cn)和国家域(hk,jp)

        顶级域名由ICANN(互联网名称与数字地址分配机构)委任的注册机构负责运行;

二级域:负责一个区域的域名服务器(aliyun.com)

        无需到ICANN进行申请,只需要到运行顶级域的注册机构(阿里,腾讯)去申请;

        如果申请的域名没有被注册,也没有被注册为商标,仅需要缴费一笔年费即可得到域名;

三级域或主机:根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如(www,ops)

4.  DNS查询原理 

         DNS查询的结果通常会在本地域名服务器中进行缓存,如果本地域名服务器中有缓存的情况下,则会跳过如下DNS查询步骤,很快返回解析结果。 
        没有缓存的情况下,解析步骤如下:
        1.    用户在浏览器中输入example.com,则由本地域名服务器开始递归查询; 
        2.    本地域名服务器采用迭代查询的方式,向根域名服务器进行查询。
        3.    根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器.  TLD的IP地址;
        4.    本地域名服务器向顶级域名服务器.com  TLD进行查询。
        5.    .com  TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的ip地址;
        6.    本地域名服务器向example.com权威域名服务器发送查询;
        7.    example.com权威域名服务器告诉本地域名服务器所查询的主机ip地址;
        8.    本地域名服务器最后把查询到的ip地址相应给浏览器。

[linux系列|DNS]DNS详解①_第3张图片

[linux系列|DNS]DNS详解①_第4张图片

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

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

 5.    DNS记录类型

 1.    A记录

         A记录可实现将域名指向IP地址,也称为正向解析;
        正向解析:域名---->dns服务器返回ip

[linux系列|DNS]DNS详解①_第5张图片

2.    PTR

         PTR记录可以实现IP查询域名,也称为反向解析;
        反向解析:IP----->DNS服务返回域名

[linux系列|DNS]DNS详解①_第6张图片

 3.    CNAME

         当需要将域名指向另外一个域名,在由另外一个域名提供IP地址,就需要添加CNAME记录。
        最常用的CNAME的场景有WAF,CDN

[linux系列|DNS]DNS详解①_第7张图片

 4.    NS

         1.  客户端查询DNS服务,如果当前DNS无法提供权威解析,则返回一条NS记录;
         2.  客户端在通过NS记录中提供的DNS权威服务器进行解析; [linux系列|DNS]DNS详解①_第8张图片

 6.   为什么要自建DNS

         企业常规做法:购买域名,完成ICP备案,并使用公网DNS服务进行免费(付费)解析。

为什么需要:

        1.    内网web服务,例如jenkins,jumpserver,wiki等,不适合解析至公网;
        2.    内网中间件服务DB,MQ等,由于会经常迁移或扩容,应该使用域名对外提供,便于维护。
        3.    服务器都要hostname,hostname应该设置为FQDN,需要维护主机名和主机的内网ip对应关系。

BIND实验 

 1.    什么是bind

BIND是一个开源的,稳定的,应用广泛的DNS服务;

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

2.    bind安装

root@Client:~# sudo  apt  install  -y   bind9   bind9-utils

root@Client:~# systenctl  start named

root@Client:~# systemcatl   enable  named


bind9:通过主程序包
bind9-utils:提供工具包(dig   nslookup)

3.    bind配置文件

         3.1    主要配置文件格式

options{}:全局选项(监听端口,数据文件存储位置,缓存位置,权限等)

logging{}:服务日志选项

zone{}:自定义区域配置

include{}:包含文件

         3.2    配置文件示例

options 的参数设置会影响整个 BIND9 DNS环境的配置,具体各部分常用到的配置参数如下:
options{
listen-on:   用于配置监听的端口以及IPv4地址,默认的监听端口为:53;

listen-on-v6:用于监听 IPv6 地址以及端口;

directory:    用于指定读取DNS数据文件的文件夹,默认的文件夹的路径为:/var/cache/bind;

dump-file:   选项用来设置域名缓存数据库文件的位置,可以自己定义。默认的存储文件为:
named_dump.db;
statistics-file:     选项用来设置状态统计文件的位置,可以自己定义。;

memstatistics-file : 选项用来设置服务器输出的内存使用统计信息。默认保存在 /var/named/data 目录下,文件名为 named.memstats;

allow-query:        选项用来设置允许DNS查询的客户端地址,默认值为localhost, 可以设置为某个网段、任意地址、具体的某台主机三种情况。例如,要修改为任意地址,就在括号内的加入 any,也可以引用之前创建的 acl 内的所有地址;
recursion:用于设置递归查询,一般客户机和服务器之间属于递归查询,即当客户机向DNS服务器发出查询请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。此选项有yes和no两个值。这个选项用于设置 Failover 非常有用;

dnssec-enable: 选项用来设置是否启用DNSSEC支持,DNSSEC可以用来验证DNS数据的有效性,该选项有yes和no两个值,默认值为yes。

dnssec-validation:选项用来设置是否启用DNSSEC确认,默认值为yes,可以选择 auto。

bindkeys-file : 用来设置内置信任的密钥文件,其默认值为 /etc/named/iscdlv.key;

managed-keys-directory: 选项用于指定目录中的文件存储位置,跟踪管理 DNSSEC 密钥, 这部分的内容在后边会有介绍;
forwarders:DNS转发器。用于设定该DNS解析服务器无法进行当前域名解析的情况下,进行转发解析的DNS地址,其中 8.8.8.8 和 8.8.4.4 是谷歌的免费DNS服务器的网络地址;233.5.5.5 和 233.6.6.6 是阿里云的免费DNS地址。当设置了 forwarder 的转发器之后,所有的非本域的和在缓存中无法查找到的域名查询都转发都设置的DNS转发器,由DNS转发器 完成转发操作。因此这台转发器的缓存中就记录了丰富的域名信息。因此如果遇到非本域的查询,转发器的缓存就可以做到查询,从而减少了向外部的查询流量。

forward: 选择默认的IP地址即可;

rrset-order: 在 BIND 9 提供的负载均衡策略建立在一个名称(域名 - Name)使用多个资源记录 ( Records ) 的情况下,其实现的轮询机制并不是传统的负载均衡服务器实现的轮询机制 - 即追踪和记录每一次应答的资源顺序;
BIND 9 实现了一个类似 List 的数据结构,将所有的资源记录填入到 一个顺序表中,这个填入的次序随机,或者根据设定的参数随机;
格式:[class class_name] [type type_name] [name “domain_name”] order ordering
如果参数没有被赋值,那么默认的赋值为: class: ANY type: ANY Name: *
参数:
    fixed : 根据 zone 文件定义资源记录的顺序按照顺序逐个进行解析;
    random: 根据 zone 文件资源记录随机返回解析记录;
    cyclic: 创建一个循环,循环输出资源记录;
    none: 完全随机的资源返回形式;

}

         ubuntu系统下安装bind9后的配置文件如下:

 /etc/bind         配置文件路径

named.conf         主配置文件,(可以下options,logging,zone,include)
root@Client:/etc/bind# cat named.conf
##  include引入定义全局选项的文件
include "/etc/bind/named.conf.options";
##  引入定义zone文件
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";


##  通过/etc/bind/named.conf.default-zones文件定义的zone区域,以下是记录各个zone中的详细信息
root@Client:/etc/bind# ls -l
total 48
-rw-r--r-- 1 root root 2403  5月 17 19:38 bind.keys
-rw-r--r-- 1 root root  237  8月 25  2020 db.0
-rw-r--r-- 1 root root  271  8月 25  2020 db.127
-rw-r--r-- 1 root root  237  8月 25  2020 db.255
-rw-r--r-- 1 root root  353  8月 25  2020 db.empty
-rw-r--r-- 1 root root  270  8月 25  2020 db.local

4.    实战场景1-正向解析(A记录)

用户通过DNS服务器10.10.10.128解析www.example.com
        1.    添加example.com区域配置文件;
        2.    添加区域数据库文件,配置NS记录返回DNS权威 服务器地址;
        3.    该区域的权威DNS地址为10.10.10.128
        4.    添加该域的A记录解析

[linux系列|DNS]DNS详解①_第9张图片

         1.    定义zone区域;(可直接写在现有的zone的配置文件中,也可添加新的zone文件,在通过include进行导入。)

root@Client:/etc/bind# cat named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

##  添加新的zone文件
include "/etc/bind/laox.zone";


##  定义zone,并指定zone的详细内容在/etc/bind/example.com中
root@Client:/etc/bind# cat /etc/bind/laox.zone 
zone "example.com" {
   type master;
   file "/etc/bind/example.com";
};

 2.    编写zone区域的数据库文件        ;


##  定义zone的详细内容
root@Client:/etc/bind# cat /etc/bind/example.com

;DNS失效时间,单位不加默认为s
$TTL 1h

;区域名称    IN    SOA    example.com.(与区域名称一致)    邮箱
;区域名称可以用@,则表示当前区域
example.com.       IN      SOA     example.com.    root.example.com. (
        2022071715    ;序列号,十进制,不能超过十位,通常使用日期时间戳2022071715
        24h    ;(refresh  time)刷新时间,即每隔多久到主服务器查询一次
        2h    ;(retry time)重试时间,即刷新不成功多久后重试,应该小于refresh  time
        28d    ;(expire time)过期时间,当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为缓存是有效的    
        2d    ;权威应答的ttl;缓存dns服务器可以缓存记录多长时间
)

;给客户端返回NS记录
;Name Servers
example.com.       IN      NS	ns1.example.com.


;A记录,配置权威域名的真实ip地址
ns1.example.com.  IN      A	10.10.10.128

;正常的域名解析
www	IN	A	1.1.1.1
opt	IN	A	2.2.2.2
xhz	IN	A	10.101.1.1

3.   dig解析

 5.    实战场景2-正向解析(A记录-NS指向)

用户通过DNS服务器10.10.10.129解析opt.example.com
        1.    添加example.com区域配置文件;
        2.    添加区域数据库文件,配置NS记录返回DNS权威 服务器地址;
        3.    该区域的权威DNS地址为10.10.10.128
        4.    添加该域的A记录解析 

[linux系列|DNS]DNS详解①_第10张图片

 10.10.10.128配置

root@Client:/etc/bind# cat example.com 
$TTL 1h
example.com.       IN      SOA     example.com.    root.example.com. (
        2019080901
        24h
        2h
        28d
        2d 
)

;Name Servers
;example.com.       IN      NS	ns1.example.com.


;Other Servers

;ns1.example.com.	IN      A	10.10.10.128
.example.com.	IN      A	10.10.10.128

www	IN	A	1.1.1.1
opt	IN	A	2.2.2.2
xhz	IN	A	10.101.1.1

10.10.10.129配置

root@Route:/etc/bind# cat example.com 
$TTL 1h
example.com.       IN      SOA     example.com.    root.example.com. (
        2019080901
        24h
        2h
        28d
        2d 
)

;Name Servers
example.com.       IN      NS	ns1.example.com.
www.example.com.	IN	NS	ns1.example.com.
opt.example.com.	IN	NS	ns1.example.com.


;Other Servers
ns1.example.com.  IN      A	10.10.10.128

测试

[linux系列|DNS]DNS详解①_第11张图片

 6.    实战场景3-CNAME解析

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

[linux系列|DNS]DNS详解①_第12张图片

 配置:

##  前面opt。example.com的解析已经配置
root@Client:/etc/bind# cat job.com 
$TTL 1h
job.com.       IN      SOA     job.com.    root.job.com. (
        2019080901
        24h
        2h
        28d
        2d 
)

;Name Servers
job.com.       IN      NS	ns1.job.com.


;Other Servers

ns1.job.com.	IN      A	10.10.10.128

www	IN	CNAME	opt.example.com.

 测试

6.    实战场景4-PTRE解析(反向解析)

 配置反向解析PTR--->ip---->FQDN
        1.    反向区域文件名称为逆向网络地址,加.in-addr.arpa.后缀组成;
        2.    反向区域数据库文件,例如10.0.0.200的name为200,完全格式为200.0.0.10.in-addr.arpa.
建议维护一个主机域,然后再维护主机域的反向解析,

[linux系列|DNS]DNS详解①_第13张图片 

 128 PTR配置

root@ns1:/etc/bind# cat laox.zone 
zone "0.0.10.in-addr.arpa" {
	type master;
	file "/etc/bind/0.0.10.zone";
};
root@ns1:/etc/bind# 
root@ns1:/etc/bind# 
root@ns1:/etc/bind# cat 0.0.10.zone 
$TTL 1h
@       IN      SOA     0.0.10.in-addr.arpa.    root.example.com. (
        2019080901
        24h
        2h
        28d
        2d 
)

;Name Servers
@       IN      NS	ns1.example.com.


;Other Servers

128.10.10.10	IN      PTR	ns1.example.com.

11	IN	PTR	xhz.example.com.
12	IN	PTR	flf.example.com.
root@ns1:/etc/bind# 

 测试

[linux系列|DNS]DNS详解①_第14张图片

 7.    工具的使用

##  通过哪个DNS来解析域名,正向解析
dig   www.example.com   @10.10.10.128

##通过ip解析对应的域名,反向解析
dig  -x  10.0.0.11   @10.10.10.128

##通过dig仅查A记录
dig   -t  a  example.com

##通过dig查看区域传送配置
dig   -t  AXFR   example.com   @10.10.10.128

#nslookup正向解析
nslookup   opt.example.com

##nslookup 反向解析
nslookup   10.0.0.11

 

你可能感兴趣的:(linux基础,linux,服务器,运维,架构)