DNS域名

180 阅读13分钟

DNS介绍

DNS是什么?dns.lyjingqu.cnDNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的,又名“域名解析服务器”. DNS有什么作用?靠它把你要访问的网址找到然后把信息送到你电脑上。

简单来说就是:把域名转换成网络可以识别的ip地址,再通过IP地址访问主机。 这种由文字组成的名称,显而易见要更容易记忆。

DNS的定义:

  • DNS是“域名系统”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
  • DNS服务使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS。
  • 每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

端口大致了解:

http  tcp 80   https tcp 443     

DHCP(udp协议)的67端口(服务端)68端口(客户端)

FTP协议(用来传输文件的协议)(使用tcp协议,端口20 (传输文件数据),端口21号(传输ftp控制指令)

DNS  TCP  53(用于连接dns服务器)  udp 53(解析DNS记录) 

FQDN【完整合格域名或者叫完全合格域名】

DNS系统的作用

 正向解析:根据域名查找对应的IP地址
 反向解析:根据IP地址查找对应的域名

DNS系统的分布式数据架构 834519047605407560.png 树状结构最顶层称为根域,用“.”表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机

根域
位于域名空间最顶层,一般用一个 “.” 表示

顶级域
一般代表一种类型的组织机构或国家地区,
如 .net(网络供应商)、.com(工商企业)、.org(团体组织)、.edu(教育机构)、.gov(政府部门)、.cn(中国国家域名)

二级域
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,
如 .cn 顶级域名下面设置的二级域名:.com.cn.net.cn.edu.cn 

子域
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名

主机
主机位于域名空间最下层,就是一台具体的计算机,
如 www、mail都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名,是指包含了所有域的主机名,其中包括根域),也是这台主机在域名中的全名

递归解析 迭代解析

QQ截图20220815170910.png

递归解析
用户访问域名 --> [本地缓存域名服务器] --> 根域服务器 --> 顶级域服务器 --> [二级域服务器] --> 子域服务器 --> 通过主机名解析出IP地址
             <--                      <--            <--              <--                <--            <--                             
  • 客户机先去查找本机的/etc/hosts 文件,看文件中是否存在该域名和IP地址的映射记录。如果有就调用,没有就进行下一步。

  • 客户机请求本地域名服务器(LDNS)来解析这个域名,主机要求本地域名服务器直接返回最终结果。在返回结果之前,客户机将完全处于等待状态,不再二次请求。统一由本地域名服务器向各级域名服务器转发请求。

  • 本地域名服务器收到客户机的请求后,先查询自己的缓存信息,如果有这个域名的映射记录则返回结果,没有则进行下一步。

  • 本地域名服务器请求根域名服务器解析这个域名,根域名告诉本地域名服务器去找对应的一级域名服务器。

  • 本地域名服务器请求一级域名服务器解析这个域名,一级域名服务器告诉它去找对应的二级域名服务器。

  • 本地域名服务器请求二级域名服务器解析这个域名,二级域名服务器告诉它去找对应的子域名服务器。

  • 本地域名服务器请求子域名服务器解析这个域名,子域名服务器返回对应的IP地址。

  • 本地域名服务器将IP地址记录到缓存中,并返回给客户机。客户机根据收到的IP地址访问该网站。

QQ截图20220815171352.png

