DNS服务(Linux)

DNS 介绍

dns,Domain Name Server,它的作用是将域名解析为 IP 地址,或者将IP地址解析为域名。

这需要运行在三层和四层,也就是说它需要使用 TCP 或 UDP 协议,并且需要绑定端口,53。在使用时先通过 UDP 去查询,哪里 UDP 查询不到再使用 TCP 查询。

bind软件

安装

复制代码
[root@localhost ~]# dnf install bind -y
Updating Subscription Management repositories.
Unable to read consumer identity
​
This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.
​
BaseOS                                                                                        2.7 MB/s | 2.7 kB     00:00    
AppStream                                                                                     2.9 MB/s | 3.2 kB     00:00    
Dependencies resolved.
==============================================================================================================================
 Package                           Architecture           Version                             Repository                 Size
==============================================================================================================================
Installing:
 bind                              x86_64                 32:9.16.23-24.el9_5                 appStream                 509 k
Installing dependencies:
 bind-dnssec-doc                   noarch                 32:9.16.23-24.el9_5                 appStream                  49 k
 bind-libs                         x86_64                 32:9.16.23-24.el9_5                 appStream                 1.2 M
 bind-license                      noarch                 32:9.16.23-24.el9_5                 appStream                  14 k
 fstrm                             x86_64                 0.6.1-3.el9                         appStream                  30 k
 libmaxminddb                      x86_64                 1.5.2-4.el9                         appStream                  35 k
 libuv                             x86_64                 1:1.42.0-2.el9_4                    appStream                 151 k
 protobuf-c                        x86_64                 1.3.3-13.el9                        baseOS                     37 k
 python3-bind                      noarch                 32:9.16.23-24.el9_5                 appStream                  72 k
 python3-ply                       noarch                 3.11-14.el9                         baseOS                    111 k
Installing weak dependencies:
 bind-dnssec-utils                 x86_64                 32:9.16.23-24.el9_5                 appStream                 122 k
 bind-utils                        x86_64                 32:9.16.23-24.el9_5                 appStream                 213 k
​
Transaction Summary
==============================================================================================================================
Install  12 Packages
​
Total size: 2.6 M
Installed size: 7.2 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                      1/1 
  Installing       : bind-license-32:9.16.23-24.el9_5.noarch                                                             1/12 
  Installing       : protobuf-c-1.3.3-13.el9.x86_64                                                                      2/12 
  Installing       : libuv-1:1.42.0-2.el9_4.x86_64                                                                       3/12 
  Installing       : libmaxminddb-1.5.2-4.el9.x86_64                                                                     4/12 
  Installing       : fstrm-0.6.1-3.el9.x86_64                                                                            5/12 
  Installing       : bind-libs-32:9.16.23-24.el9_5.x86_64                                                                6/12 
  Installing       : bind-utils-32:9.16.23-24.el9_5.x86_64                                                               7/12 
  Installing       : bind-dnssec-doc-32:9.16.23-24.el9_5.noarch                                                          8/12 
  Installing       : python3-ply-3.11-14.el9.noarch                                                                      9/12 
  Installing       : python3-bind-32:9.16.23-24.el9_5.noarch                                                            10/12 
  Installing       : bind-dnssec-utils-32:9.16.23-24.el9_5.x86_64                                                       11/12 
  Running scriptlet: bind-32:9.16.23-24.el9_5.x86_64                                                                    12/12 
  Installing       : bind-32:9.16.23-24.el9_5.x86_64                                                                    12/12 
  Running scriptlet: bind-32:9.16.23-24.el9_5.x86_64                                                                    12/12 
  Verifying        : protobuf-c-1.3.3-13.el9.x86_64                                                                      1/12 
  Verifying        : python3-ply-3.11-14.el9.noarch                                                                      2/12 
  Verifying        : bind-32:9.16.23-24.el9_5.x86_64                                                                     3/12 
  Verifying        : bind-dnssec-doc-32:9.16.23-24.el9_5.noarch                                                          4/12 
  Verifying        : bind-dnssec-utils-32:9.16.23-24.el9_5.x86_64                                                        5/12 
  Verifying        : bind-libs-32:9.16.23-24.el9_5.x86_64                                                                6/12 
  Verifying        : bind-license-32:9.16.23-24.el9_5.noarch                                                             7/12 
  Verifying        : bind-utils-32:9.16.23-24.el9_5.x86_64                                                               8/12 
  Verifying        : fstrm-0.6.1-3.el9.x86_64                                                                            9/12 
  Verifying        : libmaxminddb-1.5.2-4.el9.x86_64                                                                    10/12 
  Verifying        : libuv-1:1.42.0-2.el9_4.x86_64                                                                      11/12 
  Verifying        : python3-bind-32:9.16.23-24.el9_5.noarch                                                            12/12 
