DNS

​ 域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。

​ 互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。

关于DNS域

根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本(目前通过雪人计划在全球部署IPV6根服务器解决了中国没有根服务器的现象)
在安装DNS服务后可以通过  vim /var/named/named.cd 文件查看根服务器地址
一级域名:Top Level Domain: tld
	三类:
		组织域
		国家域(.cn, .ca, .hk, .tw)
		反向域  com, edu, mil, gov, net, org, int,arpa 
二级域名:magedu.com
三级域名:study.magedu.com
最多可达到127级域名

DNS的查询与解析

DNS的查询分为俩个类型

递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后, 若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结 果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询

迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对 方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起 进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需 要发起多次查询

DNS的解析类型

FQDN --> IP 正向解析

IP --> FQDN 反向解析

DNS查询过程

Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS… 

DNS的各种角色及定义

DNS服务器类型

主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器"复制"(区域传输)解析库副本
	序列号:解析库版本号,主服务器解析库变化时,其序列递增
	刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
	重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
	过期时长:从服务器联系不到主服务器时,多久后停止服务
	通知机制:主服务器解析库发生变化时,会主动通知从服务器	
缓存DNS服务器(转发器)

DNS的各种资源记录

name [TTL] IN rr_type value
注意:
1. TTL可从全局继承
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

dns的解析是由众多资源记录RR(Resource Record)组成的

记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解 析库的第一条记录

A:internet Address,作用,FQDN --> IP

AAAA:FQDN --> IPv6

PTR:PoinTeR,IP --> FQDN

NS:Name Server,专用于标明当前区域的DNS服务器

CNAME : Canonical Name,别名记录

MX:Mail eXchanger,邮件交换器

TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮 件)记录

DNS综合实验

实验环境及规划如下图

微信图片编辑_20220101195043.jpg

实验提前准备

关闭SElinux
关闭防火墙
时间同步
在除了WEB服务器和客户端之外全部安装BIND服务
每台设备按照上图要求配置网络(IP地址及DNS地址)
#client配置
root@client-1:/# cat /etc/netplan/eth0.yaml 
network:
  ethernets:
    eth0:
      addresses:
      - 10.0.0.101/24
      gateway4: 10.0.0.2
      nameservers:
        addresses:
        - 10.0.0.27
  version: 2

安装WEB服务器

root@web-1:/# apt -y install apache2  #安装http服务
root@web-1:/# echo "hello,word!" > /var/www/html/index.html   #重写网页
root@web-1:/# systemctl enable --now apache2  #开启服务并设置开机自启动
root@web-1:/# curl 127.0.0.1  #出现此结果即为正常
hello,word!

配置根域服务器