迭代解析
用户访问域名 --> [本地缓存域名服务器] --> 根域服务器
                                      <-- 
									  --> 顶级域服务器
									  <--
                                      --> [二级域服务器]
									  <--
									  --> 子域服务器
									  <-- 通过主机名解析出IP地址
  1. 客户端向本机配置的本地名称服务器(在此仅以首先DNS服务器为例进行介绍,其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。

  2. 本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回一条DNS应答报文,报文中会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。**

  3. DNS客户端在收到本地名称服务器的应答报文后,会根据其中的根名称服务器地址信息,向对应的根名称服务器再次发出与前面一样的DNS查询请求报文。

  4. 根名称服务器在收到DNS查询请求报文后,通过查询自己的DNS数据库得到请求DNS域名中顶级域名所对应的顶级名称服务器信息,然后以一条DNS应答报文返回给DNS客户端。

  5. DNS客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名称服务器发出与前面一样的DNS查询请求报文。

  6. 顶级名称服务器在收到DNS查询请求后,先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给DNS客户端,否则通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条DNS应答报文返回给DNS客户端。

  7. 然后DNS客户端继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的权威名称服务器返回到最终的记录。

递归解析与迭代解析区别

  • 递归: 重复调用函数自身实现循环称为递归;
  • 迭代: 利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;
定义优点缺点
递归重复调佣函数自身实现a.用有限的循环语句实现无限集合;b.代码容读:c.大问题转化成小问题,减少了代码量。a.递归不断调用函数,浪费空;b.容易造成堆栈溢出
迭代利用变量的原值推出新值;函数内某段代码实现循环。a.效率高,运行时间只随循环的增加而增加;b.无额外开销。a.代码难理解;b.代码不如递归代码简洁;c.编写复杂问题时,代码逻辑不易想出

两者关系:a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)

DNS服务器类型

  1. 主域名服务器:负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。

  2. 从域名服务器:当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。

  3. 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。

  4. 转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。

根域名服务器

  • IPv4的根名称服务器: 全世界只有13台IPv4根域名服务器。1个为主根服务器在美国。其余12个均为辅根服务器,其中9台在美国,欧洲2个(位于英国和瑞典),亚洲1个位于日本。

  • IPv6的根名称服务器:全球共25台,中国1主3从,美国1主2从。

  • 根域名服务器一旦有任何异常对整个互联网影响都非常大。目前全球有了许多的根域名服务器镜像服务器,这点增加了容错率。

一级DNS服务器:  专门负责一级域名(顶级域名)

一级域名含义
.com商业机构,但个人也可以注册
.net网络服务机构
.edu教育机构
.int国际机构
.org非营利性组织
.gov政府机构
.mil军事机构

国家顶级域名

域名含义
.cnChina,中国
.jpJapan,日本
.uk英国
.us美国

二级DNS服务器:用作二级域名解析

二级域名含义
.com.cn中国商业组织
.edu.cn中国教育机构
.org.cn中国非盈利组织
.net.cn中国运营商

字域名服务器:处理三级一下的域名解析 651088160392434463.png

hosts(作映射)

在没有DNS解析的情况下/etc/hosts/直接通过IP地址解析到相关的主机

QQ截图20220815213702.png

QQ截图20220815213813.png 如果不想通过DNS去访问某个网站,想速度快一点可以将该网页的IP地址+主机名写入/etc/hosts/直接加速访问该网页 QQ截图20220815214308.png 不仅仅Linux中有hosts文件,在Windows之中也是有hosts文件的

QQ截图20220815214753.png

QQ截图20220815214810.png

实验 构建DNS域名解析服务器步骤

正向解析

  • 安装bind软件包
[root@localhost ~]#yum install -y bind

QQ截图20220816144205.png

QQ截图20220816144245.png

  • 查询bind软件配置文件所在路径
[root@localhost ~]#rpm -qc bind

QQ截图20220815221529.png

  • 修改主配置文件
[root@localhost ~]#vim /etc/named.conf

 12 options {
 13         listen-on port 53 { 192.168.85.20; };    //监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有 
 14 #       listen-on-v6 port 53 { ::1; };    //ipv6行如果不适用可以注释掉或者直接删除
 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     { 192.168.80.0/24; 172.16.100.0/24; };   //允许使用本DNS解析服务的网段,也可以用any代表所有
 
 
 50 };
 51
 52 zone "." IN {            //正向解析"."根区域
 53         type hint;       //类型为根区域
 54         file "named.ca";  //区域数据文件为"named.ca"J记录了13台根域服务器的域名和IP地址等信息



 55 };
 56
 57 include "/etc/named.rfc1912.zones";     //包含区域配置文件里的所有文件

QQ截图20220816144912.png QQ截图20220816144941.png

  • 修改区域配置文件,添加正向区域配置
[root@localhost ~]#vim /etc/named.rfc1912.zones