Installed products updated.
​
Installed:
  bind-32:9.16.23-24.el9_5.x86_64                                bind-dnssec-doc-32:9.16.23-24.el9_5.noarch                  
  bind-dnssec-utils-32:9.16.23-24.el9_5.x86_64                   bind-libs-32:9.16.23-24.el9_5.x86_64                        
  bind-license-32:9.16.23-24.el9_5.noarch                        bind-utils-32:9.16.23-24.el9_5.x86_64                       
  fstrm-0.6.1-3.el9.x86_64                                       libmaxminddb-1.5.2-4.el9.x86_64                             
  libuv-1:1.42.0-2.el9_4.x86_64                                  protobuf-c-1.3.3-13.el9.x86_64                              
  python3-bind-32:9.16.23-24.el9_5.noarch                        python3-ply-3.11-14.el9.noarch                              
​
Complete!


DNS 服务中的 bind
bind(Berkeley Internet Name Domain)是 Linux 系统中广泛使用的 DNS(Domain Name System)服务器软件。
功能:它的主要功能是将域名解析为 IP 地址,或者将 IP 地址反向解析为域名。借助 bind,你可以搭建自己的 DNS 服务器,对域名解析进行管理和配置。
配置:bind 的配置文件通常位于 /etc/bind 目录下,主要的配置文件是 named.conf,而区域文件则用于定义具体的域名解析规则。
示例配置:

// named.conf.options
options {
    directory "/var/cache/bind";
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

// named.conf.local
zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
};

// db.example.com
$TTL    604800
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.example.com.
@       IN      A       192.168.1.100
ns1     IN      A       192.168.1.100
www     IN      A       192.168.1.100



在这些配置文件中,定义了 DNS 服务器的全局选项、域名区域以及具体的解析记录。通过配置 bind,你可以让 DNS 服务器依据这些规则进行域名解析。
复制代码

查看

复制代码
[root@localhost ~]# rpm -ql bind
/etc/named.conf     # 主配置文件
/etc/named.rfc1912.zones    # 区域数据配置文件
......
/var/named      # 区域数据文件存放目录
/var/named/named.empty  # 正向解析模板文件
/var/named/named.localhost
/var/named/named.loopback # 反向解析模板文件
/var/named/slaves       # 辅助区域配置文件存放目录
.......
/usr/lib/systemd/system/named.service       #  服务启动文件

查看正向解析模板文件

复制代码
[root@localhost ~]# cat /var/named/named.empty
$TTL 3H
@   IN SOA  @ rname.invalid. (
                    0   ; serial   序号
                    1D  ; refresh  刷新时间
                    1H  ; retry     重试时间
                    1W  ; expire    过期时间
                    3H )    ; minimum  否定缓存时间
    NS  @
    A   127.0.0.1
    AAAA    ::1

