Linux下BIND安装与配置详解:正向解析、反向解析、主从域名服务器的搭建



案例:BIND 安装与配置详解

一、安装 BIND 软件包

  1. 安装 BIND 软件包

    • 通过网络源或挂载的光盘安装 BIND:

      yum install bind -y
      
    • 或者通过 RPM 包安装,前提是挂载系统盘 ISO 镜像:

      rpm -ivh bind-x.x.x-x.el7.x86_64.rpm
      
  2. 查看 BIND 配置文件路径

    rpm -qc bind
    

    该命令显示 BIND 安装后的配置文件路径,重要的几个讲解:

    • /etc/named.conf:主配置文件,控制 BIND 服务的全局设置。

      该文件用于配置 DNS 服务器的行为,如区域(zones)、转发器(forwarders)、ACL(访问控制列表)等。

    • /etc/named.rfc1912.zones - 区域配置文件,控制具体区域。专门用于定义 BIND 服务器中使用的区域(zone)。

    • /var/named/named.localhost - 区域数据文件,存储区域信息。

二、配置 BIND 主服务器(正向解析)

本节环境

主服务器:20.0.0.11

客户端:Windows 10 或 Linux

  1. 修改主配置文件
    编辑 /etc/named.conf 文件,配置监听端口、区域数据存放位置及允许查询的网段:

    vim /etc/named.conf
    

    主要修改以下几项:

    • 监听端口和 IP 地址:指定 BIND 服务监听的端口和 IP 地址。
    • 区域数据文件的存储路径:指定区域数据文件的存储目录。
    • 允许查询的网段:定义允许访问 DNS 服务的客户端网段。

    配置示例

    options {
        listen-on port 53 { 20.0.0.100; };  
        # ☆☆☆修改:监听53端口,指定本地IP,也可用any表示所有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";  
        # 内存统计文件位置。
        
        # allow-query { 20.0.0.0/24; 172.16.100.0/24; };  
        allow-query { any; }; 
        # ☆☆☆修改:允许访问本DNS解析服务的网段,也可用any表示所有。
    };
    
  2. 配置根区域
    named.conf 中定义根区域,根区域用于处理域名解析的根请求:

    zone "." IN {        # 正向解析“."根区域
        type hint;       # 类型为根区域(索引)
        file "named.ca"; # 区域数据文件为named.ca
    };
    # named.ca文件记录了13台根域服务器的域名和IP地址等信息
    
    include "/etc/named.rfc1912.zones";  
    # 包含区域配置文件中的所有配置,存储了标准的区域配置。 
    
  3. 配置正向区域

    • 编辑区域配置文件 /etc/named.rfc1912.zones,文件里有模版,可复制粘贴后修改,添加正向解析区域:
    vim /etc/named.rfc1912.zones
    

    提示:vim编辑器的使用

    • 定位到起始行: j 或 k 上下移动, G 直接跳行
    • 进入可视模式: V 进可视行模式,高亮显示当前行
    • 选择多行: j 向下选行,按一次选一行
    • 复制选中的行:选中,按 y 进行复制到剪贴板
    • 移动到粘贴位置:移动到要粘贴的位置
    • 粘贴复制的行: p 粘贴。当前行上方使用 P大P。

    配置示例

    zone "my.com" IN { 
        # ☆修改:正向解析"benet.com"区域
        
        type master;       
        # 声明该区域是主区域
        
        file "my.com.zone"; 
        # ☆修改:区域数据文件的路径,相对于/var/named路径目录,可以加个.
        
        allow-update { none; };
        # 不允许自动更新区域数据
    }; 
    
  4. 配置正向区域数据文件

    • /var/named/ 目录下创建或修改区域数据文件,这个文件包含域名与 IP 地址的映射关系,可以直接复制改名原模板:
    cd /var/named/
    cp -p named.localhost my.com.zone
    # 保留源文件的权限和属主的属性复制
    vim my.com.zone
    

    数据文件通常包括 SOA 记录、NS 记录、A 记录等。

    宏定义$,注释;

    配置示例

    $TTL 1D
    # $-宏定义
    # TTL(Time to Live)-缓存生存时间,表示在 DNS 服务器或客户端的缓存中,有效解析记录的生命周期
    # 1D 表示 1 天,该区域数据在 1 天(1D)内有效
    
    @ IN SOA my.com. rname.invalid (
    		# @-表示该文件定义的根域名,当前的DNS区域名  
    		# IN-表示“Internet”类的资源记录类型。
    		# SOA-第一条解析,起始记录的解析
    		## admin-主机名、服务名
    		
        0       ; serial  
        # 序列号,表示该区域文件的版本,每次修改后应增加
        
        1D      ; refresh  
        # 刷新时间,告知从服务器多久查询一次主服务器
        
        1H      ; retry    
        # 重试时间,从服务器未联系到主服务器后的重试间隔
        
        1W      ; expire   
        # 过期时间,从服务器未能更新后,缓存数据的有效期
        
        3H )    ; minimum  
        # 最小TTL值,未命中的缓存记录的生存时间
        
    NS my.com.  
    # 定义此区域的名称服务器
    
    A 20.0.0.11
    # A-将域名映射到IPV4
    # 为域名 my.com 设置IP地址
    
    ## MX 10 mail.my.com.  
    ## 定义邮件交换记录
    
    www IN A 20.0.0.20
    # 定义子域名 www 的 A 记录
    
    ## mail IN A 20.0.0.20  
    ## 定义子域名 mail 的 A 记录
    
    ftp IN CNAME www  
    # CNAME-别名,将 ftp 子域名设置为 www 子域名的别名
    
    * IN A 20.0.0.20
    # *-通配符,匹配所有未明确定义的子域名,泛域名
    

    内容解释:

    • @: 代表当前区域的根域名。
      • 在 DNS 区域文件中,@ 代表该文件定义的根域名,也就是当前区域的名称。在实际使用中,@ 将被解析为文件顶部定义的域名。
      • 例如,如果区域文件顶部定义的域名是 example.com., 那么 @ 就代表 example.com.
    • IN: 表示记录的类别,一般为互联网(Internet),通常情况下使用 IN
      • 表示“Internet”类(Internet Class)的资源记录类型。在大多数情况下,DNS 记录都使用 IN,因为它表示记录属于互联网的标准 DNS 记录类型。
      • 除了 IN 之外,还有其他类,如 CH(用于 CHAOS 类),但它们非常少见。
    • SOA (Start of Authority): 表示该 DNS 区域的起始记录,包含了该区域的主要信息,如序列号、刷新时间等。
      • SOA 是“Start of Authority”的缩写,表示权威起始记录。每个 DNS 区域文件必须包含一个且只有一个 SOA 记录。
      • SOA 记录包含了一些重要信息,如主服务器的名称、负责人的电子邮件地址、区域的序列号、刷新时间、重试时间、过期时间和最小 TTL(生存时间)值。
    • NS (Name Server): 指定负责该区域的名称服务器。
    • A (Address Record): 将域名映射到 IPv4 地址。
    • CNAME (Canonical Name Record): 将一个域名作为别名指向另一个域名。
    • MX (Mail Exchange Record): 指定处理电子邮件的邮件服务器。
    • TTL (Time to Live): 指定 DNS 记录在缓存中保留的时间长度,超过时间后需要重新查询。
  5. 检查启动文件格式

    • 检查:
    named-checkzone my.com /var/named/my.com.zone 
    
    # 输出:
    zone my.com/IN: loaded serial 0
    O
    
  6. 启动 BIND 服务并关闭防火墙

    • 启动 BIND 服务:
    systemctl start named
    
    • 关闭防火墙以确保 DNS 服务的正常运行:
    systemctl stop firewalld
    setenforce 0  # 关闭 SELinux
    

    注意:若服务启动失败,可以查看日志文件排查错误,如果服务卡住,执行第二行命令解决:

    tail -f /var/log/messages
    rndc-confgen -r /dev/urandom -a
    
    • 检查端口,确认启动成功
    netstat -natpul | grep 53
    
    • 对域名语法进行检查(named.conf):
    named-checkconf -z /etc/named.conf
    
  7. 客户端配置和测试DNS解析(Windows)

    启动同网段下的客户端,以Windows为例

    • 在Windows下更改网卡配置:
    # 以我的网络环境为例,做如下配置
    IP      20.0.0.120  # 同网段即可
    NETMASK 255.255.255.0
    GATEWAY 20.0.0.11   # 指向DNS服务器
    DNS     20.0.0.11
    
    • cmd使用nslookup命令测试:
    nslookup www.my.com  # 解析www域名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.20
    
    nslookup ftp.my.com  # 解析ftp的别名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.20
    
    nslookup aa.my.com   # 解析泛域名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.20
    

    都可以看到返回服务器地址,测试成功

  8. 客户端配置和测试DNS解析(Linux)

    • 编辑客户端的 /etc/resolv.conf 文件,添加 DNS 服务器地址:
    vim /etc/resolv.conf
    nameserver 20.0.0.11
    
    • 或者在网络接口配置文件中添加 DNS 服务器地址,修改后需重启网卡:
    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    DNS1=20.0.0.11
    systemctl restart network
    
    • 使用 hostnslookup 命令测试 DNS 解析是否成功:
    host www.my.com
    nslookup www.my.com
    

