linux 使用bind部署DNS

bind适合公网DNS,局域网的DNS建议使用pdns-recursor软件。

安装bind软件

 rpm -qa | grep '^bind'   #查询bind主程序是否安装过
 yum -y install bind  bind-chroot #安装bind软件主程序

部署DNS前的准备知识

DNS客户端知识

  • /etc/hosts :这个是最早的 hostname 对应 IP 的档案;
  • /etc/resolv.conf :这个重要!就是 ISP 的 DNS 服务器 IP 记录处;
  • /etc/nsswitch.conf:这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!
[root@www ~]# host [-a] FQDN [server]
[root@www ~]# host -l domain [server]
选项与参数:
-a :代表列出该主机所有的相关信息,包括 IP、TTL 与除错讯息等等
-l :若后面接的那个 domain 设定允许 allow-transfer 时,则列出该 domain 所管理的所有主机名对应数据!
server:这个参数可有可无,当想要利用非 /etc/resolv.conf 内的 DNS 主机来查询主机名与 IP 的对应时,就可以利用这个参数了!
[root@www ~]# nslookup [FQDN] [server]
[root@www ~]# nslookup
选项与参数:
1. 可以直接在 nslookup 加上待查询的主机名或者是 IP ,[server] 可有可无;
2. 如果在 nslookup 后面没有加上任何主机名或 IP ,那将进入 nslookup 的查询功能
   在 nslookup 的查询功能当中,可以输入其他参数来进行特殊查询,例如:
   set type=any :列出所有的信息『正解方面配置文件』
   set type=mx  :列出与 mx 相关的信息!
[root@www ~]# dig [options] FQDN [@server]
选项与参数:
@server :如果不以 /etc/resolv.conf 的设定来作为 DNS 查询,可在此填入其他的 IP
options:相关的参数很多,主要有 +trace, -t type 以及 -x 三者最常用
  +trace :就是从 . 开始追踪,在 19.1.2 里面谈过了!回头瞧瞧去!
  -t type:查询的数据主要有 mx, ns, soa 等类型.
  -x     :查询反解信息,非常重要的项目!

DNS数据类型

#dig查询结果解析
[domain]   [ttl]          IN [[RR type]  [RR data]]
[待查数据] [暂存时间(秒)] IN [[资源类型] [资源内容]]

# 常见的正解文件 RR 相关信息
[domain]    IN  [[RR type]  [RR data]]
主机名.   IN  A           IPv4 的 IP 地址
主机名.   IN  AAAA        IPv6 的 IP 地址
领域名.   IN  NS          管理这个领域名的服务器主机名字.
领域名.   IN  SOA         管理这个领域名的七个重要参数(容后说明)
领域名.   IN  MX          顺序数字  接收邮件的服务器主机名字
主机别名.   IN  CNAME       实际代表这个主机别名的主机名字
# 反解文件记录的RR数据
[root@www ~]# dig -x 120.114.100.101
;; ANSWER SECTION:
101.100.114.120.in-addr.arpa. 3600 IN   PTR     www.ksu.edu.tw.

SOA七字段的含义

  1. Master DNS 服务器主机名:这个领域主要是哪部 DNS 作为 master 的意思。在本例中, dns1.ksu.edu.tw 为 ksu.edu.tw 这个领域的主要 DNS 服务器啰;
  2. 管理员的 email:那么管理员的 email 为何?发生问题可以联络这个管理员。要注意的是, 由于 @ 在数据库档案中是有特别意义的,因此这里就将 abuse@mail.ksu.edu.tw 改写成abuse.mail.ksu.edu.tw 。
  3. 序号 (Serial):这个序号代表的是这个数据库档案的新旧,序号越大代表越新。 当 slave 要判断是否主动下载新的数据库时,就以序号是否比 slave 上的还要新来判断,若是则下载,若不是则不下载。 所以当你修订了数据库内容时,记得要将这个数值放大才行! 为了方便用户记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆,例如昆山科大的 2010080369 序号代表 2010/08/03 当天的第 69 次更新的感觉。不过,序号不可大于 2 的 32 次方,亦即必须小于 4294967296 才行喔。
  4. 更新频率 (Refresh):那么啥时 slave 会去向 master 要求数据更新的判断? 就是这个数值定义的。昆山科大的 DNS 设定每 1800 秒进行一次 slave 向 master 要求数据更新。那每次 slave 去更新时, 如果发现序号没有比较大,那就不会下载数据库档案。
  5. 失败重新尝试时间 (Retry):如果因为某些因素,导致 slave 无法对 master 达成联机, 那么在多久的时间内,slave 会尝试重新联机到 master。在昆山科大的设定中,900 秒会重新尝试一次。意思是说,每 1800 秒 slave 会主动向 master 联机,但如果该次联机没有成功,那接下来尝试联机的时间会变成 900 秒。若后来有成功,则又会恢复到 1800 秒才再一次联机。
  6. 失效时间 (Expire):如果一直失败尝试时间,持续联机到达这个设定值时限, 那么 slave 将不再继续尝试联机,并且尝试删除这份下载的 zone file 信息。昆山科大设定为 604800 秒。意思是说,当联机一直失败,每 900 秒尝试到达 604800 秒后,昆山科大的 slave 将不再更新,只能等待系统管理员的处理。
  7. 快取时间 (Minumum TTL):如果这个数据库 zone file 中,每笔 RR 记录都没有写到 TTL 快取时间的话,那么就以这个 SOA 的设定值为主。