整体结构概述
此区域文件包含了起始授权机构(SOA)记录、名称服务器(NS)记录、IPv4 地址记录(A)和 IPv6 地址记录(AAAA)。这些记录为 DNS 解析提供了关键信息。
详细解释
1. $TTL 3H
$TTL 是一个指令,用来设置该区域文件里所有资源记录的默认生存时间(Time To Live)。
3H 代表 3 小时,意味着这些记录在 DNS 缓存中的有效时长为 3 小时。超过这个时间,缓存中的记录将被视为无效,需要重新从权威 DNS 服务器获取。
2. @ IN SOA @ rname.invalid. (
@:在区域文件里,@ 是一个占位符,代表该区域的域名。一般而言,它会被替换为该区域的实际域名。
IN:表明这是一个 Internet 类的 DNS 记录,这是最常见的 DNS 记录类型。
SOA:即起始授权机构(Start of Authority)记录,它是每个 DNS 区域文件中必不可少的记录,为该区域提供权威信息。
@:作为主名称服务器,这里的 @ 同样代表该区域的域名。
rname.invalid.:这是负责该区域的管理员的电子邮件地址。由于 DNS 不允许使用 @ 符号,所以用 . 来替代。比如 rname.invalid. 实际上代表 rname@invalid。
3. 序列号及相关时间参数
plaintext
0   ; serial  序号
1D  ; refresh 刷新时间
1H  ; retry   重试时间
1W  ; expire  过期时间
3H  ; minimum 否定缓存时间
serial(序列号):其值为 0,这个序列号用于标识区域文件的版本。当区域文件内容有更新时,序列号需要增加,这样从属 DNS 服务器就能通过比较序列号来判断是否需要更新本地缓存。
refresh(刷新时间):1D 代表 1 天,从属 DNS 服务器每隔 1 天就会尝试从主 DNS 服务器获取最新的区域文件。
retry(重试时间):1H 代表 1 小时,若从属 DNS 服务器在刷新区域文件时失败,会在 1 小时后再次尝试。
expire(过期时间):1W 代表 1 周,若从属 DNS 服务器在 1 周内都无法从主 DNS 服务器获取最新的区域文件,那么它将认为该区域文件已过期,不再提供该区域的解析服务。
minimum(否定缓存时间):3H 代表 3 小时,当 DNS 查询得到否定响应(如域名不存在)时,该否定响应会在缓存中保留 3 小时。
4. NS @
NS:即名称服务器(Name Server)记录,它指定了负责该区域的 DNS 服务器。
@:这里代表该区域的域名,表明该区域的权威 DNS 服务器就是该区域本身。
5. A 127.0.0.1
A:是 IPv4 地址记录,它将域名映射到对应的 IPv4 地址。
127.0.0.1:这是本地回环地址,意味着该区域的域名解析到本地主机。
6. AAAA ::1
AAAA:为 IPv6 地址记录,它把域名映射到对应的 IPv6 地址。
::1:这是 IPv6 的本地回环地址,表明该区域的域名在 IPv6 环境下解析到本地主机。
总结
这个 named.empty 文件构建了一个基础的 DNS 区域,把域名解析到本地主机,并且设定了区域文件的更新和缓存策略。在实际应用中,你需要依据具体需求对这些记录进行修改和扩展。

查看反向解析模板文件

复制代码
[root@localhost ~]# cat /var/named/named.loopback
$TTL 1D
@   IN SOA  @ rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS  @
    A   127.0.0.1
    AAAA    ::1
    PTR localhost.

1. PTR 记录的用途
正常情况下,DNS 的正向解析是把域名解析为 IP 地址,比如通过 www.example.com 解析出对应的 IP 地址(如 192.168.1.100)。而反向解析则是相反的过程,它依据 IP 地址找出对应的域名。反向解析在很多场景中都很重要,例如邮件服务器验证、网络安全审计等。

2. PTR localhost. 的具体解释
PTR:这是记录类型,表明这是一条反向解析记录。
localhost.:这是与 IP 地址对应的域名。结合前面的 A 记录 A 127.0.0.1 和 AAAA 记录 AAAA ::1,这里的 PTR localhost. 表示将 IPv4 地址 127.0.0.1 和 IPv6 地址 ::1 反向解析为域名 localhost.。

服务启动文件

复制代码
[root@localhost ~]# cat /usr/lib/systemd/system/named.service
[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Wants=named-setup-rndc.service
Before=nss-lookup.target
After=named-setup-rndc.service
After=network.target
​
[Service]
Type=forking
Environment=NAMEDCONF=/etc/named.conf
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/run/named/named.pid
​
ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'
ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS
ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'
​
ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
​
PrivateTmp=true
​
[Install]
WantedBy=multi-user.target

查看主配置文件

复制代码
[root@localhost ~]# cat /etc/named.conf
# 配置的核心选项
options {
    # 监听哪个主机的 53 端口,以IPv4的格式来监听,一般写当前主机的IP地址。注意此文件中每一行结束使用的分号
    listen-on port 53 { 127.0.0.1; };
    listen-on-v6 port 53 { ::1; };
    # 指定区域数据文件存放目录
    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";
    # 是否允许查询,此配置可以删除,如果允许所有人查询,将它的值设置为 any,如果值为 localhost则表示只能当前主机查询
    allow-query     { localhost; };
​
    # 是否允许递归查询,一般会设置为 false
    recursion yes;
​
    dnssec-validation yes;
​
    managed-keys-directory "/var/named/dynamic";
    geoip-directory "/usr/share/GeoIP";
​
    # 进程pid文件
    pid-file "/run/named/named.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;
        };
};
# 根服务配置
zone "." IN {
    type hint;
    file "named.ca";
};
# 引入的区域数据配置文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

DNS正向解析配置

需求:将 <www.example.com> 解析为你们电脑中虚拟机的IP地址,比如我们 IP是 192.168.153.7

实现步骤

1、安装bind软件

2、修改主配置文件

复制代码
[root@localhost ~]# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.72.135; };
        directory       "/var/named";
};
zone "example.com" IN {
        type master;
        file "example.zone";
};


