DNS服务详解

本文涉及的产品
.cn 域名,1个 12个月
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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


相关文章
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
67 3
|
3月前
|
自然语言处理 数据可视化 API
淘宝商品评论 API 接口:深度解析用户评论,优化产品与服务
淘宝是领先的中国电商平台,其API为开发者提供商品信息、交易记录及用户评价等数据访问服务。对于获授权的开发者和商家,可通过申请API权限、获取并解析评论数据来进行情感分析和统计,进而优化产品设计、提升服务质量、增强用户互动及调整营销策略。未授权用户可能受限于数据访问。
|
17天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
17天前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
2月前
|
自然语言处理 数据可视化 BI
文档解析(大模型版)服务体验评测
体验文档解析(大模型版)服务时,清晰的入门指南、操作手册和FAQ至关重要。若存在不足,需增加直观的操作流程说明(如动画演示)、深化高级功能文档,并提供实时在线支持,帮助用户快速解决问题。
|
2月前
|
弹性计算 自然语言处理 数据可视化
|
1月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
25 0
|
1月前
|
存储 缓存 网络协议
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
110 0
|
2月前
|
存储 消息中间件 算法
深入解析OpenStack Cinder:块存储服务详解
本文介绍了OpenStack及其块存储服务Cinder。OpenStack是一个开源云计算管理平台,提供基础设施即服务(IaaS),核心服务包括计算、网络、存储等。Cinder主要用于为虚拟机提供持久性块存储,具备多种功能,如卷操作、备份、快照及与实例的交互等。此外,还详细介绍了Cinder的工作流程、命令行操作及不同存储插件的使用。
406 8
|
3月前
|
机器学习/深度学习 网络协议 安全
安全DNS服务
【8月更文挑战第18天】
145 16

推荐镜像

更多