19 zone "localhost" IN {
 20         type master;
 21         file "named.localhost";
 22         allow-update { none; };      按照这个模板复制过来使用
 23 };
 24
 25 zone "wang.com" IN {     //正向解析benet.com”区域
 26         type master;     //#类型为主区域
 27         file "wang.com.zone";    //指定区域数据文件为benet.com.zone
 28 #       allow-update { none; };   //暂不使用直接注释掉
 29 };

QQ截图20220816145502.png

  • 配置正向区域数据文件

QQ截图20220815231031.png QQ截图20220815231147.png

[root@localhost named]#vim wang.com.zone
  1 $TTL 1D     //#有效解析记录的生存周期
  2 @       IN SOA  wang.com adnin.wang.com. (    //“@”符号表示当前的DNS区域名
  3                                         6542165 ; serial  //更新序列号,可以是 10 位以内的整数
  4                                         1D      ; refresh    //刷新时间,重新下载地址数据的间隔
  5                                         1H      ; retry   //重试延时,下载失败后的重试间隔
  6                                         1W      ; expire  //失效时间,超过该时间仍无法下载则放弃
  7                                         3H )    ; minimum  //无效解析记录的生存周期
  8         NS      benet.com   //记录当前区域的DNS服务器的名称
  9         A       192.168.85.20   //记录主机IP地址
 10 IN    MX 10     mail.benet.com   //MX为邮件交换记录,数字越大优先级越低
 11 www   IN A      192.168.85.30    //记录正向解析www.benet.com对应的IP
 12 mail  IN A      192.168.85.40     
 13 news   IN CNAME  WWW        //CNAME使用别名,ftp是www的别名
 14 *     IN A      192.168.85.50   //泛域名解析,“*”代表任意主机名



//“@”这里是一个变量,当前DNS区域名
//SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
//“benet.com.”此为完全合格域名(FQDN),后面有个“.”不能漏掉
//“admin.benet.com.”表示管理员邮箱,这里的“@”符号已有其他含义,所以用“.”代替

QQ截图20220816151500.png

  • 启动服务,关闭防火墙

QQ截图20220815234840.png QQ截图20220816000414.png QQ截图20220815234954.png

排错

如果服务启动失败,可以查看日志文件来排查错误
tail -f /var/log/messages
vim /var/log/messages

如果服务启动卡住,可以执行下面命令解决
rndc-confgen -r /dev/urandom -a

比如说不小心删掉了一个符号
QQ截图20220815235631.png

重启服务的时候就会报错
QQ截图20220815235734.png

可以进入日志系统
QQ截图20220815235821.png

有一个提示
QQ截图20220815235538.png

按照提示修改回来
QQ截图20220816000004.png

在刷新一下启动服务,就不会报错了
QQ截图20220816000028.png

  • 在客户端的域名解析配置文件中添加DNS服务器地址
[root@localhost named]#vi /etc/resolv.conf    //修改完后立即生效

QQ截图20220816151952.png

[root@localhost named]#vim /etc/sysconfig/network-scripts/ifcfg-ens33

QQ截图20220816152038.png 重启网卡

[root@localhost named]#systemctl restart network
  • 测试DNS解析
[root@localhost named]#host www.wang.com
[root@localhost named]#nslookup www.wang.com

QQ截图20220816152342.png

反向解析

  • 修改区域配置文件
