CentOS安装配置Bind

一、DNS简介
DNS(Domain Name System),域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS服务器的作用就是就好比生活中的电话簿、114查号台一样,为各种网络程序找到对应目标主机的IP地址或对应的主机域名。

二、DNS功能
每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。

主机名到IP地址的映射有两种方式:
1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。

正向解析:根据主机名称(域名)查找对应的IP地址(实际应用中最多的)
反向解析:根据IP地址查找对应的主机域名(不常用,一般用于搭建邮件服务器时。)

根据服务器与所提供域名解析记录的关系,将DNS服务器分为不同的角色:
1)缓存域名服务器,也称为 唯高速缓存服务器
通过向其他域名服务器查询获得域名->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度

2)主域名服务器
特定DNS区域的官方服务器,具有唯一性
负责维护该区域内所有域名->IP地址的映射记录

3)从域名服务器(通俗一点就是用于备份DNS服务器的)
也称为 辅助域名服务器
其维护的 域名->IP地址记录 来源于主域名服务器
搭建DNS服务应用的软件为:BIND(Berkeley Internet Name Daemon)

三、DNS服务环境部署记录
服务安装

  1. 执行以下命令以安装BIND:
yum install bind bind* -y
  1. 执行以下命令以启动BIND服务并设置它在系统引导时自动启动:
systemctl start named
systemctl enable named
  1. 使用以下命令检查BIND服务是否正在运行:
    systemctl status named
  2. 使用以下命令打开防火墙端口以允许BIND服务:
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
#或者
systemctl stop firewalld # 关闭防火墙服务
setenforce 0 # 关闭SELinux强制模式

主配置文件/etc/named.conf,按下面提示修改

vim /etc/named.conf 
options {
        listen-on port 53 { 127.0.0.1; }; # 指定dns服务监听端口监听IP(默认是本地换回地址) 要修改为 `any`
        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; }; # 指定允许查询DNS服务器的客户端的IP(默认是本主机) 要修改为 `any`
 
