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

[复制链接]
发表于 2025-12-1 13:38:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×




案例:BIND 安装与设置详解

一、安装 BIND 软件包


  • 安装 BIND 软件包

    • 通过网络源或挂载的光盘安装 BIND:
      1. yum install bind -y
      复制代码
    • 可能通过 RPM 包安装,条件是挂载体系盘 ISO 镜像:
      1. rpm -ivh bind-x.x.x-x.el7.x86_64.rpm
      复制代码

  • 查看 BIND 设置文件路径
    1. 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

  • 修改主设置文件
    编辑 /etc/named.conf 文件,设置监听端口、地区数据存放位置及允许查询的网段:
    1. vim /etc/named.conf
    复制代码
    紧张修改以下几项:

    • 监听端口和 IP 地点:指定 BIND 服务监听的端口和 IP 地点。
    • 地区数据文件的存储路径:指定地区数据文件的存储目次。
    • 允许查询的网段:定义允许访问 DNS 服务的客户端网段。
    设置示例:
    1. options {
    2.     listen-on port 53 { 20.0.0.100; };  
    3.     # ☆☆☆修改:监听53端口,指定本地IP,也可用any表示所有IP。
    4.    
    5.     # listen-on-v6 port 53 { ::1; };
    6.     # ipv6行如不使用可以注释掉或者删除。
    7.    
    8.     directory "/var/named";  
    9.     # 区域数据文件的默认存放位置。
    10.    
    11.     dump-file "/var/named/data/cache_dump.db";  
    12.     # 缓存数据库文件位置。
    13.    
    14.     statistics-file "/var/named/data/named_stats.txt";  
    15.     # 状态统计文件位置。
    16.    
    17.     memstatistics-file "/var/named/data/named_mem_stats.txt";  
    18.     # 内存统计文件位置。
    19.    
    20.     # allow-query { 20.0.0.0/24; 172.16.100.0/24; };  
    21.     allow-query { any; };
    22.     # ☆☆☆修改:允许访问本DNS解析服务的网段,也可用any表示所有。
    23. };
    复制代码

  • 设置根地区
    在 named.conf 中定义根地区,根地区用于处理域名剖析的根请求:
    1. zone "." IN {        # 正向解析“."根区域
    2.     type hint;       # 类型为根区域(索引)
    3.     file "named.ca"; # 区域数据文件为named.ca
    4. };
    5. # named.ca文件记录了13台根域服务器的域名和IP地址等信息
    6. include "/etc/named.rfc1912.zones";  
    7. # 包含区域配置文件中的所有配置,存储了标准的区域配置。
    复制代码
  • 设置正向地区

    • 编辑地区设置文件 /etc/named.rfc1912.zones,文件里有模版,可复制粘贴后修改,添加正向剖析地区:
    1. vim /etc/named.rfc1912.zones
    复制代码
    提示:vim编辑器的利用
       

    • 定位到起始行: j 或 k 上下移动, G 直接跳行
    • 进入可视模式: V 进可视行模式,高亮显示当前行
    • 选择多行: j 向下选行,按一次选一行
    • 复制选中的行:选中,按 y 进行复制到剪贴板
    • 移动到粘贴位置:移动到要粘贴的位置
    • 粘贴复制的行: p 粘贴。当前行上方利用 P大P。
    设置示例:
    1. zone "my.com" IN {
    2.     # ☆修改:正向解析"benet.com"区域
    3.    
    4.     type master;      
    5.     # 声明该区域是主区域
    6.    
    7.     file "my.com.zone";
    8.     # ☆修改:区域数据文件的路径,相对于/var/named路径目录,可以加个.
    9.    
    10.     allow-update { none; };
    11.     # 不允许自动更新区域数据
    12. };
    复制代码

  • 设置正向地区数据文件

    • 在 /var/named/ 目次下创建或修改地区数据文件,这个文件包括域名与 IP 地点的映射关系,可以直接复制改名原模板:
    1. cd /var/named/
    2. cp -p named.localhost my.com.zone
    3. # 保留源文件的权限和属主的属性复制
    4. vim my.com.zone
    复制代码
    数据文件通常包括 SOA 记录、NS 记录、A 记录等。
    宏定义$,解释;
    设置示例:
    1. $TTL 1D
    2. # $-宏定义
    3. # TTL(Time to Live)-缓存保存时间,表示在 DNS 服务器或客户端的缓存中,有效解析记录的生命周期
    4. # 1D 表示 1 天,该区域数据在 1 天(1D)内有效
    5. @ IN SOA my.com. rname.invalid (
    6.                 # @-表示该文件定义的根域名,当前的DNS区域名  
    7.                 # IN-表示“Internet”类的资源记录类型。
    8.                 # SOA-第一条解析,起始记录的解析
    9.                 ## admin-主机名、服务名
    10.                
    11.     0       ; serial  
    12.     # 序列号,表示该区域文件的版本,每次修改后应增加
    13.    
    14.     1D      ; refresh  
    15.     # 刷新时间,告知从服务器多久查询一次主服务器
    16.    
    17.     1H      ; retry   
    18.     # 重试时间,从服务器未联系到主服务器后的重试间隔
    19.    
    20.     1W      ; expire   
    21.     # 过期时间,从服务器未能更新后,缓存数据的有效期
    22.    
    23.     3H )    ; minimum  
    24.     # 最小TTL值,未命中的缓存记录的保存时间
    25.    
    26. NS my.com.  
    27. # 定义此区域的名称服务器
    28. A 20.0.0.11
    29. # A-将域名映射到IPV4
    30. # 为域名 my.com 设置IP地址
    31. ## MX 10 mail.my.com.  
    32. ## 定义邮件交换记录
    33. www IN A 20.0.0.20
    34. # 定义子域名 www 的 A 记录
    35. ## mail IN A 20.0.0.20  
    36. ## 定义子域名 mail 的 A 记录
    37. ftp IN CNAME www  
    38. # CNAME-别名,将 ftp 子域名设置为 www 子域名的别名
    39. * IN A 20.0.0.20
    40. # *-通配符,匹配所有未明确定义的子域名,泛域名
    复制代码
    内容表明:
       

    • @: 代表当前地区的根域名。

      • 在 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 记录在缓存中保存的时间长度,高出时间后必要重新查询。

  • 检查启动文件格式

    • 检查:
    1. named-checkzone my.com /var/named/my.com.zone
    2. # 输出:
    3. zone my.com/IN: loaded serial 0
    4. O
    复制代码

  • 启动 BIND 服务并关闭防火墙

    • 启动 BIND 服务:
    1. systemctl start named
    复制代码
      

    • 关闭防火墙以确保 DNS 服务的正常运行:
    1. systemctl stop firewalld
    2. setenforce 0  # 关闭 SELinux
    复制代码
    留意:若服务启动失败,可以查看日记文件排查错误,如果服务卡住,实验第二行命令解决:
    1. tail -f /var/log/messages
    2. rndc-confgen -r /dev/urandom -a
    复制代码
      

    • 检查端口,确认启动乐成
    1. netstat -natpul | grep 53
    复制代码
      

    • 对域名语法进行检查(named.conf):
    1. named-checkconf -z /etc/named.conf
    复制代码

  • 客户端设置和测试DNS剖析(Windows)
    启动同网段下的客户端,以Windows为例

    • 在Windows下更改网卡设置:
    1. # 以我的网络环境为例,做如下配置
    2. IP      20.0.0.120  # 同网段即可
    3. NETMASK 255.255.255.0
    4. GATEWAY 20.0.0.11   # 指向DNS服务器
    5. DNS     20.0.0.11
    复制代码
      

    • cmd利用nslookup命令测试:
    1. nslookup www.my.com  # 解析www域名对应的IP地址
    2. # 输出:
    3. 服务器:UnKnown
    4. Address:20.0.0.11
    5. 名称:www.my.com
    6. Address:20.0.0.20
    7. nslookup ftp.my.com  # 解析ftp的别名对应的IP地址
    8. # 输出:
    9. 服务器:UnKnown
    10. Address:20.0.0.11
    11. 名称:www.my.com
    12. Address:20.0.0.20
    13. nslookup aa.my.com   # 解析泛域名对应的IP地址
    14. # 输出:
    15. 服务器:UnKnown
    16. Address:20.0.0.11
    17. 名称:www.my.com
    18. Address:20.0.0.20
    复制代码
    都可以看到返回服务器地点,测试乐成

  • 客户端设置和测试DNS剖析(Linux)

    • 编辑客户端的 /etc/resolv.conf 文件,添加 DNS 服务器地点:
    1. vim /etc/resolv.conf
    2. nameserver 20.0.0.11
    复制代码
      

    • 可能在网络接口设置文件中添加 DNS 服务器地点,修改后需重启网卡:
    1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
    2. DNS1=20.0.0.11
    3. systemctl restart network
    复制代码
      

    • 利用 host 或 nslookup 命令测试 DNS 剖析是否乐成:
    1. host www.my.com
    2. nslookup www.my.com
    复制代码

