关键词搜索

源码搜索 ×
×

互联网协议 — DNS 域名系统

发布2023-04-05浏览2789次

详情内容

目录

DNS 分布式数据库

在最古早的时候,为了让 ARPANET 上的计算机能够通过一个易于记忆的名称来进行寻址,而为每台计算机设计了一个 Hostname,并在 hosts 文件中记录了这些 Hostname 和 IP 地址的映射关系。但后来随着 APRANET 网络的规模逐渐扩大,hosts 记录这种简单粗暴的方式便不再适用了。

在 1983 年,Paul Mockapetris 提出了 DNS(Domain Name System,域名系统)的概念。这是一种具有层次的、基于 Domain(域)的 Named(主机命名)方案,并且用一个分布式数据库系统加以实现。

所以,DNS 的本质是一个实现了 DNS 协议的分布式数据库,它用于完成 Domain Name 和 IP 地址相互映射,能够让用户更方便地访问互联网。

Domain 分层架构

为了让 DNS 能够支撑遍布全球的互联网用户,DNS 在设计之初就提出了非常合理 Domain 分层架构的理念。这种层次化的地址结构与我们日常生活中的邮寄系统非常类似,例如:中国北京市海淀区XX街道XX楼XX室。

对于互联网世界来说,Domain 分层架构的 Zones(区)由 ICANN(互联网名称与数字地址分配机构)负责统一管理,呈现为树形结构,最顶上的为根服务器,然后为顶级域名。目前,已经有超过 250 个顶级域名,每个顶级域名又可以进一步的划分出二级域名,二级域名又可以再划分出三级域名。依此类推,最终形成了我们现在见到的 www.google.com. 此类形式。(注:最后一个点表示根服务器,默认可忽略。)

总的来说,Domain 分层架构的设计带来了以下好处:

  1. 层级清晰:每一级域名代表一个层级,整个域名系统具有清晰的层次结构,有助于域名资源的管理和维护。
  2. 分布式管理:DNS 是一个分布式数据库,不同的域名由不同的 DNS 服务器管理,有助于 DNS 服务器的管理和维护,也避免了单点故障。
  3. 易于扩展:可以根据需要简易的在树形结构上添加新的域名节点,而不会影响到整个系统的稳定性和性能。
  4. 易于解析:使得域名更容易被解析,有助于搜索和查找。也方便进行域名解析的缓存,提高了域名解析的效率。

在这里插入图片描述

全球 DNS 服务器集群

和 Domain 分层架构对应的,互联网中的 DNS 系统由一系列的 DNS 服务器集群组成,它们协同工作,共同提供域名解析服务。

从高层次往下看,DNS 服务器可以为下列 4 大类:

  1. 根域名服务器:是最重要的域名服务器,由 ICANN 授权给不同的组织运营,记录了整个互联网所有的顶级域名服务器的域名和地址。所有下级服务器无法解析一个域名时,都会向根服务器求助。全球共有 13 台根服务器,名字依次为 [A-M].root-servers.net。为了分摊极其海量的访问压力,每个根服务器都会有更多的镜像服务器,每台根服务器与它的镜像服务器共享同一个 IP 地址,当你访问的域名需要根服务器帮忙解析时,实际上会由离你最近的镜像服务器代劳。截至 2021 年 7 月,国内大陆地区共有 F、I、J、K、L 这 5 台根服务器的 21 台镜像服务器在线。
    在这里插入图片描述

  2. 顶级域名服务器:关联到根服务器,并负责管理单一顶级域名下属的所有二级域名

  3. 权威域名服务器:关联到一个顶级服务器,并负责一个二级域名下属的一个 Domain Zone 内所有域名的解析工作。

  4. 本地域名服务器:由电信运营商运营的一个用户宽带接入 DNS 服务器,是电信用户接入互联网后访问的第一个 DNS 服务器。负责一个 Local Domain Zone 内所有域名的解析工作,并关联到其他上级服务器。

  5. 私有域名服务器:在企业或组织内部部署的私有域名服务器,不需要在互联网上注册。

