DNS域名解析服务

一、DNS 概述与核心作用

1.1 DNS 的角色
DNS (Domain Name System) 是互联网的“导航员”或“114查号台”。它的核心作用是实现域名IP 地址 之间的相互映射。

  • 正向解析:根据域名查找对应的 IP 地址(最常用)。
  • 反向解析:根据 IP 地址查找对应的域名(用于特殊用途,如邮件服务器反垃圾验证)。

1.2 端口与协议

  • 默认端口:53
  • 使用协议:
    • UDP:用于常规的域名解析查询。速度快,开销小。
    • TCP:用于区域传送(主从服务器同步数据)。因为TCP更可靠,能保证大数据量的准确传输。

1.3 域名结构:FQDN

  • FQDN (Fully Qualified Domain Name):全限定域名,完整标识主机在域名树中的位置。
  • 格式:主机名.子域.二级域.顶级域.根域. (根域. 通常省略)
  • 示例:www.sina.com.cn. -> http://www.sina.com.cn./

图解:域名空间层次结构
在这里插入图片描述

二、DNS 查询原理

2.1 两种查询方式

  1. 递归查询 (Recursive Query)

    • 客户机与本地DNS服务器之间的查询方式。
    • 客户机发出请求后,只需等待最终结果(成功或失败),中间的所有查询过程由DNS服务器代理完成。
    • 一句话:“你办事,我放心,我只要结果”
  2. 迭代查询 (Iterative Query)

    • 本地DNS服务器与其它各级DNS服务器之间的查询方式。
    • 上级服务器不会替下级服务器去查询,而是返回一个最佳查询点(另一台DNS服务器的地址),让请求者自己再去问。
    • 一句话:“这个我不直接管,你去问XX办公室吧”

2.2 完整的正向解析流程
一个完整的查询结合了递归和迭代两种方式,其过程如下图所示:

在这里插入图片描述

流程步骤详解:

  1. 客户端检查本地缓存和 hosts 文件。
  2. 客户端向本地DNS服务器发起递归查询
  3. 本地DNS服务器检查自身缓存,若无记录,则向根DNS服务器发起迭代查询
  4. 根DNS服务器返回 .com 顶级域服务器的地址。
  5. 本地DNS服务器向 .com 顶级域服务器发起迭代查询。
  6. 顶级域服务器返回 google.com 权威服务器的地址。
  7. 本地DNS服务器向 google.com 的权威服务器发起迭代查询。
  8. 权威服务器返回 www.google.com 对应的IP地址。
  9. 本地DNS服务器将结果返回给客户端,并缓存该记录。

缓存清理命令:

  • Windows: ipconfig /displaydns (查看缓存), ipconfig /flushdns (清理缓存)
  • Linux: 需安装 nscd 服务,使用 nscd -i hosts 清理。

三、DNS 服务器架构与类型

3.1 分布式层次结构
全球DNS系统是一个庞大的分布式数据库,由众多服务器共同承担解析任务。

服务器类型 职责 举例
根DNS服务器 管理根域,返回顶级域服务器的地址 全球13个根服务器系统集群(编号A-M)
顶级域DNS服务器 管理特定顶级域,返回权威服务器地址 .com, .cn, .net 服务器
权威DNS服务器 管理特定域名(如google.com),返回其下主机的最终IP ns1.google.com

重要提示:所谓的“全球13台根服务器”指的是13个逻辑根服务器系统,每个系统都通过任播技术在全球部署了上百台物理服务器副本,以提高 resiliency 和访问速度。中国也有多个根镜像服务器。

3.2 DNS服务器软件(BIND)

  • BIND (Berkeley Internet Name Domain):是最广泛使用的DNS服务软件。
  • 软件包组成:
    • bind:主程序包
    • bind-utils:提供 nslookup, dig 等测试工具
    • bind-libs:提供库文件
    • bind-chroot:提供一个伪根目录,将DNS服务锁定在 /var/named/chroot/ 中,增强安全性。

3.3 DNS服务器系统类型
根据职能,一台物理DNS服务器可以被配置为以下一种或多种类型:

