目录
? ? ? 当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.baidu.com,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。
- ?DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。
- ?它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp:名字解析, 53/tcp:主从服务器之间的同步。
- ?实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。
- ?根据地址解析的方向不同,DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区域(包含 IP 地址到域名的解析记录)
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,
但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定
其他 DNS 服务器作为解析来源。
主域名服务器:管理和维护所负责解析的域内解析库的服务器
从域名服务器
从主服务器或从服务器"复制"(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
通知机制:主服务器解析库发生变化时,会主动通知从服务器
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手)
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。(需要自己动手)
正向解析查询过程:
①先查本机的缓存记录
②查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理 以上过程成为递归查询:我要一个答案你直接会给我结果
④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
⑦求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
区域解析库:由众多资源记录RR(Resource Record)组成
name [TTL] IN rr_type value
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX,TXT
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。
A(internet Address):作用,域名解析成IP地址
AAAA(FQDN): --> IPV6
PTR(PoinTeR):反向解析,ip地址解析成域名
NS(Name Server):,专用于标明当前区域的DNS服务器,服务器类型为域名服务器
CNAME : Canonical Name,别名记录
MX(Mail eXchanger)邮件交换器
TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等
SOA记录与NS记录的区别:
NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;
SOA记录设置一些数据版本和更新以及过期时间等信息。
name: 当前区域的名字,例如"kgc.com."
value: 有多部分组成
注意:
当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换。例如:admin.kgc.com
主从服务区域传输相关定义以及否定的答案的统一的TTL
范例:
name ? ? ? ? ? ? ?[TTL] ? ? ? ? ? ?IN ? ? ? ? ?rr_type ? ? ? ? ? ? value
域名 ? ? ? ? ? ? ? 缓存 ? ? ? ? ? ? Internet协议 资源类型 ? ? ? ? ?值
1. TTL可从全局继承缓存时间
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
$TTL 1D(统一的ttl定义1天,不写D 是秒)
@ ? ? ? IN SOA ?master.kgc.com. admin.kgc.com. (
? ? ? ? ? ? ? ? ?当前服务器的名称 ? ? 邮箱地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ; serial ? #是否有更新 ?版本号 更新文件 手动把 0 加1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1D ? ? ?; refresh ?#刷新时间 拉取时间
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1H ? ? ?; retry ? ?#失败后一个小时 后再试一次
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1W ? ? ?; expire ? #过期时间,老是拉取不了,1周以后过期
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3H ) ? ?; minimum ?#老是去查错误的解析地址,3小时内的缓存下,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用户再查直接返回找不到
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如: ns.kgc.org.
注意:
相邻的两个资源记录的name相同时,后续的可省略
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
一个区域可以有多个NS记录
范例:
master IN NS kgc.com.
master? ? ? A? ? 192.168.80.5
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
范例:
mail? ? ?IN MX 10 mx1.kgc.org.
? ? ? ? ? ? IN MX 20 mx2.kgc.org.
mx1? A ??192.168.91.10
mx2? A ??192.168.91.10
name: 某主机的域名解析,例如:www.kgc.com
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
范例:
www.kgc.com. IN A 1.1.1.1
www.kgc.com. IN A 2.2.2.2
www.kgc.com. IN ??A 3.3.3.3
www.kgc.com. IN ??A 4.4.4.4
* IN A 5.5.5.5
#代表泛域名
@ ? IN ??A 6.6.6.6
#代表不需要名字
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:inaddr.arpa.,所以完整写法为:
4.3.2.1.in-addr.arpa.
value: FQDN
例如:
3.2.1.in-addr.arpa. IN PTR www.kgc.org.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.kgc.com
name: 别名的FQDN
value: 真正名字的FQDN
ftp.kgc.com. ?IN CNAME www.kgc.com
①下载安装包
?②关闭防火墙和selinux,并开启named服务
③查看named服务对应端口号和地址,修改ens33的DNS地址
④重新启动网络ping www.baidu.com 是否能ping通
①编辑DNS 主配置文件
vim /etc/named.conf
12 options {
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 allow-query { any; };
②复制正向解析数据文件模板。作为服务器的正向解析数据文件
cp -p /var/named/named.localhost /var/named/ly.com.zone
说明:
①文件名必须和区域配置文件中定义的file的名称相同。
②保留权限
③编辑正向解析数据文件。注意域名后面的“.”,不要漏了。
vim /var/named/ly.com.zone
$TTL 1D
@ IN SOA master.ly.com. admin.ly.com (
#域名=ly.cpm. admin的邮箱=admin.ly.com.
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS mater #域名服务器记录
master IN A 192.168.80.111 #地址记录
www IN A 192.168.80.222 #地址记录
mail IN A 192.168.80.5 #地址记录
④重启named服务并将其设置为开机启动。
systemctl restart named
systemctl enable named
⑤在服务器上进行测试,使用命令ping和nslookup进行测试。
[root@localhost ~]# ping www.lw.com.cn
[root@localhost ~]# nslookup
> www.ly.com #在这里输入需要解析的域名
> exit
国家 省 市 区
www.baidu.com. 192.168.80.100 地址
. 192
com 168
baidu 80
www 100
[root@localhost named]#vim /etc/named.rfc1912.zones
#先修改区域配置文件
zone "80.168.192.in-addr.arpa" IN {
type master;
file "yun.com.zone";
allow-update { none; };
};
[root@localhost named]#cp -p kgc.com.zone yun.com.zone
#复制正向解析文件
[root@localhost named]#chmod 640 yun.com.zone ;chgrp named yun.com.zone
[root@localhost named]#vim yun.com.zone
#编辑文件
TTL 1D
@ IN SOA master.yun.com. admin.yun.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.yun.com.
master A 192.168.80.100
100 IN PTR www.yun.com.
88 IN PTR ftp.yun.com.
rndc reload
host 192.168.80.100
###从服务器的配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils.x86_64 -y
#从服务器先安装bind软件
[root@localhost etc]# vim /etc/named.conf
#两段改成any
listen-on port 53 { any; };
allow-query { any; };
[root@localhost etc]# vim /etc/named.rfc1912.zones
#添加从服务器的配置文件
zone "kgc.com" IN {
type slave;
#类型从
file "slaves/kgc.com.zone";
#文件地址在/var/named/slaves/ 下
masters { 192.168.91.100; };
#申明主服务器的地址
};
[root@localhost etc]# ls /var/named/slaves
kgc.com.zone
[root@localhost etc]# systemctl start named
#主服务器配置好后再启动
#主服务器配置
[root@localhost etc]# vim /etc/named.rfc1912.zones
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-transfer { 192.168.91.103; };
#添加从服务器的地址
};
[root@localhost etc]#rndc reload