部署cache-only DNS的配置

[root@www ~]# vim /etc/named.conf
// 在预设的情况下,这个档案会去读取 /etc/named.rfc1912.zones 这个领域定义档
// 所以请记得要修改成底下的样式啊!
options {
        listen-on port 53  { any; };     //可不设定,代表全部接受
        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; };     //可不设定,代表全部接受
        recursion yes;                   //将自己视为客户端的一种查询模式
        forward only;                    //可暂时不设定
        forwarders {                     //是重点!
                114.114.114.114;              //先用电信的114当上层
                114.114.115.115;           //第二台DNS转发上层地址
        };
};  //最终记得要结尾符号!
/etc/init.d/named restart

部署可查询根域以及有自己正反域的DNS服务器

Master DNS部署

[root@www ~]# vim /etc/named.conf
//在此文件中”//“是注释的意思
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };   // 不许别的salve进行数据同步,没有slave则开启这行,否则注释;
};

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

zone "centos.jet" IN {            // 这个 zone 的名称
        type master;                // 是什么类型
        file "named.centos.jet";  // 档案放在哪里
        allow-transfer { 192.168.31.15; };  // 在这里新增 slave 的 IP
};

zone "31.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.31";
        allow-transfer { 192.168.31.15; };  // 在这里新增 slave 的 IP
};
# 这个文件为根据的查询区域,保持默认即可。
vim /var/named/named.ca
[root@www ~]# vim /var/named/named.centos.jet
; 与整个领域相关性较高的设定包括 NS, A, MX, SOA 等标志的设定处!
$TTL    600
@                       IN SOA   master.centos.jet. jet.www.centos.jet. (2020032101 3H 15M 1W 1D ) ; 
@                       IN NS    master.centos.jet.  ;  Master DNS 服务器名称
@                       IN NS    slave.centos.jet.  ;  Slave DNS 服务器名称
master.centos.jet.    IN A     192.168.31.16         ;  Master DNS 服务器 IP
slave.centos.jet.    IN A   192.168.31.15    ; slave DNS服务器IP
@                       IN MX 10 www.centos.jet.     ;  领域名的邮件服务器

www.centos.jet.       IN A     192.168.31.16
linux.centos.jet.     IN CNAME www.centos.jet.
ftp.centos.jet.       IN CNAME www.centos.jet.
forum.centos.jet.     IN CNAME www.centos.jet.
slave.centos.jet.       IN A    192.168.31.16
clientlinux.centos.jet. IN A    192.168.31.15
[root@www ~]# vim /var/named/named.192.168.31
$TTL    600
@       IN SOA  master.centos.jet. jet.www.centos.jet. (2020032101 3H 15M 1W 1D )
@       IN NS   master.centos.jet.
@       IN NS   slave.centos.jet.
16     IN PTR  master.centos.jet.  ; 将原本的 A 改成 PTR 的标志而已
15      IN PTR  slave.centos.jet.
16     IN PTR  www.centos.jet.     ; 这些是特定的 IP 对应
10      IN PTR  slave.centos.jet.
20      IN PTR  winxp.centos.jet.
30      IN PTR  win7.centos.jet.
101     IN PTR  dhcp101.centos.jet.  
102     IN PTR  dhcp102.centos.jet.
/etc/init.d/named restart