三、设置反向剖析

本节环境
主服务器:20.0.0.11
客户端:Windows 10 或 Linux

  • 设置反向地区

    • 编辑地区设置文件 /etc/named.rfc1912.zones,添加反向剖析地区:
    1. vim /etc/named.rfc1912.zones
    复制代码
    在此文件中定义 IP 地点段的地区信息。同样复制模版修改。
    设置示例:
    1. zone "0.0.20.in-addr.arpa" IN {
    2.     # 此处 20.0.0.0 反向为 0.0.20
    3.     # 再如:192.168.10.0 反向则是 10.168.192
    4.     type master;
    5.     # 定义主区域
    6.    
    7.     file "my.com.zone.local";
    8.     # 反向解析的数据文件
    9.    
    10.     allow-update { none; };
    11.     # 禁止自动更新
    12. };
    复制代码

  • 设置反向地区数据文件

    • 创建或修改反向地区数据文件:
    1. cd /var/named/
    2. cp -p my.com.zone my.com.zone.local
    3. vim my.com.zone.local
    复制代码
    数据文件中通常包括 IP 地点与域名的映射。
    设置示例:
    1. $TTL 1D
    2. @ IN SOA my.com. rname.invalid. (
    3. # 点.必须加上,否则报错,下同
    4.     0       ; serial  # 序列号
    5.     # 更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步
    6.    
    7.     1D      ; refresh  # 刷新时间
    8.     1H      ; retry    # 重试时间
    9.     1W      ; expire   # 过期时间
    10.     3H )    ; minimum  # 最小TTL
    11. NS my.com.
    12. 100 IN PTR www.my.com.  
    13. # 将IP地址的最后一段(100)解析为www.my.com
    14. 200 IN PTR mail.my.com.  
    15. # 将IP地址的最后一段(200)解析为mail.my.com
    16. # 20是192.168.10.20的意思
    17. # RTP反向指针 功能:反向解析
    复制代码

  • 启动 BIND 服务

    • 启动或重启 BIND 服务:
    1. systemctl restart named
    复制代码

  • 测试反向剖析(Windows)
    以Windows为例,确保网卡设置信息无误:
    1. # 以我的网络环境为例,做如下配置
    2. IP      20.0.0.120  # 同网段即可
    3. NETMASK 255.255.255.0
    4. GATEWAY 20.0.0.11   # 指向DNS服务器
    5. DNS     20.0.0.11
    复制代码

    • cmd利用nslookup命令测试:
    1. nslookup 20.0.0.100  # 解析末段为 100 IP地址的域名
    2. # 输出:
    3. 服务器:UnKnown
    4. Address:20.0.0.11
    5. 名称:www.my.com
    6. Address:20.0.0.100
    7. nslookup 20.0.0.200  # 解析末段为 200 IP地址的域名
    8. # 输出:
    9. 服务器:UnKnown
    10. Address:20.0.0.11
    11. 名称:mail.my.com
    12. Address:20.0.0.200
    复制代码
    可以看到返回服务器地点和域名信息,测试乐成

  • 测试反向剖析(Linux)

    • 利用 host 命令测试反向剖析,测试IP地点是否准确剖析为域名:
    1. host 20.0.0.100
    复制代码
    若没标题将会反向剖析出域名www.my.com。

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

