Linux操作系统网络服务模块一DNS服务概述

前言:
       DNS(Domain Name System)是互联网的“翻译官”,将易记的域名转换为机器可识别的IP地址,支撑着全球网络的高效通信。在Linux操作系统中,DNS服务通过开源软件(如BIND)实现,既是网络基础设施的核心组件,也是运维人员必须掌握的关键技能。本模块将从DNS基础概念、服务架构、配置管理到实际应用场景展开,结合Linux系统特性,深入解析如何搭建高可用、安全的DNS服务,并探讨其在负载均衡、安全防护等场景中的实践价值。

目录

一、概述

概念

作用

监听端口

默认运行用户

二、 完全限定域名

组成

域类型

​编辑层次结构详解

三、DNS解析过程

客户端如何解析域名(必须背会)

四、域名服务器的分类

根据作用

根据应用场景

五、DNS服务器部署

安装bind包

核心文件解析

命令解析

配置文件详解

服务主配置文件

定义的区域配置文件

解析记录说明

六、配置主服务器单点架构(手动配置)

1.服务主文件配置

2.定义区域文件配置

3.正向解析文件配置

4.反向解析文件配置

 ​​编辑

5.启动服务

6.解析测试

七、 配置DNS主从架构

1.主服务配置

(1)服务主文件配置

(2)定义区域文件配置

2.从服务器配置

(1)从服务器主文件配置

(2)定义区域文件配置

3.启动服务

4.解析测试

故障模拟

 八、配置主服务器单点架构(shell脚本实现)

部署流程:

1.主DNS服务器配置脚本 (setup_master_dns.sh)

2.从DNS服务器配置脚本 (setup_slave_dns.sh)

3. 客户端DNS测试脚本 (dns_test_client.sh)

运行脚本​​​​​​​验证:
​​​​​​​​​1.自动配置DNS解析器:

​​​​2.域名解析测试:

3.反向解析测试:

总结:


一、概述

概念

Domain Name Service,一套分布式的域名服务系统,即有多个DNS服务器遍布于世界。每个DNS服务器上存放着大量的机器域名和IP地址的映射,并且是动态更新。众多网络客户端程序都使用DNS协议来向DNS服务器查询目标主机的IP地址。

作用

正向解析:将已知的域名解析为IP地址 反向解析:将已知的IP地址解析为域名

监听端口

53/udp | 53/TCP

默认运行用户

named

二、 完全限定域名

FQDN(Fully Qualified Domain Name)

域名缩写机构类型域名缩写机构类型
com商业系统firm商业或公司
edu教育系统store提供购买商业的业务部门
gov政府机关web主要活动与www有关的实体
mil军队系统arts以文化为主的实体
net网管部门rec以消遣性娱乐活动为主的实体
org非营利性组织inf提供信息服务的实体
组成

主机名.三级域.二级域名.顶级域名.

案例:www.baidu.com.

域类型
类型举例
根域.
顶级域cn、hk、uk、org、edu、com、mil、gov、net
二级域baidu、163、sina、sohu

层次结构详解
  1. 根域(最顶层)​

    • 唯一标识为“.”(英文句号),是整个域名系统的起点,不直接显示在域名中(如 example.com 实际完整形式为 example.com.)。
  2. 顶级域名(一级域名,TLD)​

    • 直接隶属于根域,分为两类:
      • 通用顶级域(gTLD)​​:如 com(商业机构)、org(非营利组织)、net(网络服务)、edu(教育机构)、gov(政府机构)、aero(航空业)等。
      • 国家/地区顶级域(ccTLD)​​:如 cn(中国)、uk(英国)、jp(日本)等。
  3. 二级域名(二级域名)​

    • 隶属于顶级域名,由注册者或管理机构自定义,例如:
      • 在 com 下:cctv(央视官网)、ibm(IBM公司)、huawei(华为公司);
      • 在 cn 下:bj(北京地区)、edu(中国教育机构)、com(中国商业机构)。
  4. 三级域名及以下

    • 进一步细分二级域名,例如:
      • 三级域名:mail.cctv.com(央视邮箱服务)、www.huawei.com(华为官网);
      • 四级域名:mail.tsinghua.edu.cn(清华邮箱服务,其中 tsinghua 是 edu.cn 下的二级域名,edu.cn 是 cn 下的二级域名)。

