DNS服务详解

简介: 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地址映射,完成域名解析,此解析不具有权威性。
  1. 如果本地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)

domain IN RR type RR data
主机名. IN A IPv4的IP地址
主机名. IN AAAA IPv6的IP地址
域名. IN NS 管理这个域名的服务器主机名字,即由哪一台主机去解析当前所定义的域主机
域名. IN SOA起始授权记录 管理这个域名的七个重要参数
域名. IN MX 顺序数字,接收邮件的服务器主机名字
主机别名. IN CNAME 实际代表这个主机别名的主机名字

反向解析

主配置文件

[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


相关文章
|
19天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
32 2
|
29天前
|
网络协议 应用服务中间件 nginx
【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?
【CKA模拟题】如何用Nslookup轻松检查集群服务名的DNS解析?
110 2
|
2月前
|
网络协议 Linux
Linux DNS服务详解——DNS主从架构配置
Linux DNS服务详解——DNS主从架构配置
413 4
|
2月前
|
域名解析 缓存 网络协议
Linux DNS服务详解——DNS基础知识
Linux DNS服务详解——DNS基础知识
83 1
|
3月前
|
SQL 监控 数据库连接
数字安全网:深入解析服务容错的三大绝招“
数字安全网:深入解析服务容错的三大绝招“
22 1
|
4月前
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
IP协议, TCP协议 和DNS 服务分别是干什么的?
233 0
|
2天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
7天前
|
网络协议 Linux 网络安全
Centos7 配置DNS服务
该教程指导配置DNS服务器:首先通过yum安装bind和cach件,然后修改IP设置。接着,编辑/etc/named.conf,将第13行和21行的参数改为"any"。在/etc/named.rfc1912中更新正向和反向域名。创建正向解析文件/var/named.localhost和反向解析文件/var/named.loopback,按指定格式添加解析记录。最后,重启服务,确保防火墙关闭,通过nslookup检查DNS配置效果。
17 1
|
8天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
15 0
|
15天前
|
域名解析 缓存 网络协议
Linux 配置DNS服务
该内容是关于DNS配置的教程,介绍了DNS的基本功能——域名到IP地址的转换。在Redhat 9环境下,通过`yum`安装`bind`服务,然后配置`named`服务并设置开机启动,关闭防火墙和SELinux。接着,配置域名解析文件`resolv.conf`,修改`named.conf`以允许所有查询,并创建正反向解析的区域配置文件。通过`nslookup`测试解析,发现权限问题后调整文件权限,最终实现成功解析。另一台机器的DNS地址设置为第一台的IP地址,完成DNS服务器的配置。
36 0

推荐镜像

更多