DNS服务详解

DNS服务

DNS介绍

DNS(Domain Name System)域名解析服务,用于提供主机名到IP地址映射服务。作为将域名和IP地址相互映射的一个分布式数据库,DNS协议运行在UDP上,默认使用53号端口。

DNS主要服务

  • 实现主机名到IP地址转换的目录服务
  • 主机别名:通过DNS服务获取主机别名对应的复杂规范主机名
  • 邮件服务器别名:类似于主机别名
  • 负载分配:对于一个拥有很大流量的站点,其可能部署在多个服务器上,它们所有的IP构成一个IP集合,这个IP集合与同一个规范主机名相联系。DNS提供了相应的映射服务,使得不同的客户端请求可以轮流访问各个服务器。

域名结构

域名的命名采用层次树状结构的命名方法,任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,既域名(domain name)。“域”(domain)是名字空间中一个可被管理的划分。

域名只是逻辑概念,并不代表计算机所在的物理地点。域名可分为三大类:

  1. 国家顶级域名:采用ISO3166的规定。如:cn代表中国,uk代表美国,等等。国家域名又常记为ccTLD(country code top-level domains,cc代表国家代码country code)
  2. 通用顶级域名:最常见的通用顶级域名有七个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
  3. 基础结构域名:这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

DNS服务器结构

在了解DNS的查询流程之前,我们需要知道为什么我们现在的DNS服务器并不是集中式DNS服务,而是采用了一个树状的层次结构————分布式层次式数据库。

集中式DNS的缺点

  • 单点故障:如果DNS服务器崩溃,整个网络将会陷入瘫痪
  • 通信容量:单个的DNS服务器需要处理大数量级的请求
  • 远距离的集中式数据库:链路会导致较长的时延
  • 维护成本高:单个DNS服务器需要为所有主机保留记录,数据库庞大,维护成本高

分布式层次式数据库

分布式层次式数据库中,分布式指的是其分布在全世界范围内,层次式指的是其按照树状层次方式组织。其按照层次可将DNS服务器划分为三种类型:根DNS服务器、顶级域DNS服务器和权威DNS服务器。

🚀 在以上三种类型之外,这里还要提到一个本地域名解析服务器。该服务器不严格属于层级体系。每个ISP(互联网服务提供商)有一个本地域名服务器(也叫默认域名解析服务器)。

🚀 当主机进行DNS查询时,查询被发送到本地域名服务器,其作为代理(proxy),将查询转发给域名解析服务器系统,具体查询流程细节在下一小节。

DNS查询流程

这里以本地主机想要访问www.bilibili.com的IP地址为例

  1. 在浏览器中输入www.bilibili.com域名,浏览器缓存、操作系统会首先检查自己本地的hosts文件是否有这个域名的映射关系,如果有就先调用这个缓存里的IP地址,完成域名解析。

    ipconfig/displaydns //查windows中的DNS缓存

    ipconfig/flushdns //清空缓存

  2. 如果hosts缓存中没有这个域名的映射,那么就查找本地DNS解析器缓存,是否有这个网址映射关系,如果有直接返回,完成域名解析。

  3. 如果hosts以及本地DNS解析器都没有相应的缓存,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫他本地DNS服务器,此服务器收到查询时

    • 如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

    • 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

  4. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,

    • 如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理bilibili.com的DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找bilibili.com域服务器,重复上面的动作,进行查询,直至找到www.bilibili.com主机。
    • 如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

🚀 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询。hosts文件在C:\WINDOWS\system32\drivers\etc目录中

🚀 114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。

DNS解析方式

正向解析:将FQDN----->IP

反向解析:将IP----->FQDN

DNS服务的配置文件

提供DNS服务的软件叫bind,服务名为named

