centos7部署智能dns实战应用

主DNS:192.168.101.129

备DNS:192.168.101.128

原理:

一、下载软件

  1. bind-9.17.9.tar.xz的下载地址:https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz。
  2. 更多的bind版本可以从https://ftp.isc.org/isc/bind9/下载。

二:安装bind软件

1:安装bind

yum install libuv*  openssl openssl-devel libcap libcap-devel 

 cd /opt/
wget https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz
tar -xvf bind-9.17.9.tar.xz
cd bind-9.17.9
./configure --prefix=/usr/local/named --enable-threads && make && make install
chown -R bind:bind /usr/local/named
 mkdir /var/named
chown -R bind:bind /var/named/
chmod 700 /usr/local/named/etc/

2:生成named.root文件

 cd /var/named/
 wget https://ftp.internic.net/domain/named.root
 

3:生成的rndc.conf

# /usr/local/named/sbin/rndc-confgen >/usr/local/named/etc/rndc.conf

[root@localhost named]# /usr/local/named/sbin/rndc-confgen >/usr/local/named/etc/rndc.conf

[root@localhost named]# cat /usr/local/named/etc/rndc.conf 
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-sha256;
        secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-sha256;
#       secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
# };
# 
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

 4:将生成的rndc.conf写入到named.conf文件中

[root@localhost named]# tail -10 /usr/local/named/etc/rndc.conf |head -9|sed 's/#\ //g' > /usr/local/named/etc/named.conf

[root@localhost named]# 
[root@localhost named]# cat /usr/local/named/etc/named.conf 
key "rndc-key" {
        algorithm hmac-sha256;
        secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};

controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
};

三:bind路径与chroot

1:配置详解

配置文件:/usr/local/named/etc/named.conf,设定zone file的目录/var/named,权限等。

zone file: 记录主机名与ip地址对应

named.conf: 是bind的主配置文件

/var/named:  zone 文件默认放置目录

/var/run/named: named程序执行时默认放置的pid文件

2:cache-only 与 forwardding DNS

      A:   cache-only 服务器:仅有 “.” 这个zone file的简单DNS,没有自己的DNS服务器,只有缓存查询结果功能

     B:   forwarding服务器: 指定一台上层DNS服务器作为forwarding的目录。

如何设定cache-only 与 forwardding?

很简单,因为不需要设定正反解析的zone文件,所以只需要设定一下named.conf配置文件即可

3:named.conf配置文件,添加options相关参数