[root@root ~]# yum -y install bind #安装服务
[root@root ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
#修改下面配置
zone "." IN {
    type master;
    file "root.zone";                                                                                                                                                            
};
#创建一下配置文件
[root@shicentos8-1 named]# vim /var/named/root.zone   #需注意权限问题应与/var/named/named.localhost相同
$TTL 1D
@   IN SOA  master  rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master  
com     NS  coms
master  A  10.0.0.8
coms    A  10.0.0.18   
[root@root named]# chown :named /var/named/root.zone    
[root@root named]# chmod 640 /var/named/root.zone
[root@root named]# systemctl enable --now named   #开启服务
[root@root named]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务

配置.com服务器

[root@comdns ~]# yum -y install bind #安装服务
[root@comdns ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
[root@comdns ~]# vim /etc/named.rfc1912.zones  #最下方添加
zone "com" IN{
    type master;
    file "com.zone";                                                                                  };
[root@comdns ~]# cp -p /var/named/named.localhost /var/named/com.zone 
[root@comdns ~]# vim /var/named/com.zone
$TTL 1D
@   IN SOA  master rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
test    NS  test1
test    NS  test2
master  A   10.0.0.18
test1   A   10.0.0.7
test2   A   10.0.0.17       
[root@comdns ~]# systemctl enable --now named   #开启服务
[root@comdns ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务

test.com主DNS服务器

[root@test.com ~]# yum -y install bind #安装服务
[root@test.com ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行添加最后一行
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
	allow-transfer { 10.0.0.17; }; #只允许从服务器同步数据库
[root@test.com ~]# vim /etc/named.rfc1912.zones  #最下方添加
zone "test.com" IN {
    type master;
    file "test.com.zone"; 
 };
[root@test.com ~]# cp -p /var/named/named.localhost /var/named/test.com.zone
[root@test.com ~]# vim /var/named/test.com.zone
$TTL 1D
@   IN SOA  master  rname.invalid. (
                    1   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS  master
    NS  slave
master  A   10.0.0.7
slave   A   10.0.0.17
www     A   10.0.0.100
[root@test.com ~]# systemctl enable --now named   #开启服务
[root@test.com ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务

test.com从DNS服务器

[root@test.com-slave ~]# yum -y install bind #安装服务
[root@test.com-slave ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行添加最后一行
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
allow-transfer { none;}; #从服务器不允许主机同步数据库
[root@test.com-slave ~]# vim /etc/named.rfc1912.zones  #最下方添加
zone "test.com" IN {
    type slave;
    masters { 10.0.0.7;};
    file "slaves/test.com.salave";
};   
[root@test.com-slave ~]# systemctl enable --now named   #开启服务
[root@test.com-slave ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务
[root@test.com-slave ~]# ls /var/named/slaves/    #查看区域数据库是否形成
test.com.salave

转发目标服务器

[root@forward-dns ~]# yum -y install bind #安装服务
[root@forward-dns ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行并修改
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
    dnssec-enable no;   #关闭DNS安全扩展
    dnssec-validation no;  #关闭DNS安全扩展

[root@forward-dns ~]# vim /var/named/named.ca # 修改根配置文件
;; ANSWER SECTION:
.           518400  IN  NS  a.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net. 518400  IN  A   10.0.0.8 
[root@forward-dns ~]# systemctl enable --now named   #开启服务
[root@forward-dns ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务

本地缓存服务器

[root@local-dns ~]# yum -y install bind #安装服务
[root@local-dns ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行
options {
#   listen-on port 53 { 127.0.0.1; };
#   allow-query     { localhost; };
#修改下面行
dnssec-enable no;   #关闭DNS安全扩展
dnssec-validation no;  #关闭DNS安全扩展
#添加下面行
  	forward     only;  #设置全局转发first模式
    forwarders  { 10.0.0.28; };  #设置转发ip
#first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
#only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询
[root@local-dns ~]# systemctl enable --now named   #开启服务
[root@local-dns ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务   

测试

建议在测试之前每台主机清除DNS缓存避免错误传递测试结果

root@client:~# systemd-resolve --flush-caches
#centos默认没有启用缓存安装nscd包可以支持
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd
#查看缓存统计信息
[root@centos7 ~]#nscd -g
#清除DNS客户端缓存
[root@centos7 ~]#nscd -i hosts

客户端配置

root@client:~# cat /etc/netplan/eth0.yaml 
network:
  ethernets:
    eth0:
      addresses:
      - 10.0.0.101/24
      gateway4: 10.0.0.2
      nameservers:
        addresses:
        - 10.0.0.27
  version: 2
root@client:~# systemd-resolve --flush-caches
root@client:~# dig www.test.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9664
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.			IN	A

;; ANSWER SECTION:
www.test.com.		85078	IN	A	10.0.0.100

;; AUTHORITY SECTION:
test.com.		85078	IN	NS	test2.com.
test.com.		85078	IN	NS	test1.com.

;; ADDITIONAL SECTION:
test1.com.		85078	IN	A	10.0.0.7
test2.com.		85078	IN	A	10.0.0.17

;; Query time: 0 msec
;; SERVER: 10.0.0.27#53(10.0.0.27)
;; WHEN: Sun Jan 02 07:16:10 CST 2022
;; MSG SIZE  rcvd: 129

root@client:~#