三、DNS解析过程

客户端如何解析域名(必须背会)
  1. 本地DNS缓存

  2. 本地hosts文件,在DNS服务器诞生之前,所有的主机之间都是通过hosts文件进行的。

  3. 指向的DNS服务器IP:

递归查询:直接给出解析结果,客户机与本地DNS服务器之间的查询。(所答即所问)

​迭代查询:没有给出解析结果,本地DNS服务器与根等其他DNS服务器之间的查询。(所答非所问)

四、域名服务器的分类

根据作用

1.根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。 ​

2.顶级域名服务器:负责管理该顶级域名注册的二级域名。 ​

3.权限域名服务器:负责一个“区”的域名服务器。 ​

4.本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

根据应用场景

主服务器(Primary Name server) 为客户端提供域名解析的主要区域,主DNS服务器宕机,会启用从DNS服务器提供服务。

辅助服务器(Second Name Server) 主服务器DNS长期无应答,从服务器也会停止提供服务,主从区域治安的同步采用周期性检查+通知的机制,从服务器周期性地检查主服务器上地记录情况,一旦发现修改就会同步,另外主服务器上如果又数据被修改了,会立即通知从服务器更新记录。

高速缓存服务器(Cache-only server) 缓存服务器是一种不负责域名数据维护,也不负责域名解析地DNS服务类型。它将用户经常使用到的域名与IP地址解析记录保存在主机本地中,来提升下次解析的效率。

五、DNS服务器部署

使用的bind软件包进行安装实现DNS解析服务!!

安装bind包

[root@ding ~]# yum install -y bind

核心文件解析

 [root@ding ~]# rpm -ql bind
 /etc/named.conf #服务主配置文件
 /etc/named.rfc1912.zones #服务主配置的额外配置文件
 /var/named #区域文件数据目录
 /var/named/named.ca #可信的根域名服务器,不要擅自更改
 /var/named/named.empty #区域文件的模版文件
 /var/named/named.localhost #区域文件的本地接口模版文件
 /var/named/named.loopback #区域文件回环接口的模版文件
 /var/named/slaves #从服务器的区域数据存储目录
 /var/log/named.log #服务日志文件

命令解析

 /usr/sbin/named     #主服务运行命令
 /usr/sbin/named-checkconf #服务主配置语法检查命令
 /usr/sbin/named-checkzone #区域文件配置语法检查命令
 /usr/sbin/named-journalprint #打印named程序运行日志

配置文件详解

服务主配置文件
 [root@ding ~]# cat /etc/named.conf
 //     ##单行注释
 // named.conf
 //
 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
 // server as a caching only nameserver (as a localhost DNS resolver only).
 //
 // See /usr/share/doc/bind*/sample/ for example named configuration files.
 //
 // See the BIND Administrator's Reference Manual (ARM) for details about the
 // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
 ​
 options {
     listen-on port 53 { 127.0.0.1; };   ##定义IPv4监听端口及IP地址,改为指定接口的IP地址即可!
     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"; #定义服务占用内存的状态文件
     recursing-file  "/var/named/data/named.recursing"; #定义服务安全配置文件
     secroots-file   "/var/named/data/named.secroots"; #定义服务根文件
     allow-query     { localhost; }; #定义客户端访问ACL,所有主机访问:localhost改为any
 ​
     /*  ###多行注释 /* */
      - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
      - If you are building a RECURSIVE (caching) DNS server, you need to enable 
        recursion. 
      - If your recursive DNS server has a public IP address, you MUST enable access 
        control to limit queries to your legitimate users. Failing to do so will
        cause your server to become part of large scale DNS amplification 
        attacks. Implementing BCP38 within your network would greatly
        reduce such attack surface 
     */
     recursion yes;
 ​
     dnssec-enable yes;
     dnssec-validation yes;
 ​
     /* Path to ISC DLV key */
     bindkeys-file "/etc/named.root.key";
 ​
     managed-keys-directory "/var/named/dynamic";
 ​
     pid-file "/run/named/named.pid";  #定义服务的PID文件
     session-keyfile "/run/named/session.key";
 };
 ​
 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";