详细解释:
全局选项部分(options 块)

options {
        listen-on port 53 { 192.168.72.135; };
        directory         "/var/named";
};

listen-on port 53 { 192.168.72.135; };
listen-on:此指令用于指定 DNS 服务器监听的网络接口和端口。
port 53:表明 DNS 服务器将在 TCP 和 UDP 的 53 号端口上监听请求,因为 53 号端口是 DNS 服务的标准端口。
{ 192.168.72.135; }:这里指定了 DNS 服务器仅监听 IP 地址为 192.168.72.135 的网络接口。也就是说,只有发往该 IP 地址 53 号端口的 DNS 请求才会被处理。如果有多块网卡或多个 IP 地址,你可以添加多个 IP 地址,例如 { 192.168.72.135; 192.168.72.136; }。
directory "/var/named";
directory:该指令定义了 DNS 服务器查找区域文件的默认目录。区域文件包含了域名到 IP 地址的映射等 DNS 记录。在这个配置中,所有区域文件都将从 /var/named 目录下查找。例如,后续配置中提到的 example.zone 文件就会在这个目录下寻找。
区域配置部分(zone 块)

zone "example.com" IN {
        type master;
        file "example.zone";
};

zone "example.com" IN
zone:这是定义一个 DNS 区域的关键字。
"example.com":指定了要配置的域名区域,即 example.com。这个区域包含了与 example.com 相关的所有 DNS 记录。
IN:表示这是一个 Internet 类的 DNS 区域,这是最常见的区域类型。
type master;
type:用于指定该区域的类型,这里的 master 表明这台 DNS 服务器是 example.com 区域的主服务器。主服务器拥有该区域的权威数据,它可以对区域文件进行修改,并将更新同步给从属服务器。
file "example.zone";
file:指定了存储该区域 DNS 记录的文件名称。在这个配置中,example.com 区域的所有 DNS 记录都存储在 /var/named/example.zone 文件中。该文件应包含如 SOA(起始授权机构)、NS(名称服务器)、A(IPv4 地址记录)等各种 DNS 记录。
总结
这个配置文件的主要作用是让 DNS 服务器监听特定 IP 地址的 53 号端口,将 /var/named 作为区域文件的存储目录,并将 example.com 区域的管理职责赋予这台服务器,相关的 DNS 记录存储在 example.zone 文件中。

3、检测主配置文件是否有语法错误

复制代码
[root@localhost ~]# named-checkconf

[root@tomcat1 /]# named-checkconf 
/etc/named.conf:3: '{' expected near '53'
有提示说明有错误,没有提示说明正确,以上错误可能是你没写port

执行这条命令后,如果没有输出任何信息表示主配置文件没有错误。

4、编写区域数据配置文件

复制代码
[root@localhost ~]# vim /var/named/example.zone
$TTL    1D
@       IN      SOA     ns.example.com. admin.example.com. (
                                                        0
                                                        1H
                                                        1W
                                                        2M
                                                        1D
                                                        )
        IN      NS      ns
        IN      MX  5   mail
ns      IN      A       192.168.72.135      # NS 记录要批向当前DNS服务器的IP地址
www     IN      A       10.10.10.11
mail    IN      A       92.68.22.14
web     IN      CNAME   www                 # CNAME记录是别名记录

