文档 · 2023年2月22日 0

Centos7搭建DNS服务器

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

环境信息:

Centos7   IP:192.168.49.150

开始安装:

1.安装bind软件

[root@dss-server ~]# yum install -y bind bind-utils

2.修改配置文件

//
// 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; }; //监听的端口及地址,端口默认53  地址可以写本机ip,无特殊情况any即可,多个地址用逗号分开,例:{ any,192.168.49.150; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; }; //接受哪些地址来查询,通常为any,多个地址用逗号分开,例:{ any,192.168.49.150; };

        /* 
         - 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;  //递归查询DNS默认是开启的,但是没有配置转发,如果dns转发到公网建议启用BCP38安全验证,具体参考上方注释。

        dnssec-enable no;  //dns合规验证 默认开启,因为是测试
        dnssec-validation no; //dns合规验证 默认开启

        /* 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";
        /* 缓存NameServer 开启递归后如果本地解析不到,则转发给下面的dns域中*/
        forwarders {
                119.29.29.29;
                114.114.114.114;
                8.8.8.8;
                8.8.4.4;
        };
};
logging {
        channel default_debug {
                file "/var/log/bind/dns.log"; //日志文件路径,需要手动授权,用户及组为named.
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};
/*
zone "ZONE_NAME" IN {
    type {master|slave|hint|forward};
    file "ZONE_NAME.zone";
};
zone "ZONE_NAME“:定义解析库名字,通常和解析库文件前缀对应起来。
type:
    master:主dns解析
    slave:从dns解析
    hint:根域名解析(根提示域)
    forward:转发,转发不使用file
        file :定义区域解析库文件名字(位置默认在/var/named下面),file的前缀通常和zone的名字通常对应起来,然后加一个.zone的后缀。
*/
/*
zone "dnstest.xxx" IN { 
        type master; 
        file "dnstest.xxx.zone";
};
*/
include "/etc/named.rfc1912.zones"; //引入zone文件,默认配置可自己添加,这个文件提供了一些基本配置的模板可以在此文件上增加自己的zone配置,也可以像我一样自己include 一个文件,自己写zone配置,效果一样,只是为了演示.
include "/etc/named.root.key";
include "/etc/named.test.zones"; //引入zone文件,自己添加的  

//保存退出,记得修改权限。

##################################################################


3.检查主配置文件

[root@dss-server etc]# named-checkconf

无提示则正常

4.添加zones配置

如果第二步中最后未include自定义的文件,则默认使用/etc/named.rfc1912.zones 
[root@dss-server etc]# vim /etc/named.test.zones  

//示例:域名为dnstest.xxx 则寻找dnstest.xxx.zone解析
zone "dnstest.xxx" IN {
        type master;
        file "dnstest.xxx.zone";   //这个文件在/var/named/下创建
};

//示例,如果域名是xxxx.baidu.com则转发到119.29.29.29去做解析
zone "baidu.com" IN {    
        type forward;
        forwarders {
                119.29.29.29;
        };
};

5.添加Zone文件和资源记录Resource Record (RR)

#cp 模板文件
[root@dss-server etc]# cp /var/named/named.empty /var/named/dnstest.xxx.zone
[root@dss-server etc]# vim /var/named/dnstest.xxx.zone

$TTL 86400

;区域文件的格式:
;[name] [ttl] [class] type data (中括号里的内容可有可无)
@       IN      SOA       master.dnstest.xxx. admin.dnstest.xxx (
                        20230220        ;Serial序列号 有长度限制.
                        3600      ;Refresh刷新时间
                        5M      ;Retry重试时间
                        7D      ;Expire过期时间
                        1D      ;Minimun否定答案的TTL
)
        IN      NS      master.ca-sinfusi.com.
        IN      MX 10   mx1
        IN      MX 20   mx2
master  IN      A       192.168.49.150

保存退出,记得修改权限.

6.扩展

    • Serial:只是一个序号,但这个序号可被用来作为 slave 与 master 更新的依据。 举例来说, master 序号为 100 但 slave 序号为 90 时,那么这个 zone file 的资料就会被传送到 slave 来更新了。由于这个序号代表新旧资料,通常我们建议你可以利用日期来设定;
    • Refresh:除了根据 Serial 来判断新旧之外,我们可以利用这个 refresh(更新) 命令 slave 多久进行一次主动更新;
    • Retry:如果到了 Refresh 的时间,但是 slave 却无法连接到 master 时, 那么在多久之后,slave 会再次的主动尝试与主机连线;
    • Expire:如果 slave 一直无法与 master 连接上,那么经过多久的时间之后, 则命令 slave 不要再连接 master 了! 也就是说,此时我们假设 master DNS 可能遇到重大问题而无法上线,则等待系统管理员处理完毕后, 再重新来到 slave DNS 重新启动 bind 吧!
    • Minimun:这个就有点象是 TTL !
    • 各个字段之间由空格或制表符分割,字段可以包含下面特殊字符:

      ;注释

      @表示当前域

      ()允许数据夸行,通常用于 SOA 记录

      *仅用于 name 字符的通配符

      name :字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名。

      • 对象名可以是相对域名或全域名,全域名应该以“.”结束
      • 若几条连续的 RR 记录涉及同一个对象名,则第一条 RR 记录后的 RR 记录可以 省略对象名
      • 若出现字段名字段,则必须出现在第一个字段

      ttl:它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该 字段,而使用位于文件开始处的 $TTL 语句所指定值。

      class:字段用于指定网络类型,可选的值有:IN、CH 和 HS,其中 IN (Internet)是广泛使用的一种。虽然 IN 是该字段的默认值,但通常我们会显示 地指出。

      type:字段用于说明 RR 的类型。常用的 RR 类型如下:

      1、区域记录:

      SOA (Start Of Authority)    SOA 记录标示一个授权区定义的开始。SOA 记录后的所有信息是控制这个区的
      NS (Name Server)    标识区的域名服务器以及授权子域

      2、基本记录:

      A (Address)    用于将主机名转换为 IP 地址,任何一个主机都只能有一个 A记录
      PTR (PoinTeR)    将地址转换为主机名
      MX (Mail eXchanger)    邮件交换记录。控制邮件的路由

      3、安全记录:

      KEY (Public Key)    储存一个关于DNS 名称的公钥
      NXT (Next)    与 DNSSEC 一起使用,用于指出一个特定名称不在域中
      SIG (Signatrue)    指出带签名和身份认证的区信息,细节见 RFC 2535

      4、可选记录:

      CNAME (Canonical NAME)    给定主机的别名,主机的规范名在A记录中给出
      SRV (Services)    指出知名网络服务的信息
      TXT (Text)    注释或非关键的信息
      
      
      更多详细信息请参考 bind9的基本配置详解(二) - 远洪 - 博客园 (cnblogs.com)
      
打赏