定义的区域配置文件
 [root@ding ~]# cat /etc/named.rfc1912.zones
 // named.rfc1912.zones:
 //
 // Provided by Red Hat caching-nameserver package 
 //
 // ISC BIND named zone configuration for zones recommended by
 // RFC 1912 section 4.1 : localhost TLDs and address zones
 // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
 // (c)2007 R W Franks
 // 
 // See /usr/share/doc/bind*/sample/ for example named configuration files.
 //
 ​
 zone "localhost.localdomain" IN {    ##正向解析区域文件的定义
     type master;  ##指定服务器的类型,master或者slave
     file "named.localhost"; ##定义区域文件的文件路径及名称
     allow-update { none; }; ##定义允许对该区域文件的更新ACL列表
 };
 ​
 zone "localhost" IN {
     type master;
     file "named.localhost";
     allow-update { none; };
 };
 ​
 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
     type master;
     file "named.loopback";
     allow-update { none; };
 };
 ​
 zone "1.0.0.127.in-addr.arpa" IN {  ##反向解析区域文件的定义 ,固定格式,必须:网络ID去0后反写.in-adr.arpa
     type master;
     file "named.loopback";
     allow-update { none; };
 };
 ​
 zone "0.in-addr.arpa" IN {
     type master;
     file "named.empty";
     allow-update { none; };
 };

解析记录说明

 解析记录的类型
 正向解析文件中:
     A:IPv4正向解析记录
     AAAA:IPV6正向解析记录
     NS:DNS服务器解析记录
     MX:邮件解析记录
     CNAME:别名解析记录
 反向解析文件中:
     PTR:反向解析记录

六、配置主服务器单点架构(手动配置)

1.服务主文件配置

[root@ding named]# systemctl stop named
[root@ding named]# setenforce 0
[root@ding named]# getenforce
Permissive

[root@ding named]# vim /etc/named.conf 

 

2.定义区域文件配置

[root@ding named]# vim /etc/named.rfc1912.zones

(1)注释掉这些没有用的案例

(2)在行尾添加指向正向解析文件和反向解析文件的存放路径

 

(3)从模板文件named.empty生成两个新的配置文件作为正向解析文件和反向解析文件