如此的,全球海量的域名资源记录就被合理地分散保存在多个 DNS 服务器中,故也称为分布式数据库,并且所有的 DNS 服务器之间也组织成为了一个具有层次的索引结构。

在这里插入图片描述

DNS 域名递归解析流程

域名解析流程,即:DNS 系统将域名解析为 IP 地址的过程。域名递归解析流程,即:从 DNS 系统中的根服务器开始向下递归多个相关 DNS 服务器并最终完成域名解析的流程。一个相对完整的流程如下图所示:

在这里插入图片描述

  1. 电脑开机,随即从 DHCP 服务器获得 IP 地址和电信运营商的 Local DNS 服务器(e.g. 8.8.8.8)地址。
  2. 用户打开浏览器访问 www.cmbc.com.cn,先查浏览器的 DNS 查询记录缓存。
  3. 如果没有,再通过 Kernel Resolver(内核 DNS 解析器)查本机的 hosts 文件记录。
  4. 如果没有,则 Kernel Resolver 发出 DNS Query Request 到 Internet 上的 Local DNS 服务器。
  5. Local DNS 服务器通常对应一个 Domain Zone,如果待查域名并不属于这个 Zone 内,且 Local DNS 服务器对该域名没有缓冲记录(假设后续环节中都没有命中 DNS 记录缓存),那么此时 Local DNS 服务器从根服务器开始进行逐级的递归查询,依次向 .cn.com.cn.cmbc.com.cn. 域名服务器发出 Query Requests,并最终返回域名对应的 IP 地址给用户。

在这里插入图片描述

部署私有 DNS 服务器

在 Linux 上部署一台私有 DNS 服务器非常简单,关键是从配置过程中理解 DNS 系统的组织形式。

  1. 安装 BIND9。
sudo yum install bind bind-utils -y
    1. 配置主配置文件 /etc/named.conf。
    options {
            listen-on port 53 { 127.0.0.1; };  # DNS 协议监听的 IP 地址和端口号
            listen-on-v6 port 53 { ::1; };
            directory       "/var/named";      # DNS 数据文件存放路径
            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";
            allow-query     { localhost; };    # 客户端 IP 地址白名单
            recursion yes;                     # 是否支持递归查询
            dnssec-enable yes;
            dnssec-validation yes;
            bindkeys-file "/etc/named.root.key";
    
            /* Path to ISC DLV key */
            bind-dynamic-db "/var/named/dynamic";
            pid-file "/run/named/named.pid";
            session-keyfile "/run/named/session.key";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    
    zone "fguiju.com" IN {            # 定义 DNS 服务器的 Domain Zone
            type master;              # 声明域名的类型为主域名
            file "fguiju.com.zone";   # 域名解析数据文件的位置
            allow-update { none; };   # 允许更新的客户端IP地址
    };
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    1. 创建域名解析数据文件 /var/named/fguiju.com.zone。
    $TTL 3600  ; Time To Live
    
    ; Domain Zone    ; Domain Names
    fguiju.com.      IN SOA  ns1.fguiju.com. admin.fguiju.com. (
                            2022040301      ; Serial
                            10800           ; Refresh
                            3600            ; Retry
                            604800          ; Expire
                            86400           ; Minimum TTL
                            )
                    IN NS           ns1.fguiju.com.
                    IN NS           ns2.fguiju.com.
    
    ; Name server
    ns1             IN A            192.168.1.100
    ns2             IN A            192.168.1.101
    
    ; Mail exchanger
    fguiju.com.     IN MX 10        mail.fguiju.com.
    
    ; Address record
    www             IN A            192.168.1.102
    mail            IN A            192.168.1.103
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    1. 启动 DNS 服务,并设置开机自启动。
    sudo systemctl start named
    sudo systemctl enable named
    
      2
    1. 验证 DNS 解析是否生效。
    $ dig fguiju.com
    

      相关技术文章

      点击QQ咨询
      开通会员
      返回顶部
      ×
      微信扫码支付
      微信扫码支付
      确定支付下载
      请使用微信描二维码支付
      ×

      提示信息

      ×

      选择支付方式

      • 微信支付
      • 支付宝付款
      确定支付下载