CentOS7搭建DNS服务器

# 原理

  • 使用开源的Bind服务来配置一个DNS服务器

机器环境

  • CentOS7

安装Bind服务

  • yum -y install bind*

配置/etc/named.conf

  • 修改如下

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";
        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;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.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";

修改/etc/named.rfc1912.zones添加DNS正反向解析规则

// 正向解析
zone "ns2250225.com" IN {
        type master;
        file "ns2250225.com.zone";
        allow-update { none; };
};

// 反向解析
zone "14.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.14.zone";
        allow-update { none; };
};

创建对应的配置文件

  • 创建/var/named/ns2250225.com.zone

$TTL 3600
@     IN SOA ns.ns2250225.com. admin.ns2250225.com. (4 3600 3600 7200 7200)
      IN NS ns
ns    IN A  192.168.14.250
www   IN A  192.168.14.251
mail  IN A  192.168.14.252
  • 创建/var/named/192.168.14.zone

$TTL 3600
@       IN      SOA     ns.ns2250225.com. admin.ns2250225.com. (4 3600 3600 7200 7200)
        IN      NS      ns.ns2250225.com.
250     IN      PTR     ns.ns2250225.com.
251     IN      PTR     www.ns2250225.com.
252     IN      PTR     mail.ns2250225.com.
  • 修改文件权限:chmod 777 ns2250225.com.zone 192.168.14.zone

重启Bind服务

systemctl restart named.service

测试正向解析

nslookup www.ns2250225.com 192.168.14.250

测试反向解析

nslookup 192.168.14.251 192.168.14.250

附录

SOA记录

domain.com.  IN SOA ns1.domain.com. admin.domain.com. (
                                        12083   ; serial number
                                        3h      ; refresh interval
                                        30m     ; retry interval
                                        3w      ; exiry period
                                        1h      ; negative TTL
)

  • domain.com.: 此处为区域的root所在,负责指定该区域文件指向domain.com域名。一般来讲,大家会在实际文件中看到这部分被@所取代,其属于占位符、指代此前$ORIGIN变量设定的内容。

  • IN SOA: 这里的“IN”部分代表着互联网(多数记录中都包含这部分)。而SOA代表这是一条起始授权记录。

  • ns1.domain.com.: 此处定义该域名的第一主命名服务器。命名服务器可为主服务器或者从服务器,而且如果动态DNS在配置中要求一台服务器必须为“第一主服务器”,那么就是在这里进行体现。如果大家还没有配置动态DNS,则其默认要求服务器为主命名服务器。

  • admin.domain.com.: 这里为此区域的管理员邮箱地址。其中的“@”被替换为“.”。如果该邮箱地址原本就使用“.”,则使用“\”替换“.”(your.name@domain.com转换为your\name.domain.com)。

  • 12083: 此处为该区域文件的序列号。每当编辑一个区域文件时,大家都必须增加该数字以实现正确广播。从服务器会检查主服务器的区域序列号以确定后者的数字更大。如果数字确实更大,则请求该新区域文件; 如果数字并非更大,则继续使用原始文件。

  • 3h: 此处为该区域的刷新间隔,负责告知从服务器等待多久才对主服务器的区域文件变更进行一次检查。

  • 30m: 此处为该区域的征订间隔。如果从服务器在刷新时无法接入主服务器,则其会等待这里设定的时长并再次重试。

  • 3w: 此处为到期期限。如果一台从命名服务器在此期间始终无法接入主服务器,则其不再作为该区域的授权响应源。

  • 1h: 此处为命名服务器在无法从文件内找到所请求域名时,缓存一条命名错误的时长。

A与AAAA记录

这两类记录都负责将一台主机映射至一个IP地址
其中的“A”记录用于将一台主机映射至一个IPv4 IP地址
而“AAAA”记录则用于将主机映射至IPv6 IP地址

如:
    ns1.domain.com.     IN  A       111.222.111.222

CNAME记录

CNAME记录负责为我们的服务器的规范名称定义一条别名
举例来说,我们可以使用一条A命名记录定义“server1”主机,而后将“www”作为该主机的别名:

server1     IN  A       111.111.111.111
www         IN  CNAME   server1

MX记录

MX记录用于定义该域名所使用的邮件交换方式,其能够帮助我们的邮件信息能够正确抵达邮件服务器

MX记录一般指向由A或者AAAA记录定义的主机,而非由CNAME定义的主机
因此,假设我们有两台邮件服务器。其记录内容应如下所示:

        IN  MX  10  mail1.domain.com.
        IN  MX  50  mail2.domain.com.
mail1   IN  A       111.111.111.111
mail2   IN  A       222.222.222.222

在本示例中,“mail1”主机为首选邮件交换服务器

NS记录

此记录类型用于定义该区域所使用的命名服务器

与MX记录类似,NS记录包含三条全区域参数,因此其同样不需要填写主机。一般来讲,其内容应如下所示:

    IN  NS     ns1.domain.com.
    IN  NS     ns2.domain.com.

PTR记录

PTR记录用于将一个名称关联至一个IP地址, PTR记录属于A或者AAA记录的倒数

下面来看111.222.333.444的PTR记录示例:

444.333.222.111.in-addr.arpa.   33692   IN  PTR host.example.com.

Last updated