Slave DNS部署

[root@www ~]# vim /etc/named.conf
//在此文件中”//“是注释的意思
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };   // 不许别的salve进行数据同步,没有slave则开启这行,否则注释;
};

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

zone "centos.jet" IN {            // 这个 zone 的名称
        type slave;                // 是什么类型
        file "slaves/named.centos.jet";  // 档案放在哪里
        masters { 192.168.31.16; };  // 在这里新增 slave 的 IP
};

zone "31.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/named.192.168.31";
        masters { 192.168.31.16; };  // 在这里新增 slave 的 IP
};
name.ca 需要原来就存在,其他正反区域解析文件不需要存在,只需要目录权限和属主属组正确即可,如下:
[root@study05 named]# ls -ld /var/named/slaves/
drwxrwx---. 2 named named 4096 6月  19 2019 /var/named/slaves/
[root@study05 named]#
[root@study05 named]# /etc/init.d/named start
Generating /etc/rndc.key:                                  [确定]
启动 named:                                               [确定]
[root@study05 named]# tail -f /var/log/messages
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: Transfer started.
Mar 21 21:36:10 study05 named[2298]: transfer of 'centos.jet/IN' from 192.168.31.16#53: connected using 192.168.31.15#45781
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: transferred serial 2020032102
Mar 21 21:36:10 study05 named[2298]: transfer of 'centos.jet/IN' from 192.168.31.16#53: Transfer completed: 1 messages, 13 records, 315 bytes, 0.007 secs (45000 bytes/sec)
Mar 21 21:36:10 study05 named[2298]: zone centos.jet/IN: sending notifies (serial 2020032102)
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: Transfer started.
Mar 21 21:36:11 study05 named[2298]: transfer of '31.168.192.in-addr.arpa/IN' from 192.168.31.16#53: connected using 192.168.31.15#35925
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: transferred serial 2020032102
Mar 21 21:36:11 study05 named[2298]: transfer of '31.168.192.in-addr.arpa/IN' from 192.168.31.16#53: Transfer completed: 1 messages, 12 records, 334 bytes, 0.001 secs (334000 bytes/sec)
Mar 21 21:36:11 study05 named[2298]: zone 31.168.192.in-addr.arpa/IN: sending notifies (serial 2020032102)
^C
[root@study05 named]# cd /var/named/slaves/
[root@study05 slaves]# ll
总用量 8
-rw-r--r--. 1 named named 571 3月  21 21:36 named.192.168.31
-rw-r--r--. 1 named named 524 3月  21 21:36 named.centos.jet
[root@study05 slaves]#

部署如上DNS的子域DNS

# 上层DNS服务器的改动很简单,只需新增Master服务器 zone file 的 NS 与 A 即可。

[root@www ~]# vim /var/named/named.centos.jet
@                       IN SOA   master.centos.jet. jet.www.centos.jet. (
                                 2020032103 3H 15M 1W 1D )
# 上面的 SOA 部分序号加大,底下新增这两行即可 (原本的数据都保留不动)!
niki.centos.jet.      IN NS    dns.niki.centos.jet.
dns.niki.centos.jet.  IN A     192.168.31.14

[root@www ~]# /etc/init.d/named restart
[root@www ~]# tail -n 30 /var/log/messages | grep named
Mar  21 14:22:36 www named[9564]: zone centos.jet/IN: loaded serial 2020032103
# 登录档的关键是上面的序号部分~必须是我们填写的新的序号才对!

[root@www ~]# dig dns.niki.centos.vbird @127.0.0.1
# 你会发现是错误的!找不到 A 很正常,因为子域服务器还未建立。
#下层 DNS 服务器:需要有完整的 zone 相关设定.
# 1. 修改 named.conf ,增加 zone 的参数,假设档名为 named.niki.centos.jet
[root@niki ~]# vim /etc/named.conf
....(前面省略)....
zone "niki.centos.jet" IN {
        type master;
        file "named.niki.centos.jet";
};

# 2. 建立 named.niki.centos.jet
[root@niki ~]# vim /var/named/named.niki.centos.jet
$TTL   600
@      IN SOA   dns.niki.centos.jet. root.niki.centos.jet. (2020032101 3H 15M 1W 1D )
@      IN NS    dns.niki.centos.jet.
dns    IN A     192.168.31.14
www    IN A     192.168.31.14
@      IN MX 10 www.niki.centos.jet.
@      IN A     192.168.31.14
# 为了简化整个版面,所以都使用 hostname 而非 FQDN!请见谅!