[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf        # bind主配置文件
/etc/named.rfc1912.zones   # 定义zone的文件
/etc/rndc.conf        # rndc配置文件
/usr/sbin/named-checkconf   # 检测/etc/named.conf文件语法
/usr/sbin/named-checkzone   # 检测zone和对应zone文件的语法
/usr/sbin/rndc        # 远程dns管理工具
/usr/sbin/rndc-confgen    # 生成rndc密钥
***\*/var/named/named.ca      #\**** ***\*根解析库\****
/var/named/named.localhost  # 本地主机解析库
/var/named/slaves       # 从ns服务器文件夹

/named.conf主配置文件

options {
        listen-on port 53 { 127.0.0.1; };		//53号端口、监听IP
        listen-on-v6 port 53 { ::1; };		//ipv6
        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";		//分配统计目录
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";		//递归文件
        allow-query     { localhost; };		//只允许本地主机进行查询
        recursion yes;		//允许递归查询

        dnssec-enable yes;
        dnssec-validation yes;

        managed-keys-directory "/var/named/dynamic";		//密钥存储位置

        pid-file "/run/named/named.pid";		//进程PID文件
        session-keyfile "/run/named/session.key";		//会话密钥
        include "/etc/crypto-policies/back-ends/bind.config";
};

logging {		//指定日志记录分类和他们的目标位置
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
#IN:internet
#zone	"区域"	IN{
#	type:hint、master、slave、file
#		hint:提示,一般用作根域的配置
#		master:当前区域类型是master---主
#		slave:当前区域类型是slave---从
#	file:指定这个域的数据解析文件位置
zone "." IN {		
        type hint;
        file "named.ca";
};
#包含:应如下面两个文件
#/named.rfc1912.zones :配置的默认的一些域
#
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

区域文件配置

正向解析

   zone "example.com" IN {
   type master;
   file example.zone;
}
$TTL 1D    #TTL: DNS记录的缓存时间。是其他域名服务器将数据存放在缓存中的时间, 1D: 代表一天。
#如果一个域名和来源相同的话,那么g名称就可以被表示为”@“
@       IN SOA  root.example.com.  test.163.com ( #SOA记录后面的root.example.com.代表域的权威服务器,test.163.com是管理员邮箱@在数据文件中代表特殊含义,使用.来代表@符号
                                        0       ; serial       
                                        1D      ; refresh     
                                        1H      ; retry        #SOA可以跨多行,使用括号
                                        1W      ; expire       
                                        3H )    ; minimum      #可以添加多条NS记录,但每个NS记录
        #serial: 序号,代表数据库文件的新旧,需要越大代表越新。如果你修改了数据库文件,需要将这个数据放大
        #refresh: 更新频率,定义slave多久向Master请求更新数据
        #retry: 失败重新尝试,如果slave无法对Master实现连接,多长时间内,slave会尝试重新连接到Master。
        #expire: 失效时间,如果一直尝试失败,持续连接到这个设置值时限,那么slave将不在继续尝试连接,并且尝试删除这份下载的zone file信息
        #Minimum: 缓存时间,如果这个数据库zone file中,每笔RR记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主
        #TTL的意思是当这笔记录被其他DNS服务器查询到后,这个记录会被在对方的DNS服务器的缓存中,保持多长时间。
                                      
        IN  NS  root.example.com.  #nameserver;NS记录代表域名服务器记录,如果有多个域名服务器, 可以添加多条NS记录,每个NS记录在下都需要有对应的A记录。
        IN  MX  10 mail.example.com. #使用MX记录指定邮件服务器时,我们给mail.example.com服务器设置优先级为10
        A       127.0.0.1  #A记录为正向解析记录,格式为在域名后面输入响应的IP地址, IN代表Internet, A代表正向解析记录。
        AAAA    ::1
root.example.com. IN A 172.16.0.254
www.example.com.  IN A 172.16.0.200
                  IN A 172.16.0.200
ftp.example.com.  IN A 172.16.0.100
mail              IN A 172.16.0.25  
web               IN CNAME www #CNAME记录为别名,可以使用web.example.com来代表www.example.com

正向解析文件资源记录(Resource Record,RR)

domainINRR typeRR data
主机名.INAIPv4的IP地址
主机名.INAAAAIPv6的IP地址
域名.INNS管理这个域名的服务器主机名字,即由哪一台主机去解析当前所定义的域主机
域名.INSOA起始授权记录管理这个域名的七个重要参数
域名.INMX顺序数字,接收邮件的服务器主机名字
主机别名.INCNAME实际代表这个主机别名的主机名字

反向解析

主配置文件
[root@localhost ~]# vim /etc/named.conf 
zone "133.168.192.in-addr.arpa" IN {
        type master;
        file "133.168.192.zone";
};
区域配置文件
[root@localhost ~]# vim /var/named/133.168.192.zone 
$TTL 1D
@       IN      SOA     dns.openlab.com.        test.163.com    (
                                                                333333323
                                                                1D
                                                                1H
                                                                1W
                                                                3H )
        IN      NS      dns.openlab.com.
        IN      NS      dns2.openlab.com.
dns.openlab.com.        IN      A       192.168.133.150
dns2.openlab.com.       IN      A       192.168.133.143
150                     IN      PTR     dns.openlab.com.
151                     IN      PTR     dhcp.openlab.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瑾~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值