三、配置反向解析

本节环境

主服务器:20.0.0.11

客户端:Windows 10 或 Linux

  1. 配置反向区域

    • 编辑区域配置文件 /etc/named.rfc1912.zones,添加反向解析区域:
    vim /etc/named.rfc1912.zones
    

    在此文件中定义 IP 地址段的区域信息。同样复制模版修改。

    配置示例

    zone "0.0.20.in-addr.arpa" IN {
        # 此处 20.0.0.0 反向为 0.0.20
        # 再如:192.168.10.0 反向则是 10.168.192
    
        type master;
        # 定义主区域
        
        file "my.com.zone.local";
        # 反向解析的数据文件
        
        allow-update { none; }; 
        # 禁止自动更新
    }; 
    
  2. 配置反向区域数据文件

    • 创建或修改反向区域数据文件:
    cd /var/named/
    cp -p my.com.zone my.com.zone.local
    vim my.com.zone.local
    

    数据文件中通常包含 IP 地址与域名的映射。

    配置示例

    $TTL 1D
    @ IN SOA my.com. rname.invalid. (
    # 点.必须加上,否则报错,下同
        0       ; serial  # 序列号
        # 更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步 
        
        1D      ; refresh  # 刷新时间
        1H      ; retry    # 重试时间
        1W      ; expire   # 过期时间
        3H )    ; minimum  # 最小TTL
    NS my.com.
    100 IN PTR www.my.com.  
    # 将IP地址的最后一段(100)解析为www.my.com
    
    200 IN PTR mail.my.com.  
    # 将IP地址的最后一段(200)解析为mail.my.com
    
    # 20是192.168.10.20的意思
    # RTP反向指针 功能:反向解析
    
  3. 启动 BIND 服务

    • 启动或重启 BIND 服务:
    systemctl restart named
    
  4. 测试反向解析(Windows)

    以Windows为例,确保网卡配置信息无误:

    # 以我的网络环境为例,做如下配置
    IP      20.0.0.120  # 同网段即可
    NETMASK 255.255.255.0
    GATEWAY 20.0.0.11   # 指向DNS服务器
    DNS     20.0.0.11
    
    • cmd使用nslookup命令测试:
    nslookup 20.0.0.100  # 解析末段为 100 IP地址的域名
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.100
    
    nslookup 20.0.0.200  # 解析末段为 200 IP地址的域名
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:mail.my.com
    Address:20.0.0.200
    

    可以看到返回服务器地址和域名信息,测试成功

  5. 测试反向解析(Linux)

    • 使用 host 命令测试反向解析,测试IP地址是否正确解析为域名:
    host 20.0.0.100
    

    若没问题将会反向解析出域名www.my.com。