# 3. 启动并观察相关登录信息
[root@niki ~]# /etc/init.d/named restart
[root@niki ~]# tail -n 30 /var/log/messages | grep named
....(前面省略)....
zone niki.centos.jet/IN: loaded serial 2020032103

....(底下省略)....

# 同时,记得处理一下防火墙的放行问题!否则测试会失败!!

[root@niki ~]# dig www.niki.centos.jet @192.168.31.16

# 上述的动作必须要有响应才行!否则就会出问题~

依不同接口给予不同的 DNS 解析地址: view 功能的应用

想象一个环境,以我们目前的局域网络服务器来说,我的 master.centos.jet 有两个接口,分别是 192.168.31.16/24 (对内) 及 100.3.2.3/24 (对外),那当我外边的用户想要了解到 master.centos.jet 这部服务器的 IP 时,取得的竟然是 192.168.31.16,因此还得要透过 NAT 才能联机到该接口,但明明 192.168.31.16 与外部的 100.3.2.3 是同一台服务器主机嘛!干嘛还得要经过 NAT 转到内部接口呢?有没有办法让外部的查询找到 master.centos.jet 是 100.3.2.3 而内部的找到则回应 192.168.31.16 呢?可以的!那就透过 view 的功能!
那么 view 要怎么处理呢?其实就是让不同来源的用户,能够取得他们自己的 zone 响应就是了。举例来说,当用户来自 130.0.0.1 时,这个来源不可能是内部 (192.168.31.16/24) ,因此这个来源就会使用外部的 zone file 内容来响应。 因此,我们就得要准备同一个 zone 需要两个不同的设定,再将个别的设定带入自己的客户端查询当中。

现在我们针对这个概念,对于上边部署的DNS,设定 view 的原则是这样的:

  • 建立一个名为 intranet 的名字,这个名字代表客户端为 192.168.31.0/24 的来源;
  • 建立一个名为 internet 的名字,这个名字代表客户端为非 192.168.31.0/24 的其他来源
  • intranet 使用的 zone file 为本章前面各小节所建立的 zone filename,internet 使用的 zone filename 则在原本的档名后面累加 inter 的扩展名,并修订各标志的结果。
[root@www ~]# vim /etc/named.conf
options {
        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; };
        recursion yes;
        //allow-transfer  { none; };
};

acl intranet { 192.168.31.0/24; };        <==针对 intranet 给予的来源 IP 指定
acl internet { ! 192.168.31.0/24; any; }; <==加上惊叹号 (!) 代表反向选择的意思

view "lan" {                            <==只是一个名字,代表的是内网
        match-clients { "intranet"; };  <==吻合这个来源的才使用底下的 zone
        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "centos.jet" IN {
                type master;
                file "named.centos.jet";
                allow-transfer { 192.168.31.15; };
        };

        zone "31.168.192.in-addr.arpa" IN {
                type master;
                file "named.192.168.31";
                allow-transfer { 192.168.31.15; };
        };
};

view "wan" {                           <==同样,只是个名字而已!
        match-clients { "internet"; }; <==代表的则是外网的 internet 来源
        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "centos.jet" IN {
                type master;
                file "named.centos.jet.inter"; <==档名必须与原有的不同!
        };
        // 外网因为没有使用到内网的 IP,所以 IP 反解部分可以不写于此
};
[root@www ~]# cd /var/named
[root@www named]# cp -a named.centos.jet named.centos.jet.inter
[root@www named]# vim named.centos.jet.inter

$TTL    600
@                       IN SOA   master.centos.vbird. vbird.www.centos.vbird. (2020032103 3H 15M 1W 1D )
@                       IN NS    master.centos.jet.
master.centos.jet.    IN A     100.3.2.3
@                       IN MX 10 www.centos.jet.

www.centos.jet.       IN A     100.3.2.3
linux.centos.jet.     IN CNAME www.centos.jet.
ftp.centos.jet.       IN CNAME www.centos.jet.
forum.centos.jet.     IN CNAME www.centos.jet.
workstation.centos.jet. IN A    100.3.2.3

[root@www named]# /etc/init.d/named restart

posted @ 2020-03-21 18:22  IamJet  阅读(1287)  评论(1编辑  收藏  举报