你提供的 example.zone 文件是一个 DNS 区域文件,用于定义 example.com 域名的 DNS 记录。下面为你详细解释文件中各部分的含义:
1. $TTL 1D
$TTL 是一个指令,用于设置该区域文件中所有资源记录的默认生存时间(Time To Live)。
1D 表示 1 天,意味着这些记录在 DNS 缓存中的有效时间为 1 天。超过这个时间,缓存中的记录将被视为无效,需要重新从权威 DNS 服务器获取。
2. @ IN SOA ns.example.com. admin.example.com. (...)
@:在区域文件中,@ 是一个占位符,代表该区域的域名,即 example.com。
IN:表示这是一个 Internet 类的 DNS 记录,这是最常见的 DNS 记录类型。
SOA:即起始授权机构(Start of Authority)记录,是每个 DNS 区域文件中必须存在的记录,为该区域提供权威信息。
ns.example.com.:主名称服务器的域名,负责该区域的 DNS 解析。
admin.example.com.:负责该区域的管理员的电子邮件地址。由于 DNS 不允许使用 @ 符号,所以用 . 来替代。例如 admin.example.com. 实际上代表 [email protected]。
序列号及相关时间参数
plaintext
0       ; serial  序列号
1H      ; refresh 刷新时间
1W      ; retry   重试时间
2M      ; expire  过期时间
1D      ; minimum 否定缓存时间
serial(序列号):值为 0,这个序列号用于标识区域文件的版本。当区域文件内容有更新时,序列号需要增加,以便从属 DNS 服务器通过比较序列号来判断是否需要更新本地缓存。
refresh(刷新时间):1H 表示 1 小时,从属 DNS 服务器每隔 1 小时会尝试从主 DNS 服务器获取最新的区域文件。
retry(重试时间):1W 表示 1 周,如果从属 DNS 服务器在刷新区域文件时失败,会在 1 周后再次尝试。
expire(过期时间):2M 表示 2 个月,如果从属 DNS 服务器在 2 个月内都无法从主 DNS 服务器获取最新的区域文件,那么它将认为该区域文件已过期,不再提供该区域的解析服务。
minimum(否定缓存时间):1D 表示 1 天,当 DNS 查询得到否定响应(如域名不存在)时,该否定响应会在缓存中保留 1 天。
3. IN NS ns
NS:即名称服务器(Name Server)记录,指定了负责该区域的 DNS 服务器。
ns:这里的 ns 实际上是 ns.example.com 的简写,表示该区域的权威 DNS 服务器是 ns.example.com。
4. IN MX 5 mail
MX:即邮件交换器(Mail Exchanger)记录,用于指定接收该域名电子邮件的邮件服务器。
5:是优先级,数值越小,优先级越高。
mail:实际上是 mail.example.com 的简写,表示 mail.example.com 是接收 example.com 域名电子邮件的邮件服务器。
5. ns IN A 192.168.72.135
A:是 IPv4 地址记录,将域名映射到对应的 IPv4 地址。
ns:即 ns.example.com,表示 ns.example.com 的 IPv4 地址是 192.168.72.135。
6. www IN A 10.10.10.11
A:IPv4 地址记录。
www:即 www.example.com,表示 www.example.com 的 IPv4 地址是 10.10.10.11。
7. mail IN A 92.68.22.14
A:IPv4 地址记录。
mail:即 mail.example.com,表示 mail.example.com 的 IPv4 地址是 92.68.22.14。
8. web IN CNAME www
CNAME:即规范名称(Canonical Name)记录,也称为别名记录。
web:即 web.example.com,表示 web.example.com 是 www.example.com 的别名,访问 web.example.com 实际上会被解析为 www.example.com 的 IP 地址。
总结
这个 example.zone 文件定义了 example.com 域名的 DNS 记录,包括主名称服务器、邮件服务器、Web 服务器等的相关信息,以及它们对应的 IP 地址和别名。这些记录为 DNS 解析提供了必要的信息,使得用户可以通过域名访问相应的服务。

5、检测区域数据匹配文件的语法

复制代码
# 格式:named-checkzone  要解析的域名    这个域名解析对应区域数据文件的路径
[root@localhost ~]# named-checkzone example.com /var/named/example.zone 
zone example.com/IN: loaded serial 0
OK

6、启动服务

复制代码
[root@localhost ~]# systemctl start named

7、检测解析是否成功