[root@ding named]# cd /var/named
[root@ding named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves

###通过其他文件生成一个新的配置文件时一定要带权限复制
[root@ding named]# cp -p named.empty nicebody.com.zones    #正向解析文件
[root@ding named]# cp -p named.empty 192.168.72.zones      #反向解析文件
[root@ding named]# ls -l
总用量 24
-rw-r-----. 1 root  named  152 12月 15 2009 192.168.72.zones
drwxrwx---. 2 named named    6 6月  11 2024 data
drwxrwx---. 2 named named    6 6月  11 2024 dynamic
-rw-r-----. 1 root  named 2253 4月   5 2018 named.ca
-rw-r-----. 1 root  named  152 12月 15 2009 named.empty
-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
-rw-r-----. 1 root  named  152 12月 15 2009 nicebody.com.zones
drwxrwx---. 2 named named    6 6月  11 2024 slaves

3.正向解析文件配置

[root@ding named]# vim nicebody.com.zones
[root@ding named]# cat nicebody.com.zones 
$TTL 3H
@       IN SOA  nicebody.com. admin.nicebody.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1.nicebody.com.
dns1    A       192.168.72.100
dns01   CNAME   dns1.nicebody.com.
mail    A       192.168.72.101
mail    MX 10   mail.nicebody.com.

  ​

4.反向解析文件配置

[root@ding named]# vim 192.168.72.zones
[root@ding named]# cat 192.168.72.zones 
$TTL 3H
@       IN SOA  nicebody.com. admin.nicebody.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@        NS      dns1.nicebody.com.
100      PTR     dns1.nicebody.com.
101      PTR     mail.nicebody.com.
100      PTR     dns01.nicebody.com.


[root@ding named]# netstat -antptu | grep :53    #查看监听
tcp        0      0 192.168.72.100:53       0.0.0.0:*               LISTEN      56044/named         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2372/dnsmasq        
tcp        0     36 192.168.72.100:22       192.168.72.1:53344      ESTABLISHED 2227/sshd: root@pts 
udp        0      0 192.168.72.100:53       0.0.0.0:*                           56044/named         
udp        0      0 192.168.122.1:53        0.0.0.0:*                           2372/dnsmasq        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           984/avahi-daemon: r 

 ​

5.启动服务

 [root@ding named]# systemctl start named

6.解析测试

###配置DNS服务器地址
[root@ding named]# vim /etc/resolv.conf
[root@ding named]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.72.100
###安装nslookup
[root@ding named]# yum install -y bind-utils
[root@ding named]# rpm -ql bind-utils
/etc/trusted-key.key
/usr/bin/delv
/usr/bin/dig
/usr/bin/host
/usr/bin/mdig
/usr/bin/nslookup
/usr/bin/nsupdate
/usr/share/man/man1/delv.1.gz
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/mdig.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz

###解析测试
[root@ding named]# nslookup 
> dns1.nicebody.com
Server:         192.168.72.100
Address:        192.168.72.100#53

Name:   dns1.nicebody.com
Address: 192.168.72.100

#####或者
[root@ding named]# dig dns1.nicebody.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> dns1.nicebody.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58107
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns1.nicebody.com.             IN      A

;; ANSWER SECTION:
dns1.nicebody.com.      10800   IN      A       192.168.72.100

;; AUTHORITY SECTION:
nicebody.com.           10800   IN      NS      dns1.nicebody.com.

;; Query time: 1 msec
;; SERVER: 192.168.72.100#53(192.168.72.100)
;; WHEN: 三 6月 18 20:46:00 CST 2025
;; MSG SIZE  rcvd: 76

七、 配置DNS主从架构

1.主服务配置

(1)服务主文件配置
[root@ding named]# vim /etc/named.conf 

(2)定义区域文件配置
[root@ding named]# vim /etc/named.rfc1912.zones
[root@ding named]# cat /etc/named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
....

zone "nicebody.com" IN {
        type master;
        file "nicebody.com.zones";
        allow-update { none; };
        allow-transfer { 192.168.72.101; };
};
zone "72.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.72.zones";
        allow-update { none; };
        allow-transfer { 192.168.72.101; };
};

2.从服务器配置

(1)从服务器主文件配置
[root@ding named]# vim /etc/named.conf

(2)定义区域文件配置
[root@ding named]# vim /etc/named.rfc1912.zones 
[root@ding named]# cat /etc/named.rfc1912.zones 
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
....

zone "nicebody.com." IN {
        type slave;
        file "slaves/nicebody.com.zones";
        masters { 192.168.72.100; };

};
zone "72.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.72.zones";
        masters { 192.168.72.100; };
};

3.启动服务

分别在master和slave中启动服务

[root@ding named]# systemctl start named

4.解析测试

###客户端配置DNS服务器地址
[root@ding named]# vim /etc/resolv.conf
[root@ding named]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.72.100
nameserver 192.168.72.101