类型 作用 特点
主域名服务器 维护特定区域的权威数据,数据可修改 type master;
从域名服务器 从主服务器同步区域数据,提供冗余备份和负载均衡 type slave; 需指定 masters { };
缓存域名服务器 不管理任何区域,仅缓存查询结果,加速访问 必须指定根域或转发器
转发域名服务器 将所有非本地查询请求转发给指定的其他DNS服务器 配置 forwarders { };

四、DNS 部署实战

4.1 基础配置:主服务器与正向/反向解析

核心配置文件:

  1. 主配置文件/etc/named.conf - 定义全局设置,如监听地址、允许查询的网段。
  2. 区域配置文件/etc/named.rfc1912.zones - 定义本服务器负责管理的区域(域名)及其属性(如区域数据文件名、类型)。
  3. 区域数据文件/var/named/xxx.zone - 存储具体的域名和IP的映射记录,这是最核心的数据库文件。

记录类型详解:

  • SOA:起始授权记录,定义区域全局信息(主服务器、管理员邮箱、序列号、同步参数)。
  • NS:域名服务器记录,指明该区域由哪台DNS服务器负责解析。
  • A:正向解析记录,将域名指向一个IPv4地址。
  • AAAA:将域名指向一个IPv6地址。
  • CNAME:别名记录,将一个域名指向另一个域名。
  • MX:邮件交换记录,定义邮件服务器的域名和优先级。
  • PTR:反向解析记录,将IP地址指向域名。