复制代码
# 1. 解析NS记录
# 使用格式:dig -t 要解析的记录类型  域名     @DNS服务器的IP地址
[root@localhost ~]# dig -t NS example.com @192.168.72.135
​
; <<>> DiG 9.16.23-RH <<>> -t NS example.com @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12332
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 4d561b462550d8b20100000067e9400ac355adc305b548e5 (good)
;; QUESTION SECTION:
;example.com.           IN  NS
​
;; ANSWER SECTION:
example.com.        86400   IN  NS  ns.example.com.
​
;; ADDITIONAL SECTION:
ns.example.com.     86400   IN  A   192.168.72.135
​
;; Query time: 0 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Sun Mar 30 20:58:50 CST 2025
;; MSG SIZE  rcvd: 101
​
​
# 2. 解析A记录
[root@localhost ~]# dig -t A www.example.com @192.168.72.135
​
; <<>> DiG 9.16.23-RH <<>> -t A www.example.com @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53940
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b6d24840a685a6930100000067e940958baf9d4b8a53e81f (good)
;; QUESTION SECTION:
;www.example.com.       IN  A
​
;; ANSWER SECTION:
www.example.com.    86400   IN  A   10.10.10.11
​
;; Query time: 0 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Sun Mar 30 21:01:09 CST 2025
;; MSG SIZE  rcvd: 88

以上代码具体作用:

复制代码
命令一:dig -t NS example.com @192.168.72.135
命令解析
dig:这是一个在 Linux、Unix 以及 macOS 系统里常用的 DNS 查询工具,其功能是向 DNS 服务器发送查询请求,并且显示响应结果。
-t NS:-t 是 dig 命令里用于指定查询记录类型的选项,NS 代表名称服务器(Name Server)记录。该记录的作用是指定负责某个域名的权威 DNS 服务器。
example.com:此为要查询的域名。
@192.168.72.135:@ 后面跟的是 DNS 服务器的 IP 地址,意味着要向 192.168.72.135 这个 DNS 服务器发起查询请求。
命令作用
这条命令的用途是向 IP 地址为 192.168.72.135 的 DNS 服务器查询 example.com 域名的 NS 记录,也就是获取负责 example.com 域名的权威 DNS 服务器列表。
命令二:dig -t A www.example.com @192.168.72.135
命令解析
dig:同样是 DNS 查询工具。
-t A:A 代表 IPv4 地址记录,该记录的作用是将域名映射到对应的 IPv4 地址。
www.example.com:要查询的具体域名。
@192.168.72.135:指定向 192.168.72.135 这个 DNS 服务器发起查询请求。
命令作用
这条命令的用途是向 IP 地址为 192.168.72.135 的 DNS 服务器查询 www.example.com 域名的 A 记录,也就是获取 www.example.com 对应的 IPv4 地址。
总结
这两条 dig 命令能够帮助你验证 DNS 服务器的配置是否正确,以及域名解析是否能够正常工作。通过查询不同类型的 DNS 记录,你可以了解域名的权威 DNS 服务器信息和具体的 IP 地址映射情况。
复制代码

DNS反向解析配置

复制代码
需求:将 192.168.72.135 解析为 www.exampe.com。

实现:

1、修改主配置文件

[root@localhost ~]# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.72.135; };
        directory       "/var/named";
};
zone "72.168.192.in-addr.arpa" IN {
        type master;
        file "fanxiang.zone";
};
2、检测主配置文件的语法

[root@localhost ~]# named-checkconf
3、编写区域数据反向解析文件

[root@localhost ~]# vim /var/named/fanxiang.zone
$TTL    1D
@       IN      SOA     ns.example.com. amdin.example.com. (
                                        7
                                        1D
                                        1W
                                        2M
                                        1D )
        IN      NS      ns
ns      IN      A       192.168.72.135
135     IN      PTR     www.example.com.
4、检测区域文件的语法

[root@localhost ~]# named-checkzone 72.168.192.in-addr.arpa /var/named/fanxiang.zone 
zone 72.168.192.in-addr.arpa/IN: loaded serial 7
OK
5、启动服务

[root@localhost ~]# systemctl restart named
6、功能测试

