• 13.2 安装Bind服务程序
    • 13.2.1 正向解析实验
    • 13.2.2 反向解析实验

    13.2 安装Bind服务程序

    BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。

    1. [root@linuxprobe ~]# yum install bind-chroot
    2. Loaded plugins: langpacks, product-id, subscription-manager
    3. ………………省略部分输出信息………………
    4. Installing:
    5. bind-chroot x86_64 32:9.9.4-14.el7 rhel 81 k
    6. Installing for dependencies:
    7. bind x86_64 32:9.9.4-14.el7 rhel 1.8 M
    8. Transaction Summary
    9. ================================================================================
    10. Install 1 Package (+1 Dependent package)
    11. Total download size: 1.8 M
    12. Installed size: 4.3 M
    13. Is this ok [y/d/N]: y
    14. Downloading packages:
    15. --------------------------------------------------------------------------------
    16. Total 28 MB/s | 1.8 MB 00:00
    17. Running transaction check
    18. Running transaction test
    19. Transaction test succeeded
    20. Running transaction
    21. Installing : 32:bind-9.9.4-14.el7.x86_64 1/2
    22. Installing : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2
    23. Verifying : 32:bind-9.9.4-14.el7.x86_64 1/2
    24. Verifying : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2
    25. Installed:
    26. bind-chroot.x86_64 32:9.9.4-14.el7
    27. Dependency Installed:
    28. bind.x86_64 32:9.9.4-14.el7
    29. Complete!

    bind服务程序的配置并不简单,因为要想为用户提供健全的DNS查询服务,要在本地保存相关的域名数据库,而如果把所有域名和IP地址的对应关系都写入到某个配置文件中,估计要有上千万条的参数,这样既不利于程序的执行效率,也不方便日后的修改和维护。因此在bind服务程序中有下面这三个比较关键的文件。

    主配置文件(/etc/named.conf):只有58行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。

    区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。

    数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。

    在Linux系统中,bind服务程序的名称为named。首先需要在/etc目录中找到该服务程序的主配置文件,然后把第11行和第17行的地址均修改为any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。这两个地方一定要修改准确。

    1. [root@linuxprobe ~]# vim /etc/named.conf
    2. 1 //
    3. 2 // named.conf
    4. 3 //
    5. 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
    6. 5 // server as a caching only nameserver (as a localhost DNS resolver only).
    7. 6 //
    8. 7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
    9. 8 //
    10. 9
    11. 10 options {
    12. 11 listen-on port 53 { any; };
    13. 12 listen-on-v6 port 53 { ::1; };
    14. 13 directory "/var/named";
    15. 14 dump-file "/var/named/data/cache_dump.db";
    16. 15 statistics-file "/var/named/data/named_stats.txt";
    17. 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
    18. 17 allow-query { any; };
    19. 18
    20. 19 /*
    21. 20 - If you are building an AUTHORITATIVE DNS server, do NOT enable re cursion.
    22. 1,1 Top
    23. 21 - If you are building a RECURSIVE (caching) DNS server, you need to enable
    24. 22 recursion.
    25. 23 - If your recursive DNS server has a public IP address, you MUST en able access
    26. 24 control to limit queries to your legitimate users. Failing to do so will
    27. 25 cause your server to become part of large scale DNS amplification
    28. 26 attacks. Implementing BCP38 within your network would greatly
    29. 27 reduce such attack surface
    30. 28 */
    31. 29 recursion yes;
    32. 30
    33. 31 dnssec-enable yes;
    34. 32 dnssec-validation yes;
    35. 33 dnssec-lookaside auto;
    36. 34
    37. 35 /* Path to ISC DLV key */
    38. 36 bindkeys-file "/etc/named.iscdlv.key";
    39. 37
    40. 38 managed-keys-directory "/var/named/dynamic";
    41. 39
    42. 40 pid-file "/run/named/named.pid";
    43. 41 session-keyfile "/run/named/session.key";
    44. 42 };
    45. 43
    46. 44 logging {
    47. 45 channel default_debug {
    48. 46 file "data/named.run";
    49. 47 severity dynamic;
    50. 48 };
    51. 49 };
    52. 50
    53. 51 zone "." IN {
    54. 52 type hint;
    55. 53 file "named.ca";
    56. 54 };
    57. 55
    58. 56 include "/etc/named.rfc1912.zones";
    59. 57 include "/etc/named.root.key";
    60. 58

    如前所述,bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。在这个文件中,定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。将域名解析为IP地址的正向解析参数和将IP地址解析为域名的反向解析参数分别如图13-3和图13-4所示。

    正向解析区域文件格式

    图13-3 正向解析参数

    反向解析区域文件格式

    图13-4 反向解析参数

    下面的实验中会分别修改bind服务程序的主配置文件、区域配置文件与数据配置文件。如果在实验中遇到了bind服务程序启动失败的情况,而您认为这是由于参数写错而导致的,则可以执行named-checkconf命令和named-checkzone命令,分别检查主配置文件与数据配置文件中语法或参数的错误。

    出现问题?大胆提问!

    因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

    Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群。

    *本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

    13.2.1 正向解析实验

    在DNS域名解析服务中,正向解析是指根据域名(主机名)查找到对应的IP地址。也就是说,当用户输入了一个域名后,bind服务程序会自动进行查找,并将匹配到的IP地址返给用户。这也是最常用的DNS工作模式。

    第1步:编辑区域配置文件。该文件中默认已经有了一些无关紧要的解析参数,旨在让用户有一个参考。我们可以将下面的参数添加到区域配置文件的最下面,当然,也可以将该文件中的原有信息全部清空,而只保留自己的域名解析信息:

    1. [root@linuxprobe ~]# vim /etc/named.rfc1912.zones
    2. zone "linuxprobe.com" IN {
    3. type master;
    4. file "linuxprobe.com.zone";
    5. allow-update {none;};
    6. };

    第2步:编辑数据配置文件。我们可以从/var/named目录中复制一份正向解析的模板文件(named.localhost),然后把域名和IP地址的对应数据填写数据配置文件中并保存。在复制时记得加上-a参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容:

    1. [root@linuxprobe ~]# cd /var/named/
    2. [root@linuxprobe named]# ls -al named.localhost
    3. -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
    4. [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.zone

    编辑数据配置文件。在保存并退出后文件后记得重启named服务程序,让新的解析数据生效。考虑到正向解析文件中的参数较多,而且相对都比较重要,刘遄老师在每个参数后面都作了简要的说明。

    1. [root@linuxprobe named]# vim linuxprobe.com.zone
    2. [root@linuxprobe named]# systemctl restart named
    $TTL 1D#生存周期为1天
    @IN SOAlinuxprobe.com.root.linuxprobe.com.(
    #授权信息开始:#DNS区域的地址#域名管理员的邮箱(不要用@符号)
    0;serial#更新序列号
    1D;refresh#更新时间
    1H;retry#重试延时
    1W;expire#失效时间
    3H;)minimum#无效解析记录的缓存时间
    NSns.linuxprobe.com.#域名服务器记录
    nsIN A192.168.10.10#地址记录(ns.linuxprobe.com.)
    IN MX 10mail.linuxprobe.com.#邮箱交换记录
    mailIN A192.168.10.10#地址记录(mail.linuxprobe.com.)
    wwwIN A192.168.10.10#地址记录(www.linuxprobe.com.)
    bbsIN A192.168.10.20#地址记录(bbs.linuxprobe.com.)

    第3步:检验解析结果。为了检验解析结果,一定要先把Linux系统网卡中的DNS地址参数修改成本机IP地址,这样就可以使用由本机提供的DNS查询服务了。nslookup命令用于检测能否从DNS服务器中查询到域名与IP地址的解析记录,进而更准确地检验DNS服务器是否已经能够为用户提供服务。

    1. [root@linuxprobe ~]# systemctl restart network
    2. [root@linuxprobe ~]# nslookup
    3. > www.linuxprobe.com
    4. Server: 127.0.0.1
    5. Address: 127.0.0.1#53
    6. Name: www.linuxprobe.com
    7. Address: 192.168.10.10
    8. > bbs.linuxprobe.com
    9. Server: 127.0.0.1
    10. Address: 127.0.0.1#53
    11. Name: bbs.linuxprobe.com
    12. Address: 192.168.10.20

    13.2.2 反向解析实验

    在DNS域名解析服务中,反向解析的作用是将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个IP地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严重的超售问题。

    第1步:编辑区域配置文件。在编辑该文件时,除了不要写错格式之外,还需要记住此处定义的数据配置文件名称,因为一会儿还需要在/var/named目录中建立与其对应的同名文件。反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。把下列参数添加至正向解析参数的后面。

    1. [root@linuxprobe ~]# vim /etc/named.rfc1912.zones
    2. zone "linuxprobe.com" IN {
    3. type master;
    4. file "linuxprobe.com.zone";
    5. allow-update {none;};
    6. };
    7. zone "10.168.192.in-addr.arpa" IN {
    8. type master;
    9. file "192.168.10.arpa";
    10. };

    第2步:编辑数据配置文件。首先从/var/named目录中复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件中。其中,IP地址仅需要写主机位,如图13-5所示。

    反向区域数据文件不需要写主机网络部分

    图13-5 反向解析文件中IP地址参数规范

    1. [root@linuxprobe named]# cp -a named.loopback 192.168.10.arpa
    2. [root@linuxprobe named]# vim 192.168.10.arpa
    3. [root@linuxprobe named]# systemctl restart named
    $TTL 1D
    @IN SOAlinuxprobe.com.root.linuxprobe.com.(
    0;serial
    1D;refresh
    1H;retry
    1W;expire
    3H);minimum
    NSns.linuxprobe.com.
    nsA192.168.10.10
    10PTRns.linuxprobe.com.#PTR为指针记录,仅用于反向解析中。
    10PTRmail.linuxprobe.com.
    10PTRwww.linuxprobe.com.
    20PTRbbs.linuxprobe.com.

    第3步:检验解析结果。在前面的正向解析实验中,已经把系统网卡中的DNS地址参数修改成了本机IP地址,因此可以直接使用nslookup命令来检验解析结果,仅需输入IP地址即可查询到对应的域名信息。

    1. [root@linuxprobe ~]# nslookup
    2. > 192.168.10.10
    3. Server: 127.0.0.1
    4. Address: 127.0.0.1#53
    5. 10.10.168.192.in-addr.arpa name = ns.linuxprobe.com.
    6. 10.10.168.192.in-addr.arpa name = www.linuxprobe.com.
    7. 10.10.168.192.in-addr.arpa name = mail.linuxprobe.com.
    8. > 192.168.10.20
    9. Server: 127.0.0.1
    10. Address: 127.0.0.1#53
    11. 20.10.168.192.in-addr.arpa name = bbs.linuxprobe.com.