[root@localhost named]#vim /etc/named.rfc1912.zones
方向解析的文件写在最底下,不能和正向解析在一起
zone "85.168.192.in-addr.arpa" IN {       //方向解析的地址倒过来写
        type master;    
        file "wang.com.zone.local";     //指定区数据文件为wang.com.zone.local

QQ截图20220816171229.png QQ截图20220816165847.png

  • 配置方向区域数据文件 复制文件 QQ截图20220816170424.png QQ截图20220816170602.png
$TTL 1D
@       IN SOA  wang.com. admin.wang.benet.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      wang.com.
        A       192.168.85.20
20    IN   PTR  www.wang.com.
10    IN   PTR  nba.wang.com.


PTR为反向指针,反向解析192.168.85.20地址结果为www.wang.com.

QQ截图20220816171253.png QQ截图20220816171155.png

  • 重启服务进行测试 QQ截图20220816171505.png

QQ截图20220816171608.png

搭建主从服务器

  • 修改主域名服务器的区域配置文件,修改正、反向区域配置

QQ截图20220816225547.png

QQ截图20220816225817.png

QQ截图20220816225501.png

  • 修改从域名服务器的主配置文件

正常yum安装bind程序
QQ截图20220816225952.png

修改从域名服务器配置文件

QQ截图20220816230252.png QQ截图20220816230240.png

  • 修改从域名服务器区域配置文件,添加正、反区域配置 QQ截图20220816230830.png QQ截图20220816230740.png QQ截图20220816230939.png 重启服务(主从都要)

QQ截图20220816231032.png

测试结果(客户主机来测试主从服务器)
QQ截图20220816231302.png

改一下IP
QQ截图20220816231252.png

客服端可以分别解析
QQ截图20220816231410.png

分离解析

分离解析的域名服务器实际也就是主域名服务器,这里主要是根据不同的客户端提供不同的域名解析记录。 比如来自内网和外网的不同网段地址区域的客户机请求解析同一域名时,为其提供不同的解析结果,得到不同的IP地址。 在网关服务器搭建DNS分离解析,使局域网主机解析www.kgc.com为192.168.178.20,外网主机解析www.kgc.com为12.0.0.1。 QQ截图20220820232115.png

实验

1.为网关服务器配置双网卡

在光机状态下添加一块网卡,重启系统

QQ截图20220820232637.png

QQ截图20220820233205.png 修改网段使两张网卡处于不同网段 QQ截图20220820233005.png

QQ截图20220820233037.png 如果使用ifconfig直接修改网卡只是临时修改

QQ截图20220820233617.png 重启就会自动还原到最初的地址

[root@localhost ~]# systemctl restart network

QQ截图20220820233909.png 修改网卡ens33

复制一份网卡配置信息 QQ截图20220820235506.png

[root@localhost etc]# cd /etc/sysconfig/network-scripts/
复制配置文件
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens36
修改好以后重启一下网卡
[root@localhost network-scripts]# systemctl restart network
关闭防火墙
[root@localhost network-scripts]# systemctl stop firewalld
[root@localhost network-scripts]# setenforce 0
挂载
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载

此时如果安装不起来bind的软件  请自行安装本地yum 

然后再去安装bind的软件即可
[root@localhost ~]# yum -y install bind

ens33配置信息
QQ截图20220820234820.png

ens36配置信息
QQ截图20220821000917.png QQ截图20220821001020.png

如果想用虚拟机来连接修改配置器
QQ截图20220821001335.pngQQ截图20220821001840.png

安装软件
QQ截图20220821135749.png

修改主配置文件

[root@localhost ~]# vim /etc/named.conf

QQ截图20220821140351.png 修改区域配置文件

vim /etc/named.rfc1912.zones
view "lan" {								#定义内网view,view代表容器分割
	match-clients { 192.168.85.0/24; };    	#匹配内网网段   				#设置要解析的区域
        zone "wang.com" IN {
		type master;   				 
		file "wang.com.zone.lan";   	 	#数据配置文件
	};      
	zone "." IN {							#可将根域配置从主配置文件剪切过来,dd+p						#hint是根区域类型
		file "named.ca";
	};      
};
 
view "wan" {     							#定义外网view
    match-clients { any; };					#匹配除了内网网段以外的任意地址
    zone "benet.com" IN {
        type master;
        file " wang.com.zone.wan";
    };
};

#注意:一旦启用view,所有的zone必须都在view下,所以要把系统默认的自检用的zone也放在view下或者删除

QQ截图20220821144938.png 修改区域数据配置文件

[root@localhost ~]# cd /var/named
[root@localhost named]# cp -a named.localhost wang.com.zone.lan
[root@localhost named]# cp -a named.localhost wang.com.zone.wan

保证权限属性相同
QQ截图20220821143150.png

[root@localhost named]# vim wang.com.zone.lan

QQ截图20220821143644.png

[root@localhost named]# vim wang.com.zone.wan

QQ截图20220821144001.png