[root@localhost ~]# dig -x 192.168.72.135 @192.168.72.135
​
; <<>> DiG 9.16.23-RH <<>> -x 192.168.72.135 @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54279
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: be29844f0e1189e30100000067e9456f6d407ccdce24d52e (good)
;; QUESTION SECTION:
;135.72.168.192.in-addr.arpa.   IN  PTR
​
;; ANSWER SECTION:
135.72.168.192.in-addr.arpa. 86400 IN   PTR www.example.com.72.168.192.in-addr.arpa.
​
;; Query time: 0 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Sun Mar 30 21:21:51 CST 2025
;; MSG SIZE  rcvd: 137

root@localhost \~\]# dig -x 192.168.72.135 @192.168.72.135详解 dig -x 192.168.72.135 @192.168.72.135 这条命令使用了 dig 工具来进行 DNS 查询,下面为你详细解释该命令的各个部分及其作用: 命令解析 dig dig(Domain Information Groper)是一个在 Linux、Unix 以及 macOS 系统中常用的 DNS 诊断工具,它的主要功能是向 DNS 服务器发送查询请求,并显示详细的响应结果,常用于测试 DNS 服务器配置、排查域名解析问题等。 -x -x 是 dig 命令的一个选项,它是进行反向 DNS 查找(Reverse DNS Lookup)的快捷方式。反向 DNS 查找与正向 DNS 查找相反,正向查找是将域名解析为对应的 IP 地址,而反向查找则是根据给定的 IP 地址查找对应的域名。当使用 -x 选项时,dig 会自动将 IP 地址转换为相应的反向查找区域(如 in-addr.arpa 用于 IPv4 地址)并进行查询。 192.168.72.135 这是要进行反向 DNS 查找的目标 IP 地址。也就是说,你希望通过 DNS 服务器查询这个 IP 地址对应的域名是什么。 @192.168.72.135 @ 符号用于指定要查询的 DNS 服务器的 IP 地址。在这个命令中,你指定向 IP 地址为 192.168.72.135 的 DNS 服务器发起反向查询请求。 命令作用 这条命令的主要作用是向 IP 地址为 192.168.72.135 的 DNS 服务器发送一个反向 DNS 查询请求,以获取 IP 地址 192.168.72.135 对应的域名。如果该 DNS 服务器配置了相应的反向解析区域文件,并且其中包含了 192.168.72.135 的反向解析记录,那么它将返回对应的域名;如果没有配置或者没有找到对应的记录,可能会返回一个表示未找到的结果。 示例输出及含义 假设命令执行后有如下简化输出: plaintext ; <<>> DiG 9.16.23-RH <<>> -x 192.168.72.135 @192.168.72.135 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52345 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;135.72.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 135.72.168.192.in-addr.arpa. 86400 IN PTR myserver.example.com. ;; Query time: 2 msec ;; SERVER: 192.168.72.135#53(192.168.72.135) ;; WHEN: Mon Apr 07 15:30:00 CST 2025 ;; MSG SIZE rcvd: 103 QUESTION SECTION:显示了查询的具体内容,这里是对 135.72.168.192.in-addr.arpa 进行 PTR(Pointer,指针记录,用于反向解析)类型的查询。 ANSWER SECTION:显示了查询的结果,这里表明 IP 地址 192.168.72.135 对应的域名是 myserver.example.com。 通过这样的反向查询,你可以验证 IP 地址和域名之间的映射关系是否正确配置,在网络管理、安全审计等场景中具有重要作用。 ​

相关推荐
MXsoft6182 分钟前
美信监控易:揭秘高效数据采集和数据分析双引擎
大数据·运维
张3蜂12 分钟前
[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
运维·jenkins
励志成为大佬的小杨20 分钟前
linux常见指令
linux·运维·服务器
汐汐咯23 分钟前
vscode连接windows服务器出现过程试图写入的管道不存在
运维·服务器
APItesterCris25 分钟前
Python + 淘宝 API 开发实战:自动化采集商品详情与 SKU 数据清洗指南
大数据·运维·数据库·自动化
Mr_Chenph28 分钟前
Jenkins 2.492.3 Docker 速配
运维·jenkins
正点原子1 小时前
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS232接口测试
linux·功能测试·stm32·单片机·嵌入式硬件·stm32mp257
laimaxgg1 小时前
Docker华为云创建私人镜像仓库
运维·服务器·docker·容器·华为云
南川琼语2 小时前
Linux——共享内存
linux·运维·服务器
虾球xz3 小时前
游戏引擎学习第216天
服务器·c++·学习·游戏引擎