#以下是示例
//
// 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 { any; };
        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     { any; };
        forwarders {
        114.114.114.114;
        223.5.5.5;
        };

        /* 
         - 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";
        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";
include "/var/named/hozonauto.com-zone.conf";
include "/var/named/hozitec.cn-zone.conf";

正向解析配置示例:
在named.conf文件中添加以下内容:

zone "demo.com" IN {
  type master;
  file "/etc/named/zones/db.demo.com";
};
然后,在/etc/named/zones/目录下创建db.demo.com文件,并添加以下内容:
$TTL    86400
@       IN      SOA     ns1.demo.com. admin.demo.com. (
                2023022201   ; Serial
                3600         ; Refresh
                1800         ; Retry
                604800       ; Expire
                86400        ; Minimum TTL
                )
@       IN      NS      ns1.demo.com.
ns1     IN      A       <your_name_server_IP>
mail    IN      A       <your_mail_server_IP>
www     IN      A       <your_web_server_IP>

在上面的配置中,您需要将<your_name_server_IP>替换为您的名称服务器IP地址,将<your_mail_server_IP>替换为您的邮件服务器IP地址,将<your_web_server_IP>替换为您的Web服务器IP地址。
邮箱MX记录配置示例:
在db.demo.com文件中添加以下内容:

@       IN      MX      10 mail.demo.com.

在上面的配置中,您需要将mail.demo.com替换为您的邮件服务器主机名。
反向解析配置示例:
在named.conf文件中添加以下内容:

zone "1.168.192.in-addr.arpa" IN {
  type master;
  file "/etc/named/zones/db.192.168.1";
};

然后,在/etc/named/zones/目录下创建db.192.168.1文件,并添加以下内容:

pythonCopy code$TTL    86400
@       IN      SOA     ns1.demo.com. admin.demo.com. (
                2023022201   ; Serial
                3600         ; Refresh
                1800         ; Retry
                604800       ; Expire
                86400        ; Minimum TTL
                )
@       IN      NS      ns1.demo.com.
2       IN      PTR     mail.demo.com.

在上面的配置中,您需要将ns1.demo.com替换为您的名称服务器主机名,将mail.demo.com替换为您的邮件服务器主机名。2是IP地址的最后一个数字,应该替换为您的邮件服务器IP地址的最后一个数字。

配置DNS转发
编辑配置文件/etc/named.conf,添加forwarders转发配置。

options {
        listen-on port 53 { any; };
        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     { any; };
        forwarders {  #此条为配置转发策略,因上面内容已配置过请忽略
        10.0.6.218;
        10.0.13.218;
         };
};

重新加载BIND配置。
执行以下命令重新加载BIND配置文件:

sudo rndc reload

或者,您可以重启BIND服务:

systemctl restart named

现在,BIND将把无法在本地解析的域名请求转发到指定的DNS服务器。
请注意,如果您要使用多个转发器,请在forwarders部分中添加每个IP地址,并在每个IP地址之间使用分号;分隔。

配置引用
如果想引用域控DNS,找到named.conf文件,并添加以下内容:

include "/var/named/lianlianpay-zone.conf";

#需要在/var/named/目录下先创建lianlianpay-zone.conf文件

touch lianlianpay-zone.conf

#在lianlianpay-zone.conf文件中添加以下内容

zone "lianlianpay.com" { type forward; forwarders { 192.168.170.22; }; forward only; };

named.conf配置文件示例

[root@office-dns-01 ~]# 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 { 192.168.162.51; };
        #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     { any; };
            forwarders {
        114.114.114.114;
        223.5.5.5;
            };

        /* 
         - 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";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        channel query_log {
                file "data/query.log" versions 1000 size 100m;
                severity info;
                print-time yes;
                       print-category yes;
            };
            category queries {
                query_log;
            };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/var/named/lianlianpay-zone.conf";
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置日志
如果要配置日志记录,找到named.conf文件中的logging部分,并添加以下内容:

 channel query_log {
            file "data/query.log" versions 1000 size 100m;
            severity info;
            print-time yes;
            print-category yes;
     };
     category queries {
            query_log;
     };
         

#添加后结果如下:

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        channel query_log {
                file "data/query.log" versions 1000 size 100m;
                severity info;
                print-time yes;
                print-category yes;
         };
         category queries {
                query_log;
         };
};

日志输出在:/var/named/data/query.log

四、DNS-Bind日志详述
简介#
在默认情况下,BIND9 把日志消息写到 /var/log/messages 文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息;而将调试日志信息写入 BIND 服务器工作目录中的 named.run 文件。
BIND 9 的日志是可以灵活配置的,要详细记录服务器的运行状况,要在配置文件 named.conf 中使用 logging 语句来定制自己所需要的日志记录。
BIND 日志的常用术语#
在讲述 logging 语句的语法之前,先要熟悉一些常用术语
暂时无法在飞书文档外展示此内容
logging 语句的语法#
logging 语句的语法为:

logging {
    channel channel_name {                // 定义通道
        file log_file [versions number | unlimited] [size sizespec]; | syslog optional_facility; | null; | stderr;      // 定义输出方式
        severity log_severity;           // 定义消息严重性
        [print-time boolean;]            // 是否在消息中添加时间前缀,仅用于 file 日志
        [print-severity boolean;]        // 是否在消息中添加消息严重性前缀
        [print-category boolean;]        // 是否在消息中添加消息类别名前缀
   };
   category category_name {              // 定义类别
        channel_name;
        ......
   };
};

channel 语句#
配置日志时,首先要定义通道,然后将不同的日志类别的数据指派到指定的通道上输出。
BIND 9 的默认配置是:

logging {
    // 由于使用了默认通道,所以没有通道定义部分
    category "default" { "default_syslog"; "default_debug"; };
};
channel 语句用于定义通道。指定应该向哪里发送日志数据,需要在以下四种之间则其一:
  - file: 输出到纯文本文件
  - log_file: 指定一个文件名
  - version: 指定允许同时存在多少个版本的该文件,比如指定 3 个版本(version 3),就会保存 query.log、query.log0、query.log1 和query.log2。
  - size: 指定文件大小的上限,如果只设定了size 而没有设定 version,当文件达到指定的文件大小上限时,服务器停止写入该文件。如果设定了version,服务器会进行循环,如把 log_file 变成 log_file.log1,log_file.log1 变成 log_file.log2 等,然后建立一个新log_file.log 进行写入。
syslog optional_facility :输出到 syslog,其中 optional_facility 是 syslog 的设备名,通常为以下几个:
  - daemon
  - local0 到 local7
  - null :输出到空设备
  - stderr :输出到标准错误输出,默认为屏幕
severity 语句用于指定消息的严重性等级, log_severity 的取值为(按照严重性递减的顺序):
  - critical
  - error
  - warning
  - notice
  - info
  - debug [ level ]

dynamic 是一个特殊的值,它匹配服务器当前的调试级别。定义了某个严重性级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为 error,则会记录 critical 和error 两个级别的信息。
对于系统管理员来说,一般记录到 info 级别就可以了。
BIND 9 预制了如下四个默认通道;

channel "default_syslog" {
syslog daemon;     // 发送给 syslog 的 daemon 设备
severity info;     // 只发送此 info 及其更高优先级的信息
};
channel "default_debug" { // 只有当服务器的 debug 级别非 0 时,才产生输出。
file "named.run"; // 写入工作目录下的 named.run 文件
severity dynamic; // 按照服务器当前的debug 级别记录日志
};
channel "default_stderr" {
        stderr;           // 写到stderr
        severity info;    // 只发送此 info 及其更高优先级的信息
};
channel "null" {
        null;             // 丢弃所有发到此通道的信息
};

category 语句
category 语句是指定哪一种类别的信息使用哪个或者哪几个已经定义了的通道输出。
BIND 9 中可用的类别名(category_name)有:
暂时无法在飞书文档外展示此内容
例如要记录查询消息,可以在 named.conf 中添加如下配置:

logging {
    channel query_log {
        file "query.log" versions 3 size 20m;
        severity info;
        print-time yes;
        print-category yes;
    };
    category queries {
        query_log;
    };
};

这样服务器会在工作目录(directory 语句所指定的目录,Ubuntu 为:/var/cache/bind)下创建 query.log 文件,并把运行过程产生的 queries 消息写如到此文件中。

如果重启机器后遇到以下错误
** server can’t find hozonauto.com: SERVFAIL
可尝试给 /var/named/named.a 权限,然后重启服务。

chown named:named /etc/named.conf
chmod 755 /etc/named.conf
systemctl restart named
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值