DNS服务器配置与管理(2)——BIND部署DNS

3 篇文章 0 订阅

在Linux上配置DNS的常用软件是BIND(Berkeley Internet Name Domain Service,BIND),它是一款实现DNS服务器的开放源码软件。本文详细介绍了在CentOS7上安装并配置Bind软件。

一、Bind软件介绍

BIND包最初是在 1980 年代初在加州大学伯克利分校作为研究生项目,在美国国防高级研究项目管理局 (DARPA)的资助下编写的。BIND 到 4.8.3 版本由加州大学伯克利分校的计算机系统研究小组 (CSRG) 维护,Douglas Terry、Mark Painter、David Riggle 和 Songnian Zhou 组成了最初的 BIND 项目团队。

从 4.9.3 开始的 BIND 版本由Internet软件联合会(Internet Software Consortium,ISC) 开发和维护,并由 ISC 的赞助商提供支持。

1997 年 5 月发布了BIND 版本 8 的第一个生产就绪版本。2000 年 9 月发布BIND9版本,几乎对底层 BIND 架构的所有方面进行了重大改写。2009 年~2014年期间进行开发,ISC 开始尝试使用 BIND 10 从头开始重写 BIND。其官方网站是:BIND 9 - ISC

作为开源DNS软件的代表之一,BIND以其稳定性和灵活性广泛应用于各类网络环境。与其他DNS软件相比,BIND具有较高的可靠性和广泛的支持基础,目前能够运行在几乎所有的操作系统平台之上。

二、安装DNS服务

2.1 BIND套件

BIND套件主要包括四个工具:

1、bind:提供DNS 服务器程序,以及几个常用的测试工具。 2、bind-libs:提供bind和bind-utils包中的程序共同用到的库文件。 3、bind-utils:bind客户端程序,提供host, nslookup, dig等测试工具。 4、bind-chroot:安全包,例如为Bind服务提供一个伪装的根目录(将/var/named/chroot文件夹作为Bind的根目录),以提高安全性。

2.2 安装并启动DNS服务

配置好yum源后,可以使用yum命令安装bind服务程序,并且会自动安装依赖包bind-libs。这里只是模拟实验环境,可以不安装bind-chroot,只安装bind。

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

Bind包安装后,会自动增加一个名为named.service的系统服务,启动后,会开启DNS的守护进程named。

[root@server ~]# systemctl start named
[root@server ~]# netstat  -anutpl | grep named
tcp        0      0 127.0.0.1:53   0.0.0.0:*        LISTEN      86624/named
tcp        0      0 127.0.0.1:953  0.0.0.0:*        LISTEN      86624/named
tcp6       0      0 ::1:53         :::*             LISTEN      86624/named
tcp6       0      0 ::1:953        :::*             LISTEN      86624/named
udp        0      0 127.0.0.1:53   0.0.0.0:*                    86624/named
udp6       0      0 ::1:53         :::*                         86624/named

可以看到DNS服务默认在本地回环口的TCP的53端口侦听。另外TCP的953端口,是远程管理bind工具rndc(Remote Name Domain Controllor)使用的,通过这个工具可以在本地或者远程了解当前DNS服务器的运行状况,也可以对DNS服务器进行关闭、重载、刷新缓存、增加删除zone等操作。

三、认识DNS配置文件

Bind包安装后,涉及到三种类型的配置文件:主配置文件、区域配置文件、区域数据配置文件。此外,这些配置文件都提供了模板文件供参考。

[root@server ~]# rpm -qc bind       #查询bind相关的配置文件
3.1 主配置文件named.conf

主配置文件,包含了整个DNS服务器的配置信息。文件路径位于/etc/named.conf

主配置文件内,“options”部分包含一些全局设置,如指定工作目录、侦听地址和端口、递归查询等;“zone”部分定义了一组DNS区域,并指定其类型和区域文件;“logging”部分定义了日志配置。主配置文件也可以通过”include“引入其他外部文件。注意:每条配置必须以分号“;“结束。

下面看一个示例文件:

//option下定义全局配置
options {       
    //侦听地址和端口(IPv4/6),可以监听多个接口,每个地址后面都需要加上分号
    listen-on port 53 { 127.0.0.1; };               
    listen-on-v6 port 53 { ::1; };                  
    //DNS工作目录,若安装了bind-chroot,文件会被主动链接伪装的根目录
    directory   "/var/named";
    //与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";
    //针对DNS客户端的设置,指定哪些客户端可以向DNS服务提出查询请求
    //any匹配任何地址,none不匹配任何地址,可以使用IP地址或者网段形式
    allow-query     { localhost; };     
    //指定允许接收区域传送请求的主机
    allow-transfer{none;};
    //是否允许为DNS客户端做递归查询,如果部署惟缓存服务器,不需要启用
    recursion yes;
    //用于DNS转发,当域名服务器无法解析时,将请求转发给指定的DNS服务器
    forwarders{8.8.8.8;};
    
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.root.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
​
//logging下定义服务器日志记录的内容和日志信息来源等
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
​
//zone下定义区域信息,可以定义多个zone,一个zone定义一个区域
zone "." IN {//定义根区域
    //区域类型:hint表示根区域,master表示主DNS服务器,slave表示辅助DNS服务器
    //另外还有stub、forward等类型
    type hint;
    //区域配置文件名,默认存放在/var/named目录
    file "named.ca";
};
​
//引入区域配置文件/etc/named.zones
include "/etc/named.zones"; 
include "/etc/named.root.key";
3.2 区域配置文件

区域配置文件中主要是对DNS区域的声明,文件名称和位置可以自定义,并在主配置文件中使用include引入区域配置文件,,如:include "/etc/named.zones";模板文件为/etc/named.rfc1912.zones

下面看一个示例文件:

//声明正向查找区,区域名example.com
zone "example.com" IN {
        //区域类型:master表示主DNS服务器,slave表示辅助DNS服务器
        type master;
        file "example.com.zone";
        //是否允许动态更新
        allow-update { none; };
};
​
//声明反向查找区,指向192.168.200.0,以in-addr.arpa为后缀
zone "200.168.192.in-addr.arpa" IN {
      type master;
      file "100.200.168.192.zone";
      allow-update { none; };
};
3.3 区域数据库配置文件

每个区域的数据库配置文件包含该区域的资源记录,文件需保存到主配置文件设定的工作目录中。通过编辑这些文件,可以实现自定义域名解析、反向解析等功能。

1、根区域数据库配置文件

根区域数据库配置文件是/var/named/named.ca,此文件非常重要,它包含了13台根服务器的域名和IP地址信息。利用此文件,DNS服务器可以找到根DNS服务器,当BIND无法在其他地方找到顶级域名的解析记录时,会查询该文件中的根服务器信息。文件主要内容如下图:

2、正向解析区数据库配置文件

正向解析区数据库配置文件可以实现域名到IP地址的映射,定义了该区内的资源记录,配置时可以从模板文件/var/named/named.localhost复制后进行修改。

资源记录定义的语法如下:

name   [TTL(缓存生存期)]   IN   rr_type   value

示例文件:

$TTL 1D
@   IN  SOA example.com. root.example.com. (2024041301 1D 1H 1W 3H)
@   IN  NS  master.example.com.
@   IN  NS  slaver.example.com.
@   IN  MX  10  mail.example.com.
master.example.com.     IN  A   192.168.200.100
slaver.example.com.     IN  A   192.168.200.112
mail.example.com.       IN  A   192.168.20.112
finace.example.com.     IN  A   192.168.20.113
develop.example.com.    IN  A   192.168.20.114
www.example.com.        IN  CNAME   master.example.com.
ftp.example.com.        IN  CNAME   master.example.com.
dns.example.com.        IN  CNAME   master.example.com.

说明:

(1)第一行定义了TTL值为1天,可被后面所有资源记录全局继承。

(2)第二行定义了当前区域example.com.的SOA记录,@代表当前区域的名字,因为有特殊含义,所以后边不能用,例如root.example.com.则一个邮箱地址root@example.com.。IN表示后面的数据使用的是INTERNET标准,SOA表示资源记录类型,括号中是5个数据,分别表示serialrefreshretryexpireminimum的值。

serial:更新序列号。用于标示数据库的变换,可以在10位以内,如果存在辅助DNS服务器,建议每次更新完数据库,进行修改,可以使用格式yyyymmddnn表示,如2024041301,表示2024年4月13日第一次修改。

refresh:刷新时间。辅助DNS服务器根据此时间周期性的检查主DNS服务器的序列号是否改变,如果改变,则更新自己的数据库,默认为1天。

retry:重试时间。辅助DNS服务器从主DNS服务器更新数据库失败后,在此时间后重新尝试,默认为为1小时。

expire:过期时间。辅助DNS服务器在此时间内没能从主DNS服务器更新数据库,则该辅助DNS服务器上的数据库 会被认为无效,不再响应查询请求,为一周。

minimum:设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。最少缓存时间为3小时。

(3)第三行和第四行定义了当前域的两个名称服务器,即NS记录,至少定义一个。

(4)第五行定义了一条MX记录,其中10用于表示优先级,数字越小,优先级越高。

(5)第六行到第十行定义了5条A记录,用于正向解析。记录名称为FQDN名,也可以使用主机名代替。

(6)最后三行定义的是CNAME记录。

3、反向解析区配置文件

反向解析区数据库配置文件可以实现IP地址到域名的映射,主要定义了该区内的PTR记录,配置时可以从模板文件/var/named/named.loopback复制后进行修改。

示例文件:

$TTL 1D
@   IN  SOA @ root.example.com. (
                    2024041301  ; serial
                    1D          ; refresh
                    1H          ; retry
                    1W          ; expire
                    3H )        ; minimum
@   IN  NS  master.example.com.
@   IN  NS  slaver.example.com.
111 IN  PTR master.example.com.
112 IN  PTR slaver.example.com.
3.4 配置文件语法检查

配置文件都配置好之后,可以使用BIND提供的语法检查命令检查语法是否正确,当没有错误后,使用systemctl命令重启named服务,或者使用rndc reload命令重载配置。

1、检查查主配置文件语法

要检测 BIND 的主配置文件named.conf文件的语法是否正确,可以使用命令named-checkconf

例如

[root@server ~]# named-checkconf /etc/named.conf

2、检查区域数据库文件

使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。

语法:

named-checkzone [选项] [区域名] [区域文件名]

例如

[root@server]# named-checkzone example.com /var/named/example.com.zone
zone example.com/IN: loaded serial 2024041301
OK

四、DNS测试工具

4.1 nslookup

nslookup(Name Server Lookup)是一种网络管理命令,用于从 DNS 服务器查询域名、IP 或其他 DNS 记录信息。

nslookup 有两种工作模式:交互模式和非交互模式。

1、非交互模式

在非交互模式下,针对一个主机或域名执行单次查询,格式如下。

nslookup  域名或IP地址

例如:

[root@server ~]# nslookup www.baidu.com
Server:         192.168.200.100
Address:        192.168.200.100#53
​
Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 36.155.132.3
Name:   www.a.shifen.com
Address: 36.155.132.76

2、交互模式

在交互模式下,用户可以向域名服务器查询各类主机、域名的信息或者显示一个域的主机列表。在命令行下输入“nslookup”回车后,就进入交互模式。

下面举例说明nslookup的用法

[root@server ~]# nslookup
> server
Default server: 192.168.200.100
Address: 192.168.200.100#53
>
> www.baidu.com
Server:         192.168.200.100
Address:        192.168.200.100#53
​
Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 36.155.132.76
Name:   www.a.shifen.com
Address: 36.155.132.3
>
> set type=MX
> sina.com.cn
Server:         192.168.200.100
Address:        192.168.200.100#53
​
Non-authoritative answer:
sina.com.cn     mail exchanger = 10 freemx3.sinamail.sina.com.cn.
sina.com.cn     mail exchanger = 10 freemx1.sinamail.sina.com.cn.
sina.com.cn     mail exchanger = 10 freemx2.sinamail.sina.com.cn.
​
Authoritative answers can be found from:
.       nameserver = c.root-servers.net.
.       nameserver = j.root-servers.net.
.       nameserver = g.root-servers.net.
.       nameserver = e.root-servers.net.
.       nameserver = b.root-servers.net.
.       nameserver = a.root-servers.net.
.       nameserver = d.root-servers.net.
.       nameserver = h.root-servers.net.
.       nameserver = m.root-servers.net.
.       nameserver = k.root-servers.net.
.       nameserver = f.root-servers.net.
.       nameserver = l.root-servers.net.
.       nameserver = i.root-servers.net.
> exit
4.2 host

在Linux系统中,host命令用于进行域名查询。它允许用户通过输入域名或IP地址,获取与之相关的信息。

基本语法:

host [选项]  域名或IP地址
  • -a:显示所有的查询结果,包括与域名关联的IP地址、主机名等。

  • -t:指定查询类型,如A、AAAA、CNAME、MX等。

  • -c:显示域名的相关信息,如更新时间、注册人等。

  • -v:显示详细的查询过程和结果。

例如:

#查询域名对应的 IP 地址。
host www.baidu.com
#显示执行域名查询的详细信息。
host -v www.baidu.com
#查询域名的 MX 信息。
host -t MX www.baidu.com
#显示详细的 DNS 信息。
host -a www.baidu.com
#用谷歌的 DNS(8.8.8.8)来查百度主机的 IP。
host www.baidu.com 8.8.8.8
4.3 dig

dig 是一个DNS 查询工具,它会打印出 DNS 服务器的回应,主要用来从 DNS 服务器查询主机地址信息。

下面看几个简单用法示例,关于dig的更详细的用法,请大家自行翻阅资料。

1、查询对应域名的 IP

[root@server ~]# dig www.baidu.com
​
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22989
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 1
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.                 IN      A
​
;; ANSWER SECTION:
www.baidu.com.          63      IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       243     IN      A       36.155.132.76
www.a.shifen.com.       243     IN      A       36.155.132.3
​
;; AUTHORITY SECTION:
.                       86783   IN      NS      m.root-servers.net.
.                       86783   IN      NS      l.root-servers.net.
.                       86783   IN      NS      g.root-servers.net.
.                       86783   IN      NS      e.root-servers.net.
.                       86783   IN      NS      i.root-servers.net.
.                       86783   IN      NS      j.root-servers.net.
.                       86783   IN      NS      k.root-servers.net.
.                       86783   IN      NS      c.root-servers.net.
.                       86783   IN      NS      a.root-servers.net.
.                       86783   IN      NS      d.root-servers.net.
.                       86783   IN      NS      b.root-servers.net.
.                       86783   IN      NS      f.root-servers.net.
.                       86783   IN      NS      h.root-servers.net.
​
;; Query time: 62 msec
;; SERVER: 192.168.200.100#53(192.168.200.100)
;; WHEN: 六 4月 13 22:32:59 CST 2024
;; MSG SIZE  rcvd: 312

2、对目标 IP 进行反向解析查询

[root@server ~]# dig -x 192.168.200.100
​
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.200.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9800
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;100.200.168.192.in-addr.arpa.  IN      PTR
​
;; ANSWER SECTION:
100.200.168.192.in-addr.arpa. 86400 IN  PTR     master.example.com.
​
;; AUTHORITY SECTION:
200.168.192.in-addr.arpa. 86400 IN      NS      slaver.example.com.
200.168.192.in-addr.arpa. 86400 IN      NS      master.example.com.
​
;; ADDITIONAL SECTION:
master.example.com.     86400   IN      A       192.168.200.100
slaver.example.com.     86400   IN      A       192.168.200.112
​
;; Query time: 0 msec
;; SERVER: 192.168.200.100#53(192.168.200.100)
;; WHEN: 六 4月 13 22:36:09 CST 2024
;; MSG SIZE  rcvd: 156
3、查询目标域名的 MX 记录
[root@server ~]# dig -t MX sina.com.cn
​
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t MX sina.com.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57476
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 1
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sina.com.cn.                   IN      MX
​
;; ANSWER SECTION:
sina.com.cn.            406     IN      MX      10 freemx3.sinamail.sina.com.cn.
sina.com.cn.            406     IN      MX      10 freemx1.sinamail.sina.com.cn.
sina.com.cn.            406     IN      MX      10 freemx2.sinamail.sina.com.cn.
​
;; AUTHORITY SECTION:
.                       86519   IN      NS      b.root-servers.net.
.                       86519   IN      NS      m.root-servers.net.
.                       86519   IN      NS      i.root-servers.net.
.                       86519   IN      NS      e.root-servers.net.
.                       86519   IN      NS      c.root-servers.net.
.                       86519   IN      NS      a.root-servers.net.
.                       86519   IN      NS      l.root-servers.net.
.                       86519   IN      NS      d.root-servers.net.
.                       86519   IN      NS      f.root-servers.net.
.                       86519   IN      NS      j.root-servers.net.
.                       86519   IN      NS      k.root-servers.net.
.                       86519   IN      NS      h.root-servers.net.
.                       86519   IN      NS      g.root-servers.net.
​
;; Query time: 52 msec
;; SERVER: 192.168.200.100#53(192.168.200.100)
;; WHEN: 六 4月 13 22:37:23 CST 2024
;; MSG SIZE  rcvd: 332

4、查询目标域名的 A 记录

[root@server ~]# dig -t a www.example.com
​
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t a www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6264
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
​
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.example.com.               IN      A
​
;; ANSWER SECTION:
www.example.com.        86400   IN      CNAME   master.example.com.
master.example.com.     86400   IN      A       192.168.200.100
​
;; AUTHORITY SECTION:
example.com.            86400   IN      NS      master.example.com.
example.com.            86400   IN      NS      slaver.example.com.
​
;; ADDITIONAL SECTION:
slaver.example.com.     86400   IN      A       192.168.200.112
​
;; Query time: 0 msec
;; SERVER: 192.168.200.100#53(192.168.200.100)
;; WHEN: 六 4月 13 22:38:16 CST 2024
;; MSG SIZE  rcvd: 132

  • 32
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hongmayi3753

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值