配置流程:

  1. 安装BIND:yum install bind bind-chroot -y
  2. 编辑主配置文件 named.conf,设置 listen-onallow-query
  3. 在区域配置文件 named.rfc1912.zones 中定义正向和反向区域。
    
    修改主要配置文件 
    vim /etc/named.conf
    options {
    listen-on port 53 { 192.168.10.23; }; ●监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有
    #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"; # 内存统计文件的位置
    allow-query { 192.168.10.0/24; 192.168.100.0/24; };● 允许使用本DNS解析服务的网段,也可用any代表所有
    }
    
    
    zone "." IN {#正向解析“."根区域
    type hint;#类型为根区域
    file "named.ca";#区域数据文件为named.ca,#记录了13台根域服务器的域名和IP地址等信息
    };
    
    
    include "/etc/named.rfc1912.zones"; #包含区域配置文件里的所有配置
    
    
    修改
    
    
    (3)修改区域配置文件,添加正向区域配置
    vim /etc/named.rfc1912.zones  
    #文件里有模版,可复制粘贴后修改
    zone "benet.com." IN        {●正向解析"benet.com"区域
    type master;#类型为主区域
    file "benet.com.zone.";    ●指定区域数据文件为benet.com.zone
    allow-update { none; } ;
    };
    
    
    配置正向区域数据文件
    cd /var/ named/
    cp -p named.localhost benet.com.zone               #保留源文件的权限和属主的属性复制
    vim /var/named/benet.com.zone
    $TTL 1D                                            #有效解析记录的生存周期
    @   in SOA benet.com. admin.benet.com. (   #“@"符号表示当前的DNS区域名
                         0   ; serial              #更新序列号,可以是10位以内的整数
                        1D   ; refresh             #刷新时间,重新下载地址数据的间隔
                        1H   ; retry               #重试延时,下载失败后的重试间隔
                        1W   ; expire              #失效时间,超过该时间仍无法下载则放弃#
    					3H)  ; minimum             #无效解析记录的生存周期,
            NS     benet.com                     #记录当前区域的DNS服务器的名称
            A     192.168.10.23                  #记录主机IP地址
    IN   MX 10    mail.benet.com            #MX为邮件交换记录,数字越大优先级越低
    www  IN A     192.168.10.23              #记录正向解析www.benet.com对应的IP
    mail IN A     192.168.10.11              #MX为邮件交换记录,数字越大优先级低 
    ftp  IN CNAME  www                       #CNAME使用别名,ftp 是www的别名
    *    IN A   192.168.10.100               #泛域名解析,“*"代表任意主机名
    
    #“@”这里是一个变量,当前DNS区域名
    #SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
    # "benet.com. "此为完全合格域名(FQDN) ,后面有个“."不能漏掉
    #“admin.benet.com.”表示管理员邮箱,这里的“@”符号已有其他含义,所以用“.”代替
    #IN 表示internet
    
    
    
    (5)启动服务,关闭防火墙
    systemctl start named
    systemctl stop firewalld
    setenforce 0
    #如果服务启动失败,可以查看日志文件来排查错误
    tail -f /var/log/messages
    #如果服务启动卡住,可以执行下面命令解决
    rndc-confgen -r /dev/urandom -a
    
    #对域名语法进行检查(named.conf)
    named-checkconf -z /etc/named.conf
    
    (6)在客户端的域名解析配置文件中添加DNS服务器地址
    vi /etc/resolv .conf
    #修改完后立即生效
    nameserver 192.168.10.23
    或
    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    #修改完后需要重启网卡
    DNS1=192.168.10.23
    systemctl restart network
    
    (7)测试DNS解析
    [root@benet23 ~]# systemctl restart network
    [root@benet23 ~]# host www.benet.com
    www.benet.com has address 192.168.10.23 
    [root@benet23 ~]# nslookup www.benet.com
    Server:         192.168.10.23
    Address:        192.168.10.23#53
    
    Name:   www.benet.com
    Address: 192.168.10.23
    
    [root@benet23 ~]# nslookup mail.benet.com
    Server:         192.168.10.23
    Address:        192.168.10.23#53
    
    Name:   mail.benet.com
    Address: 192.168.10.11
    
    [root@benet23 ~]# nslookup zhangsan.benet.com
    Server:         192.168.10.23
    Address:        192.168.10.23#53
    
    Name:   zhangsan.benet.com
    Address: 192.168.10.100
    ====================================================================================
    
    
    扩展内容
    ----反向解析----
    vim /etc/named.rfc1912.zones
    // 192.168.10.0 反向则是 10.168.192
    zone "10.168.192.in-addr.arpa" IN {
            type master;
            file "benet.com.zone.local;";    //指定反向解析的数据文件,也可以跟正向解析的数据文件相同
            allow-update { none; };
    };
    
    cd /var/named/
    cp -p benet.com.zone benet.com.zone.local
    $TTL 1D   #有效解析记录的生存周期,默认单位为秒
    @       IN SOA  benet.com. admin.benet.com. (    #SOA标记、域名和管理员邮箱,@变量表示域名
                                            0       ; serial      #更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步
                                            1D      ; refresh  #刷新时间
                                            1H      ; retry     #重试刷新时间间隔
                                            1W      ; expire   #失效时间,超过该时间则放弃
                                            3H )    ; minimum   #无效解析记录的生存周期
            NS      benet.com.
            A      192.168.10.23
    100 IN PTR   www.benet.com
    200 IN PTR   mail.benet.com
    # 20是192.168.10.20的意思
    # RTP反向指针 功能:反向解析
    
    
    
    systemctl restart named   //rndc reload也可以重载配置文件
    
    
    host 192.168.10.20
    // 将会反向解析出域名www.benet.com
    
  4. 建立区域数据文件(复制模板保留权限 cp -p)。
    • 正向区域文件 (benet.com.zone) 包含 A, CNAME, MX 记录。
    • 反向区域文件 (benet.com.zone.local) 包含 PTR 记录。
  5. 检查语法 (named-checkconf, named-checkzone) 并启动服务 (systemctl start named)。
  6. 在客户端将DNS服务器地址指向新配置的服务器进行测试 (nslookup, host)。

五、附录:重要概念补充

  • IANA/ICANN:全球顶级IP地址和域名资源的管理机构。
  • CNNIC:中国互联网络信息中心,管理国家顶级域 .cn
  • 常见公共DNS
    • 114.114.114.114 (国内)
    • 8.8.8.8 (Google)
    • 223.5.5.5 / 223.6.6.6 (阿里云)
  • IPv6与根服务器:IPv6协议和新的DNS架构(如根服务器数量可能增加至25个)为改变全球根服务器分布格局提供了可能性,中国正在积极研究相关技术

总结

DNS 看似复杂,但其核心逻辑是 “分层管理 + 分布式查询”:从根服务器到权威服务器,每一层都在接力完成 “域名→IP” 的翻译工作。掌握 DNS 不仅能帮助你理解互联网的运作机制,更能在实际工作中解决域名解析故障、搭建可靠的网络服务。希望本文能带你走进 DNS 的世界,让你对这个 “互联网导航系统” 有更清晰的认识!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