四、配置主从 DNS 服务器及自动同步

本节环境

主服务器:20.0.0.11

从服务器:20.0.0.12

客户端:Windows 10 或 Linux

  1. 主服务器配置

    • 修改 /etc/named.conf,允许所有网段查询:
    options {
        listen-on port 53 { any; };
        allow-query { any; };
    }; 
    
    • 编辑区域配置文件 /etc/named.rfc1912.zones,添加从服务器地址:
    zone "my.com" IN {
        type master; # 类型为主区域 
        file "my.com.zone";
        allow-transfer { 20.0.0.12; };
    };               # 设置从服务器地址  
    
    # 反向解析没有配置,这段关系不大
    zone "0.0.20.in-addr.arpa" IN {
        type master;
        file "my.com.zone.local";
        allow-transfer { 20.0.0.12; };
    };
    
    • 配置正向区域数据文件 my.com.zone ,带属性拷贝编辑:
    cd /var/named/
    cp -p name.localhost my.com.zone
    vim /var/named/my.com.zone
    

    配置示例(只有正向解析,无反向解析)

    $TTL 1D                                            #有效解析记录的生存周期
    @   in SOA my.com. rname.invalid (   
    #“@"符号表示当前的DNS区域名
               
               0   ; serial  
               #更新序列号,可以是10位以内的整数
              1D   ; refresh          
               #刷新时间,重新下载地址数据的间隔
              1H   ; retry             
               #重试延时,下载失败后的重试间隔
              1W   ; expire             
               #失效时间,超过该时间仍无法下载则放弃#
    					3H)  ; minimum           
    				   #无效解析记录的生存周期
    				   
            NS      my.com.                     
            #记录当前区域的DNS服务器的名称
            
            A     20.0.0.11                   
            #记录主机IP地址
    
    IN   MX 10    mail.my.com.             
    #MX为邮件交换记录,数字越大优先级越低
    
    www  IN A     20.0.0.11
    #记录正向解析www.benet.com对应的IP
    
    mail IN A     20.0.0.22              
    #MX为邮件交换记录,数字越大优先级低 
    
    ftp  IN CNAME  www                   
    #CNAME使用别名,ftp 是www的别名
    
    *    IN A   20.0.0.30
    #泛域名解析,“*"代表任意主机名,给一个不存在的地址
    
  2. 从服务器配置

    • 安装 BIND 并修改配置文件:
    yum install -y bind
    vim /etc/named.conf
    
    #编辑后可以使用named-checkconf语法检查,后面参数可省
    named-checkconf -z /etc/named.conf
    

    配置示例

    options {
        listen-on port 53 { 20.0.0.12; };
        # 监听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 { any; };
        # 允许使用本DNS解析服务的网段,也可用any代表所有
    };  
    
    • 编辑从服务器的区域配置文件:
    vim /etc/named.rfc1912.zones
    

    配置示例

    zone "my.com" IN {
        type slave; # 类型为从区域
        file "slaves/my.com.zone";
        # 下载的区域数据文件保存到slaves/目录下
        
        #allow-update { none; };
        # 此行必须删掉,用于配置主服务器的动态更新DNS记录
        
        masters { 20.0.0.11; };
    };  # 设置主服务器地址 
    
    zone "0.0.20.in-addr.arpa" IN {
        type slave;
        file "slaves/my.com.zone.local";
        masters { 20.0.0.11; };
    }; 
     
    
  3. 启动服务并验证

    • 主从都重启 BIND 服务,并检查从服务器的区域数据文件是否成功下载:
    systemctl restart named
    ls -1 /var/named/slaves/
    
  4. 测试(Windows)

    • 在cmd下使用nsloopup命令分别测试:
    nslookup www.my.com  # 解析www域名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.11
    
    nslookup ftp.my.com  # 解析ftp的别名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:www.my.com
    Address:20.0.0.11
    
    nslookup mail.my.com # 解析mail域名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:mail.my.com
    Address:20.0.0.22
    
    nslookup aa.my.com   # 解析泛域名对应的IP地址
    # 输出:
    服务器:UnKnown
    Address:20.0.0.11
    名称:aa.my.com
    Address:20.0.0.30
    

    经测试,全部一一对应,是成功的

  5. 测试(Linux)

    • 在Linux的域名解析配置文件中添加从DNS服务器地址
    echo "nameserver 20.0.0.11" >> /etc/resolv.conf  
    
    • 测试
    host 20.0.0.12
    host www.my.com
    nslookup 20.0.0.11
    
  6. 模拟故障

    • 停止主服务器的服务,模拟主服务器故障
    systemctl stop named
    
    • 再在Windows端测试

    注意:在Windows端需将从DNS服务器IP设置为首选DNS,否则无论是重启还是中断主DNS服务器网络,Windows系统都只认首选,备选不会选择,暂时未解决。Linux未测试。


  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值