[root@localhost etc]# cat named.conf
options {
        listen-on port 53 { any; };     //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; };

        /* 
         - 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;
        forward only;
        forwarders {
          114.114.114.114;
          8.8.8.8;
          8.8.4.4;
        };

        pid-file "/run/named/named.pid";
};



key "rndc-key" {
        algorithm hmac-sha256;
        secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

option选项解析:

    DNS的options部分包含了多种配置选项,‌用于控制DNS服务器的行为和安全性。‌ 这些选项包括但不限于监听端口、‌允许查询的客户端、‌转发服务器设置、‌缓存设置、‌递归查询数量等。‌以下是具体的选项说明:‌

  1. 监听设置:‌

    • listen-on port 指定DNS服务器监听的IP地址和端口号,‌例如 listen-on port 53 { 192.168.0.78 }; 表示服务器在IP地址192.168.0.78的53端口上监听DNS查询请求。‌如果不指定IP地址,‌则默认监听所有IP地址收到的请求。‌
    • listen-on-v6 用于监听IPv6的DNS查询请求。‌
  2. 区域设置:‌

    • directory 指定区域zone配置文件所在的目录,‌例如 directory "/var/named"; 指定配置文件存储在/var/named目录下。‌
  3. 安全与访问控制:‌

    • allow-query 和 allow-recursion 用于控制哪些客户端可以查询DNS服务器以及是否允许这些客户端提交递归查询。‌例如,‌allow-query { 192.168.0.101;192.168.1.1; } 只允许这两个IP地址的客户端查询。‌
    • allow-transfer 控制区域传输的辅助区域,‌即哪些服务器可以请求区域传输。‌
  4. 转发设置:‌

    • forwarders 指定当本地DNS服务器无法解析某个域名时,‌将查询转发到的上游DNS服务器。‌例如,‌forwarders { 1.1.1.1; } 表示当本地DNS服务器无法解析时,‌将查询转发到IP地址为1.1.1.1的DNS服务器。‌如果担心配置的上层DNS服务器可能会挂掉,可以配置多个上层DNS服务器地址。
    • forward only; 这个设定可以让DNS服务器仅进行forward转发,即使有zone file的设定,也不生效使用,只会将查询权交给配置DNS服务器而已,是cache only DNS最常见的设定。
  5. 性能与缓存设置:‌

    • max-cache-size 设置DNS缓存的最大尺寸,‌例如 max-cache-size 10M 表示缓存的最大尺寸为10MB。‌
    • recursive-clients 和 tcp-clients 分别控制同时进行的递归查询和TCP连接的最大数量。‌
  6. dump-file

          dump-file通常是指配置DNS服务器时,设置或指定一个文件用于记录或转储DNS查询的详细信息。这通常用于调试目的。

       注意,过度使用dump-file可能会导致磁盘空间快速被占用,因此应该谨慎使用,并确保指定的转储文件路径有足够的磁盘空间。

   7. statistics-file

        是一个配置选项,用于指定保存DNS查询统计信息的文件。这个文件可以帮助我们了解DNS服务器的工作状态,分析DNS性能,调优DNS配置等。

在BIND(Berkeley Internet Name Domain)这个广泛使用的DNS软件中,可以在named.conf配置文件中使用statistics-file选项。

以下是一个配置示例:

options {

   statistics-file "/var/log/named/data";

   statistics-cumulative yes;

};

在这个例子中,所有的统计数据将会被保存在"/var/log/named/data"文件中。"statistics-cumulative yes"表示统计数据会累计到文件中,而不是每次服务器重启时都重置。

注意,这个文件的路径必须是DNS服务器可以访问的,并且服务器必须有权限写入这个文件。如果你不想使用统计文件,可以将这个选项设置为"no"或者完全删除这个选项。

8. memstatistics-file 

   memstatistics-file 是 DNS 服务器软件(例如 BIND)中的一个选项,用于指定存储 DNS 查询统计信息的内存文件的路径。这个功能可以帮助诊断 DNS 服务器性能问题。

当你在 DNS 服务器的配置文件中看到 options { memstatistics-file "/var/log/named/data/named_mem_stats.txt"; }; 这样的行时,这意味着 DNS 服务器会在指定的文件 /var/log/named/data/named_mem_stats.txt 中记录内存统计信息。

这个功能在调试内存问题时非常有用,可以帮助了解 DNS 服务器如何使用内存资源,包括何时何地分配了多少内存,以及何时发生了内存泄漏。

请注意,这个选项可能需要特定的权限才能写入指定的文件,服务器可能需要以 root 用户或其他具有适当权限的用户身份运行,才能正确写入文件。

9. RECURSING-FILE

    DNS的OPTIONS中的RECURSING-FILE是一个配置选项,用于指定存储DNS递归查询结果的文件。递归查询是DNS服务器在无法直接解析查询时,代表客户端向上级服务器查询的行为。递归查询结果的缓存可以提高查询效率,减少网络负载。

在配置DNS服务器时,可以通过编辑配置文件来设置RECURSING-FILE选项。例如,在BIND(Berkeley Internet Name Domain)中,可以在named.conf中添加类似以下的配置:

options {

...

  recursing-file "named.recursing";

  recursion yes;

...

};

在上述配置中,named.recursing是存储递归查询结果的文件。

需要注意的是,RECURSING-FILE选项通常需要配合其他选项,如recurse(允许服务器进行递归查询),trust-anchor(指定可信的根区域)等,并且要确保配置了正确的文件权限和路径,以便DNS服务器能够正确地读写这个文件。

通过这些选项,‌管理员可以精细地控制DNS服务器的行为,‌包括监听的网络接口、‌允许的查询类型、‌缓存策略等,‌以满足特定的网络需求和安全要求。‌

10. secroots-file

options { secroots-file; 是一个配置指令,用于指定存储安全根证书的文件的位置。这通常用在DNS服务器中,以确保DNS服务器从可信的来源获取其数据。

这个指令通常在BIND(Berkeley Internet Name Domain)的配置文件中出现,如named.conf。例如:

options {

secroots-file "/path/to/secroots.db";

...

};

在这个例子中,/path/to/secroots.db 是存储安全根证书的文件的路径。这个文件通常是一个数据库文件,可以是text或SQLite格式。

请注意,这个指令可能需要特定的BIND版本才能正常工作,且具体的配置可能会根据你的操作系统和安全策略有所不同。

3.根据当前的需求修改配置文件named.conf

# mkdir -p /var/named/data
# chown -R bind.bind /usr/local/named/
# chown -R bind.bind /var/named/

1:启动DNS服务
# /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind

2:查看日志
# tailf -200 /var/log/messages

3:查看监听端口
# netstat -anpt|grep 53
tcp        0      0 192.168.101.129:53      0.0.0.0:*               LISTEN      35583/named         
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      35583/named         
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      35583/named         
tcp6       0      0 ::1:53                  :::*                    LISTEN      35583/named         
# cat /usr/local/named/etc/named.conf
options {
        listen-on port 53 { any; };     //any  监听本地所有地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };

        forward only;
        forwarders {
              114.114.114.114;
              8.8.8.8;
              8.8.4.4;
               };

        recursion yes;
        pid-file "/run/named/named.pid";
};

key "rndc-key" {
        algorithm hmac-sha256;
        secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

4:上面配置是没有配置zone区域,只是配置了DNS转发功能。测试

bind9配置zone详解

// 定义一个DNS区域(zone)

zone "example.com" {

type master; // 指定区域类型为主DNS区域

file "example.com.zone"; // 指定区域文件路径

allow-update { none; }; // 允许更新的客户端列表,这里设置为无客户端可以更新

};

// 定义一个区域文件的例子

$TTL 86400

@ IN SOA ns1.example.com. admin.example.com. (

               2013042201 ; Serial

               3600 ; Refresh

               1800 ; Retry

               604800 ; Expire

               86400 ; Minimum TTL

)

IN NS ns1.example.com.

IN MX 10 mail.example.com.

ns1 IN A 192.0.2.1

mail IN A 192.0.2.2

www IN CNAME webserver.example.com.

webserver IN A 192.0.2.3

这个配置文件定义了一个名为"example.com"的DNS区域,并指定了一个区域文件"example.com.zone"。SOA记录定义了区域的授权开始,并设置了更新策略。NS记录指定了区域的名称服务器。MX记录定义了邮件交换记录。其他记录定义了该区域内的具体名称和对应的IP地址。

SOA后面7个参数的详解:

查询某个baidu.com的SOA记录:

# dig -t SOA baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> -t SOA baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58071
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.                     IN      SOA

;; ANSWER SECTION:
baidu.com.              3600    IN      SOA     dns.baidu.com. sa.baidu.com. 2012148485 300 300 2592000 7200

;; Query time: 90 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: 六 8月 03 23:14:10 CST 2024
;; MSG SIZE  rcvd: 70

DNS的SOA记录(‌Start of Authority record)‌是DNS区域文件中的关键记录,‌它提供了关于该区域的重要管理信息。‌

其中称为起始授权机构(SOA, Start Of Authority)的资源记录,描述了域名的管理员、电子邮件地址,和一些时间参数。

2312148485 300 300 2592000 7200

  • 区域名称:‌dns.baidu.com. :这是SOA记录所在区域的名称,‌该域名解析使用的服务器。‌
  • 管理员电子邮件地址:‌通常以 sa.baidu.com. 的形式表示,‌虽然在实际应用中可能缺少“@”符号,‌以.代替@,但这在SOA记录中是等效于电子邮件地址的。‌
  • 序列号:‌2312148485:可以看出是23年12日14日,8485表示更新一次,增加一个数,一个递增的数字,‌用于标识区域信息的版本。‌当区域文件发生更改时,‌序列号会增加,‌这有助于DNS服务器确定何时需要从主服务器获取最新的区域数据。‌
  • 刷新间隔:‌300 :从服务器应该多久向主服务器请求区域数据的更新。‌这个值以秒为单位,‌通常设置为86400秒(‌即一天)‌。‌
  • 重试间隔:‌300:如果在刷新间隔期间无法从主服务器获取数据,‌从服务器将等待这个间隔后再试。‌这有助于在主服务器暂时不可用时保持一定的灵活性。‌单位为秒。通常小于刷新时间。
  • 过期时间:‌2592000:如果主服务器持续不可用,‌从服务器在经过这个时间后将停止提供服务。‌这是一个安全机制,‌以防主服务器长时间无法访问。‌当备用DNS服务器无法联系上主DNS服务器时,备用DNS服务器可以在多长时间内认为其缓存是有效的,并供用户查询。
  • 默认TTL值:‌7200:缓存DNS服务器可以缓存记录多长时间,单位为秒。这个时间比较重要,太短会增加主DNS服务器负载。如果太长,在域名信息改变时,需要更长的时间才能各地的缓存DNS服务器才能得到变化信息。

SOA记录是每个DNS区域都必须有的记录,‌它定义了区域的权威性和管理信息。‌通过SOA记录,‌DNS服务器能够知道如何正确地维护和更新区域数据,‌确保DNS查询的准确性和效率。‌

注意事项:

     除了Serial不超过2的32次方之外,针对这几个数值什么限制,参考如下

Refresh >=Retry * 2

Refresh + Retry < Expire

Expire >= Retry * 10

Expire >= 7Days

也可以参考各大网站的这个数值。如上面的baidu.com

四:配置zone

1:named.conf配置

# cat /usr/local/named/etc/named.conf

options {
        listen-on port 53 { any; };     //any  监听本地所有地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };
        recursion yes;
        pid-file "/run/named/named.pid";
};

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


zone "etiantian.org" IN {
        type master;
        file "etiantian.org.zone";
        allow-update {none;};
        allow-transfer {192.168.101.128;};
        notify yes;
        also-notify {192.168.101.128;};
};

zone "101.168.192.in-addr.arpa" IN {
       type master;
       file "192.168.101.zone";
       allow-transfer {192.128.101.128;};
};

key "rndc-key" {
        algorithm hmac-sha256;
        secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

2:创建zone文件

# cat /var/named/etiantian.org.zone 
$TTL 1D
@       IN SOA  etiantian.org. admin.etiantian.org. (
                                            2024080400       ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      dns.etiantian.org.
dns          A       192.168.101.129
www          A       192.168.101.120
test2        A       192.168.8.202
test1      CNAME     www

----------------------------------------------------------------------------- 
# cat /var/named/192.168.101.zone 
$TTL 3H
@    IN SOA  etiantian.org. admin.etiantian.org. (
                                      2024080400       ; serial
                                      1D      ; refresh
                                      1H      ; retry
                                      1W      ; expire
                                      3H )    ; minimum
        NS     dns.etiantian.org.
120     PTR     www.etiantian.org.

-------------------------------------------------------------------------------

# 配置文件检查,没有输出报错信息,

# /usr/local/named/bin/named-checkconf -c /usr/local/named/etc/named.conf

3:重启named服务

1:找出named服务的pid
# ps -ef |grep named|grep -v grep
bind      36351      1  0 03:35 ?        00:00:00 /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind

2: kill掉named的pid
# kill -9  36351

3:启动named服务
# /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind

4:测试,在客户端机器上添加dns地址192.128.101.129

1:客户端机器上添加DNs的地址:nameserver 192.168.101.129

# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 192.168.101.129

2:测试是否解析。如果解析失败了,那是指向了114.114.114.114的地址,可以/etc/resolv.conf配置文件注释掉。再测试。

# nslookup test1.etiantian.org
Server:         192.168.101.129
Address:        192.168.101.129#53

test1.etiantian.org     canonical name = www.etiantian.org.
Name:   www.etiantian.org
Address: 192.168.101.120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值