本节环境
主服务器:20.0.0.11
从服务器:20.0.0.12
客户端:Windows 10 或 Linux

  • 主服务器设置

    • 修改 /etc/named.conf,允许全部网段查询:
    1. options {
    2.     listen-on port 53 { any; };
    3.     allow-query { any; };
    4. };
    复制代码
      

    • 编辑地区设置文件 /etc/named.rfc1912.zones,添加从服务器地点:
    1. zone "my.com" IN {
    2.     type master; # 类型为主区域
    3.     file "my.com.zone";
    4.     allow-transfer { 20.0.0.12; };
    5. };               # 设置从服务器地址  
    6. # 反向解析没有配置,这段关系不大
    7. zone "0.0.20.in-addr.arpa" IN {
    8.     type master;
    9.     file "my.com.zone.local";
    10.     allow-transfer { 20.0.0.12; };
    11. };
    复制代码
      

    • 设置正向地区数据文件 my.com.zone ,带属性拷贝编辑:
    1. cd /var/named/
    2. cp -p name.localhost my.com.zone
    3. vim /var/named/my.com.zone
    复制代码
    设置示例(只有正向剖析,无反向剖析)
    1. $TTL 1D                                            #有效解析记录的保存周期
    2. @   in SOA my.com. rname.invalid (   
    3. #“@"符号表示当前的DNS区域名
    4.            
    5.            0   ; serial  
    6.            #更新序列号,可以是10位以内的整数
    7.           1D   ; refresh         
    8.            #刷新时间,重新下载地址数据的间隔
    9.           1H   ; retry            
    10.            #重试延时,下载失败后的重试间隔
    11.           1W   ; expire            
    12.            #失效时间,超过该时间仍无法下载则放弃#
    13.                                         3H)  ; minimum           
    14.                                    #无效解析记录的保存周期
    15.                                   
    16.         NS      my.com.                     
    17.         #记录当前区域的DNS服务器的名称
    18.         
    19.         A     20.0.0.11                  
    20.         #记录主机IP地址
    21. IN   MX 10    mail.my.com.            
    22. #MX为邮件交换记录,数字越大优先级越低
    23. www  IN A     20.0.0.11
    24. #记录正向解析www.benet.com对应的IP
    25. mail IN A     20.0.0.22              
    26. #MX为邮件交换记录,数字越大优先级低
    27. ftp  IN CNAME  www                  
    28. #CNAME使用别名,ftp 是www的别名
    29. *    IN A   20.0.0.30
    30. #泛域名解析,“*"代表任意主机名,给一个不存在的地址
    复制代码

  • 从服务器设置

    • 安装 BIND 并修改设置文件:
    1. yum install -y bindvim /etc/named.conf
    2. #编辑后可以利用named-checkconf语法检查,反面参数可省named-checkconf -z /etc/named.conf
    复制代码
    设置示例:
    1. options {
    2.     listen-on port 53 { 20.0.0.12; };
    3.     # 监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有
    4.    
    5.     #listen-on-v6 port 53 { ::1; };     
    6.     # ipv6行如不使用可以注释掉或者删除
    7.    
    8.     directory "/var/named";
    9.     # 区域数据文件的默认存放位置
    10.    
    11.     dump-file "/var/named/data/cache_dump.db";            
    12.     # 域名缓存数据库文件的位置
    13.    
    14.                 statistics-file "/var/named/data/named_stats.txt";         
    15.                 # 状态统计文件的位置
    16.                 memstatistics-file "/var/named/data/named mem_stats.txt";     
    17.                 # 内存统计文件的位置
    18.    
    19.     allow-query { any; };
    20.     # 允许使用本DNS解析服务的网段,也可用any代表所有
    21. };  
    复制代码
      

    • 编辑从服务器的地区设置文件:
    1. vim /etc/named.rfc1912.zones
    复制代码
    设置示例:
    1. zone "my.com" IN {
    2.     type slave; # 类型为从区域
    3.     file "slaves/my.com.zone";
    4.     # 下载的区域数据文件保存到slaves/目录下
    5.    
    6.     #allow-update { none; };
    7.     # 此行必须删掉,用于配置主服务器的动态更新DNS记录
    8.    
    9.     masters { 20.0.0.11; };
    10. };  # 设置主服务器地址
    11. zone "0.0.20.in-addr.arpa" IN {
    12.     type slave;
    13.     file "slaves/my.com.zone.local";
    14.     masters { 20.0.0.11; };
    15. };
    复制代码

  • 启动服务并验证

    • 主从都重启 BIND 服务,并检查从服务器的地区数据文件是否乐成下载:
    1. systemctl restart named
    2. ls -1 /var/named/slaves/
    复制代码

  • 测试(Windows)

    • 在cmd下利用nsloopup命令分别测试:
    1. nslookup www.my.com  # 解析www域名对应的IP地址
    2. # 输出:
    3. 服务器:UnKnown
    4. Address:20.0.0.11
    5. 名称:www.my.com
    6. Address:20.0.0.11
    7. nslookup ftp.my.com  # 解析ftp的别名对应的IP地址
    8. # 输出:
    9. 服务器:UnKnown
    10. Address:20.0.0.11
    11. 名称:www.my.com
    12. Address:20.0.0.11
    13. nslookup mail.my.com # 解析mail域名对应的IP地址
    14. # 输出:
    15. 服务器:UnKnown
    16. Address:20.0.0.11
    17. 名称:mail.my.com
    18. Address:20.0.0.22
    19. nslookup aa.my.com   # 解析泛域名对应的IP地址
    20. # 输出:
    21. 服务器:UnKnown
    22. Address:20.0.0.11
    23. 名称:aa.my.com
    24. Address:20.0.0.30
    复制代码
    经测试,全部逐一对应,是乐成的

  • 测试(Linux)

    • 在Linux的域名剖析设置文件中添加从DNS服务器地点
    1. echo "nameserver 20.0.0.11" >> /etc/resolv.conf  
    复制代码
      

    • 测试
    1. host 20.0.0.12
    2. host www.my.com
    3. nslookup 20.0.0.11
    复制代码

  • 模仿故障

    • 制止主服务器的服务,模仿主服务器故障
    1. systemctl stop named
    复制代码
      

    • 再在Windows端测试
    留意:在Windows端需将从DNS服务器IP设置为首选DNS,否则无论是重启照旧制止主DNS服务器网络,Windows体系都只认首选,备选不会选择,临时未解决。Linux未测试。


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表