###安装nslookup
[root@ding named]# yum install -y bind-utils
[root@ding named]# rpm -ql bind-utils
/etc/trusted-key.key
/usr/bin/delv
/usr/bin/dig
/usr/bin/host
/usr/bin/mdig
/usr/bin/nslookup
/usr/bin/nsupdate
/usr/share/man/man1/delv.1.gz
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/mdig.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz

###解析测试
[root@ding ~]# nslookup
> mail.nicebody.com
Server:         192.168.72.100
Address:        192.168.72.100#53

Name:   mail.nicebody.com
Address: 192.168.72.101

#####或者
##指定DNS服务器地址进行解析,可以不用配置在resolv.conf文件中
[root@ding ~]# vim /etc/resolv.conf
[root@ding ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.72.100

[root@ding ~]# dig mail.nicebody.com @192.168.72.101

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> mail.nicebody.com @192.168.72.101
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64697
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mail.nicebody.com.             IN      A

;; ANSWER SECTION:
mail.nicebody.com.      10800   IN      A       192.168.72.101

;; AUTHORITY SECTION:
nicebody.com.           10800   IN      NS      dns1.nicebody.com.

;; ADDITIONAL SECTION:
dns1.nicebody.com.      10800   IN      A       192.168.72.100

;; Query time: 0 msec
;; SERVER: 192.168.72.101#53(192.168.72.101)
;; WHEN: 四 6月 19 00:36:29 CST 2025
;; MSG SIZE  rcvd: 97

故障模拟

###关闭master服务器的DNS服务后,使用客户端进行解析,观察解析结果###
[root@ding named]# systemctl stop named

##可知如果没有配置从服务器,主服务器关闭DNS服务后,客户端将无法解析
[root@ding ~]# nslookup
> mail.nicebody.com
;; connection timed out; no servers could be reached


##此时要配置从服务器并开启DNS服务,即可达到关闭主服务器,客户端可以正常解析说明从服务器生效
[root@ding slaves]# systemctl start named
[root@ding ~]# vim /etc/resolv.conf
[root@ding ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.72.100
nameserver 192.168.72.101

[root@ding ~]# nslookup
> dns1.nicebody.com
Server:         192.168.72.101
Address:        192.168.72.101#53

Name:   dns1.nicebody.com
Address: 192.168.72.100   
> mail.nicebody.com
Server:         192.168.72.101
Address:        192.168.72.101#53

Name:   mail.nicebody.com
Address: 192.168.72.101

 八、配置主服务器单点架构(shell脚本实现)

部署流程:

1.主DNS服务器配置脚本 (setup_master_dns.sh)
[root@master ~]# cat setup_master_dns.sh 
#!/bin/bash
DOMAIN="nicebody.com"            
NETWORK="192.168.72"            
MASTER_IP="192.168.72.152"    
   
# 安装BIND
yum install -y bind

# 备份原始配置
cp /etc/named.conf /etc/named.conf.bak

# 生成新的named.conf配置
cat > /etc/named.conf <<EOF
options {
    listen-on port 53 { 192.168.72.152; };
    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     { any; };

    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;

    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

zone "$DOMAIN" IN {
    type master;
    file "$DOMAIN.zone";
    allow-update { none; };
    notify yes;
};

zone "72.168.192.in-addr.arpa" IN {
    type master;
    file "$DOMAIN.rev";
    allow-update { none; };
    notify yes;
};

include "/etc/named.rfc1912.zones";
EOF

# 创建正向区域文件
cat > /var/named/$DOMAIN.zone <<EOF
\$TTL 3H
@   IN  SOA $DOMAIN. admin.$DOMAIN. (
    0           ; serial
    1D          ; refresh
    1H          ; retry
    1W          ; expire
    3H )        ; minimum

@        NS      dns1.$DOMAIN.
dns1     A       $MASTER_IP
dns01    CNAME   dns1.$DOMAIN.
mail     A       192.168.72.151
mail     MX 10   mail.nicebody.com.
EOF

# 创建反向区域文件
cat > /var/named/$DOMAIN.rev <<EOF
\$TTL 3H
@   IN  SOA $DOMAIN. admin.$DOMAIN. (
    0           ; serial
    1D          ; refresh
    1H          ; retry
    1W          ; expire
    3H )        ; minimum

@         NS     dns1.$DOMAIN.
152       PTR    dns1.$DOMAIN.
151       PTR    mail.nicebody.com.
EOF

# 设置文件权限
chown root:named /var/named/$DOMAIN.*
chmod 640 /var/named/$DOMAIN.*
setenforce 0

# 启动服务
systemctl enable named
systemctl restart named

echo "主DNS服务器配置完成!"

 运行脚本后主DNS服务器配置完成​​​​​​​

[root@master ~]# ./setup_master_dns.sh 
已加载插件:fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: ftp-stud.hs-esslingen.de
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 32:bind-9.11.4-26.P2.el7_9.16.x86_64 已安装并且是最新版本
无须任何处理
setenforce: SELinux is disabled
主DNS服务器配置完成!
2.从DNS服务器配置脚本 (setup_slave_dns.sh)
[root@slave ~]# cat setup_slave_dns.sh 
#!/bin/bash
DOMAIN="nicebody.com"            
NETWORK="192.168.72"            
MASTER_IP="192.168.72.152"        
SLAVE_IP="192.168.72.151"        

# 安装BIND
yum install -y bind

# 备份原始配置
cp /etc/named.conf /etc/named.conf.bak

# 生成新的named.conf配置
cat > /etc/named.conf <<EOF
options {
    listen-on port 53 { 192.168.72.151; };
    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     { any; };
    recursion yes;

    dnssec-enable yes;
    dnssec-validation yes;

    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

zone "$DOMAIN" IN {
    type slave;
    file "slaves/$DOMAIN.zone";
    masters { $MASTER_IP; };
};

zone "72.168.192.in-addr.arpa" IN {
    type slave;
    file "slaves/$DOMAIN.rev";
    masters { $MASTER_IP; };
};

include "/etc/named.rfc1912.zones";
EOF

# 设置目录权限
chown named:named /var/named/slaves
chmod 770 /var/named/slaves
setenforce 0

# 启动服务
systemctl enable named
systemctl restart named

echo "从DNS服务器配置完成!等待区域传输..."

  运行脚本后从DNS服务器配置完成

[root@slave ~]# ./setup_slave_dns.sh 
已加载插件:fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 32:bind-9.11.4-26.P2.el7_9.16.x86_64 已安装并且是最新版本
无须任何处理
setenforce: SELinux is disabled
从DNS服务器配置完成!等待区域传输...
3. 客户端DNS测试脚本 (dns_test_client.sh)
[root@client ~]# cat dns_test_client.sh 
#!/bin/bash

# 配置DNS解析器
CONFIG_DNS() {
  echo "配置/etc/resolv.conf..."
  cp /etc/resolv.conf /etc/resolv.conf.bak
  cat > /etc/resolv.conf <<EOF
nameserver 192.168.72.152  # 主DNS服务器
nameserver 192.168.72.151  # 备DNS服务器
EOF
  echo "DNS配置完成:"
  cat /etc/resolv.conf
  echo "---------------------------------"
}

# DNS测试函数
TEST_DNS() {
  local DOMAIN=$1
  local EXPECTED_IP=$2
  
  echo "测试域名解析: $DOMAIN"
  
  # 使用dig命令测试
  local RESULT=$(dig +short $DOMAIN)
  
  if [ -n "$RESULT" ]; then
    echo "解析成功: $DOMAIN → $RESULT"
    
    # 检查是否解析到预期IP
    if [ -n "$EXPECTED_IP" ]; then
      if [[ "$RESULT" == "$EXPECTED_IP" ]]; then
        echo "[正确] 解析到预期IP: $EXPECTED_IP"
      else
        echo "[警告] 解析到非常规IP: $RESULT (预期: $EXPECTED_IP)"
      fi
    fi
  else
    echo "[失败] 无法解析: $DOMAIN"
    return 1
  fi
  
  echo "---------------------------------"
  return 0
}

# 反向解析测试
TEST_REVERSE() {
  local IP=$1
  local EXPECTED_DOMAIN=$2
  
  echo "测试反向解析: $IP"
  
  local RESULT=$(dig +short -x $IP)
  
  if [ -n "$RESULT" ]; then
    echo "反向解析成功: $IP → $RESULT"
    
    # 检查是否解析到预期域名
    if [ -n "$EXPECTED_DOMAIN" ]; then
      if [[ "$RESULT" == "$EXPECTED_DOMAIN." ]]; then
        echo "[正确] 解析到预期域名: $EXPECTED_DOMAIN"
      fi
    fi
  else
    echo "[失败] 无法反向解析: $IP"
    return 1
  fi
  
  echo "---------------------------------"
  return 0
}

# 主函数
main() {
  # 配置DNS解析器
  CONFIG_DNS
  
  # 测试域名解析
  TEST_DNS "mail.nicebody.com" "192.168.72.151"
  TEST_DNS "dns1.nicebody.com" "192.168.72.152"
  
  # 测试反向解析
  TEST_REVERSE "192.168.72.152" "dns1.nicebody.com"
  TEST_REVERSE "192.168.72.151" "mail.nicebody.com"
  
  echo "所有DNS测试完成!"
}

main
运行脚本​​​​​​​验证:

​​1.自动配置DNS解析器

备份原始的 /etc/resolv.conf​​​​​​​

设置主DNS为192.168.72.152

设置备DNS为192.168.72.151

​​​​2.域名解析测试

测试 mail.nicebody.com 解析(预期IP: 192.168.72.100)
测试 dns1.nicebody.com 解析(预期IP: 192.168.72.152)

3.反向解析测试

测试 192.168.72.152 的反向解析(预期域名: dns1.nicebody.com)
测试 192.168.72.151 的反向解析(预期域名: mail.nicebody.com)

    [root@client ~]# ./dns_test_client.sh 
    配置/etc/resolv.conf...
    DNS配置完成:
    nameserver 192.168.72.152  # 主DNS服务器
    nameserver 192.168.72.151  # 备DNS服务器
    ---------------------------------
    测试域名解析: mail.nicebody.com
    解析成功: mail.nicebody.com → 192.168.72.151
    [正确] 解析到预期IP: 192.168.72.151
    ---------------------------------
    测试域名解析: dns1.nicebody.com
    解析成功: dns1.nicebody.com → 192.168.72.152
    [正确] 解析到预期IP: 192.168.72.152
    ---------------------------------
    测试反向解析: 192.168.72.152
    反向解析成功: 192.168.72.152 → dns1.nicebody.com.
    [正确] 解析到预期域名: dns1.nicebody.com
    ---------------------------------
    测试反向解析: 192.168.72.151
    反向解析成功: 192.168.72.151 → mail.nicebody.com.
    [正确] 解析到预期域名: mail.nicebody.com
    ---------------------------------
    所有DNS测试完成!
    总结:

           Linux DNS服务通过分层配置(如正向/反向解析区域文件)和灵活的服务类型(主从服务器、缓存服务器),实现了域名解析的核心功能。其优势包括:

    1. 开源与稳定性​:基于BIND等工具,支持复杂网络环境下的高可用部署;
    2. 安全增强​:通过DNSSEC防止劫持,结合防火墙规则保障服务安全;
    3. 性能优化​:缓存机制加速解析,多节点负载均衡提升吞吐量。实际应用中需注意区域文件语法规范(如SOA、NS记录)、日志监控及定期维护,避免解析冲突或服务中断。掌握Linux DNS服务,是构建可靠网络架构的基石。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值