BIND的配置

本文详细记录了在CentOS 5系统上安装和配置DNS服务器的过程,包括所需软件包的安装、配置文件的修改及权限调整等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天研究Sendmail未果,原因是没有DNS服务器来支持Mail服务器的A记录或者MX记录(其实更主要的原因是因为自己那段时间里在RO),所以必需要一台DNS服务器了。但是又从来没有接触过,没关系,都是从新的接触的,我打算自己完整地搞一下。这样做可能会比较累,但是,每一次都收获到额外的东西,那才是宝贵的,这次也不例外。
 
简单交代一下Linux下安装DNS服务器所需要的包,发行版本还是CentOS5
bind-libs-9.3.3-7.el5 
bind-9.3.3-7.el5 
bind-utils-9.3.3-7.el5
caching-nameserver-9.3.3-7.el5  (这个包是DNS配置文件模版的包,一开始我没有装这个包,然后很郁闷)
如果没有装caching-nameserver这个包的话,在/etc路径下面是没有相应的DNS配置文件的。装完这个包后就能够看到 /etc/named.caching-nameserver.conf 这个配置文件,而没有见到 /etc/named.conf 这个文件。
 
 
直接运行的话(没有/etc/named.conf,只有/etc/named.caching-nameserver.conf)看看效果,会不会起来。
[root@sample etc]# service named start
Starting named:                                            [  OK  ]
结果能够起来,当时就有一个疑问:“是不是/etc/named.caching-nameserver.conf也能做启动named服务器的配置文件呢?会不会由于版本问题,那么原来的/etc/named.conf会不会还是有效呢?”
 
 
怀着这样的疑问,我停止了named的服务,将配置文件改名。
[root@sample etc]# mv /etc/named.caching-nameserver.conf /etc/named.conf
然后重新启动服务,竟然FAILD了。
接着再mv回去,再启动服务,竟然也是FAILD。觉得疑惑了。来回改都不能让服务启动。
 
 
突然想起来王神的一句教诲“当没有办法立即解决系统问题的时候,记得看日志”。有道理,日志里一定记录了为什么不能启动named服务的信息。
于是使用了 tail -n 30 /var/log/messages 命令查看系统日志消息。
其中看到这段:
-----------------------------------------------
ul 10 12:56:13 sample named[3804]: loading configuration from '/etc/named.caching-nameserver.conf' (第一次顺利启动namd服务的时候读的配置文件是/etc/named.caching-nameserver.conf这个文件的)
Jul 10 12:56:13 sample named[3804]: listening on IPv6 interface lo, ::1#53
Jul 10 12:56:13 sample named[3804]: listening on IPv4 interface lo,
127.0.0.1#53
Jul 10 12:56:13 sample named[3804]: command channel listening on 127.0.0.1#953
Jul 10 12:56:13 sample named[3804]: command channel listening on ::1#953
Jul 10 12:56:13 sample named[3804]: zone 0.in-addr.arpa/IN/localhost_resolver:
loaded serial 42
Jul 10 12:56:13 sample named[3804]: zone
0.0.127.in-addr.arpa/IN/localhost_resolver: loaded serial 1997022700
Jul 10 12:56:13 sample named[3804]: zone
255.in-addr.arpa/IN/localhost_resolver: loaded serial 42
Jul 10 12:56:13 sample named[3804]: zone
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/local
host_resolver: loaded serial 1997022700
Jul 10 12:56:13 sample named[3804]: zone localdomain/IN/localhost_resolver:
loaded serial 42
Jul 10 12:56:13 sample named[3804]: zone localhost/IN/localhost_resolver:
loaded serial 42
Jul 10 12:56:13 sample named[3804]: running
(以上是第一此成功启动named服务的日志)
 
Jul 10 12:56:16 sample named[3804]: shutting down: flushing changes
Jul 10 12:56:16 sample named[3804]: stopping command channel on 127.0.0.1#953
Jul 10 12:56:16 sample named[3804]: stopping command channel on ::1#953
Jul 10 12:56:16 sample named[3804]: no longer listening on ::1#53
Jul 10 12:56:16 sample named[3804]: no longer listening on 127.0.0.1#53
(这段是我第一关闭named服务的日志)

Jul 10 12:56:52 sample named[3881]: starting BIND 9.3.3rc2 -u named
Jul 10 12:56:52 sample named[3881]: found 1 CPU, using 1 worker thread
Jul 10 12:56:52 sample named[3881]: loading configuration from '/etc/named.conf'
Jul 10 12:56:52 sample named[3881]: none:0: open: /etc/named.conf: permission denied
Jul 10 12:56:52 sample named[3881]: loading configuration: permission denied
Jul 10 12:56:52 sample named[3881]: exiting (due to fatal error)
(这段是改名为/etc/named.conf配置文件后,启动服务失败的日志信息,很明显,这里有个权限问题permission denied。但是这里确定了一点,这次启动服务,是连接/etc/named.conf这个配置文件的)
 
Jul 10 12:57:34 sample named[3913]: starting BIND 9.3.3rc2 -u named -c
/etc/named.caching-nameserver.conf
Jul 10 12:57:34 sample named[3913]: found 1 CPU, using 1 worker thread
Jul 10 12:57:34 sample named[3913]: loading configuration from '/etc/named.caching-nameserver.conf'
Jul 10 12:57:34 sample named[3913]: none:0: open: /etc/named.caching-nameserver.conf: permission denied
Jul 10 12:57:34 sample named[3913]: loading configuration: permission denied
Jul 10 12:57:34 sample named[3913]: exiting (due to fatal error)
(这段是又改回名/etc/named.caching-nameserver.conf配置文件后,启动服务失败的日志信息,这里也有权限问题permission denied。但是这次启动服务,是连接/etc/caching-nameserver这个配置文件的)
--------------------------------------------------------------------------------------------
 
思路:
既然是权限问题,那么一定涉及到服务启动的用户。一般来说Linux下的服务启动用户会有两种:一种就是root自己支撑的(较少);另一种就是特定用户启动和支撑服务(较多),这种用户一般不能登陆系统,在passwd中结尾是nologin标记。
然后顺着这个思路,查看了下/etc/passwd信息
[root@sample ~]# less /etc/passwd
named:x:25:25:Named:/var/named:/sbin/nologin  (果然是有专门的named用户)
再查看下/etc/group信息
[root@sample ~]# less /etc/group
named:x:25:  (说明named有自己的组gid为25,最重要的是表达了named这个用户并不在root组里)
 
 
查看文件权限
[root@sample etc]# ls -l|grep named
-rw-r-----  1 root   named     1100 Mar 14 08:10 named.caching-nameserver.conf.backup
-rw-r-----  1 root   root         1100 Jul 10 12:59 named.conf  (果然,named这个用户是无权读取/etc/named.conf文件的。只能root本身或者root组用户可以读。)
-rw-r--r--  1 root   named     4273 Jul 10 12:24 named.conf.backup
-rw-r-----  1 root   named      955 Mar 14 08:10 named.rfc1912.zones
-rw-r--r--  1 root   named      113 Jun 26 11:58 rndc.key
 
 
更改权限
[root@sample etc]# chown named.named named.conf  (将/etc/named.conf文件的所有权改成named用户)
[root@sample etc]# ls -l|grep named
-rw-r-----  1 root   named     1100 Mar 14 08:10  named.caching-nameserver.conf.backup
-rw-r-----  1 named  named     1100 Jul 10 12:59 named.conf  (named用户或者named同组用户可以访问/etc/named.conf文件了)
-rw-r--r--  1 root   named     4273 Jul 10 12:24 named.conf.backup
-rw-r-----  1 root   named      955 Mar 14 08:10 named.rfc1912.zones
-rw-r--r--  1 root   named      113 Jun 26 11:58 rndc.key
[root@sample etc]# service named start  (启动服务)
Starting named:                                            [  OK  ]
[root@sample etc]# service named stop  (关闭服务)
Stopping named:                                            [  OK  ]
更改了权限,named用户可以访问配置文件的时候,服务就可以顺利启动和关闭了。
 
现在我们不需要/etc/named.conf配置文件,而是使用/etc/named.caching-nameserver.conf配置文件,看看更改了权限之后是不是会让服务根据这个启动。
[root@sample etc]# rm -fr named.conf  (删除掉/etc/named.conf文件)
[root@sample etc]# ls -l|grep named   
-rw-r-----  1 root   named     1100 Mar 14 08:10 named.caching-nameserver.conf.backup (备份文件)
-rw-r--r--  1 root   named     4273 Jul 10 12:24 named.conf.backup (备份文件)
-rw-r-----  1 root   named      955 Mar 14 08:10 named.rfc1912.zones
-rw-r--r--  1 root   named      113 Jun 26 11:58 rndc.key
[root@sample etc]# mv named.caching-nameserver.conf.backup named.caching-nameserver.conf (将named.caching-nameserver.conf的备份文件改名还原成可用的配置文件)
[root@sample etc]# ls -l|grep named
-rw-r-----  1 root   named     1100 Mar 14 08:10 named.caching-nameserver.conf (root用户以及named组用户可以访问)
-rw-r--r--  1 root   named     4273 Jul 10 12:24 named.conf.backup
-rw-r-----  1 root   named      955 Mar 14 08:10 named.rfc1912.zones
-rw-r--r--  1 root   named      113 Jun 26 11:58 rndc.key
[root@sample etc]# service named start       (启动服务)
Starting named:                                            [  OK  ]
[root@sample etc]# service named stop       (关闭服务)
Stopping named:                                            [  OK  ]
更改了适当的权限之后,named服务也可以通过连接/etc/named.caching-nameserver.conf这个配置文件来启动。
 
 
思考2:
现在知道了之前服务故障是由于对named服务的配置文件的权限没有做准确的设定而造成的。但是,当在权限适当的情况下,而且/etc/named.conf和/etc/named.caching-nameserver同时存在并同时可用的时候,named这个服务到底会优先连接哪个配置文件呢?
 
解决这个问题的方法是:还是看日志。
日志当中会记录服务启动时连接的配置文件名。当两个可用的配置文件都存在的时候,将服务运行起来,日志里记录连接的配置文件就是优先连接的配置文件了。
 
经过一番处理,现在/etc目录下和named有关的文件如下
[root@sample etc]# ls -l|grep named
-rw-r-----  1 root   named     1100 Mar 14 08:10 named.caching-nameserver.conf  (可用的配置文件)
-rw-r-----  1 root   named     1100 Jul 10 13:11 named.conf  (可用的配置文件)
-rw-r--r--  1 root   named     4273 Jul 10 12:24 named.conf.backup
-rw-r-----  1 root   named      955 Mar 14 08:10 named.rfc1912.zones
-rw-r--r--  1 root   named      113 Jun 26 11:58 rndc.key
启动服务
[root@sample etc]# service named start
Starting named:                                            [  OK  ]
接着赶紧查看日志
[root@sample etc]# tail -n 30 /var/log/messages
----------------------------------------------------
Jul 10 13:12:20 sample named[4273]: starting BIND 9.3.3rc2 -u named
Jul 10 13:12:20 sample named[4273]: found 1 CPU, using 1 worker thread
Jul 10 13:12:20 sample named[4273]: loading configuration from '/etc/named.conf' 
(说明当/etc/named.conf和/etc/named.caching-nameserver.conf两个配置文件同时可用的时候,/etc/named.conf优先被系统读取)
Jul 10 13:12:20 sample named[4273]: listening on IPv6 interface lo, ::1#53
Jul 10 13:12:20 sample named[4273]: listening on IPv4 interface lo, 127.0.0.1#53
Jul 10 13:12:20 sample named[4273]: command channel listening on 127.0.0.1#953
Jul 10 13:12:20 sample named[4273]: command channel listening on ::1#953
Jul 10 13:12:20 sample named[4273]: zone 0.in-addr.arpa/IN/localhost_resolver: loaded serial 42
Jul 10 13:12:20 sample named[4273]: zone 0.0.127.in-addr.arpa/IN/localhost_resolver: loaded serial 1997022700
Jul 10 13:12:20 sample named[4273]: zone 255.in-addr.arpa/IN/localhost_resolver: loaded serial 42
Jul 10 13:12:20 sample named[4273]: zone 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/localhost_resolver: loaded serial 1997022700
Jul 10 13:12:20 sample named[4273]: zone localdomain/IN/localhost_resolver: loaded serial 42
Jul 10 13:12:20 sample named[4273]: zone localhost/IN/localhost_resolver: loaded serial 42
Jul 10 13:12:20 sample named[4273]: running
---------------------------------------------------------------------------------------------------------------
 
由此,完全知道了named服务是可以根据什么配置文件启动的,并且也知道了当两个配置文件同时存在的时候系统会优先提取哪个。更重要的是,从日志当中分析出了故障的原因。最重要的是,养成了分析日志的习惯,听说高级系统工程师都有这样的习惯= =

参考
鸟哥的私房菜http://linux-vbird.bluedata.org/linux_server/0350dns.htm

<think>好的,我需要帮助用户解决关于BIND配置的问题。用户想要一个配置教程或示例,所以我得先回顾他们提供的引用内容,看看有哪些相关信息可以利用。 首先,引用[1]提到了BIND的主配置文件named.conf的结构,以及如何设置选项如allow-query、递归查询和DNSSEC。还有正向解析区域的配置步骤,包括创建区域声明和区域文件。引用[2]补充了区域文件的创建方法,比如复制模板文件并进行编辑。引用[4]和[5]则涉及安装BIND配置文件的语法检查,这对用户来说可能很重要,尤其是在验证配置是否正确时。 接下来,我需要整理出一个清晰的步骤指南。用户可能需要从安装开始,然后配置主文件,设置选项,添加区域文件,最后测试配置。同时,应该包含具体的示例,比如正向解析的配置,这样用户可以直接参考。另外,注意事项比如关闭递归查询和权限设置也是关键点,需要强调。 还需要检查是否有遗漏的部分,比如反向解析配置,虽然用户没有特别提到,但作为完整的教程可能需要简要提及。此外,确保所有命令和路径正确,比如创建目录、使用sudo权限等,避免用户执行时出错。 最后,生成相关问题时要围绕用户可能遇到的后续问题,比如性能优化、安全性或错误排查,这样可以帮助他们进一步学习。同时,确保引用正确,每个步骤对应的引用标注自然,不显得突兀。</think>### BIND 配置教程(Ubuntu 环境) #### 一、安装 BIND ```bash sudo apt update sudo apt install bind9 ``` 验证安装:`named -v` 显示版本即成功(示例输出:`BIND 9.18.18-0ubuntu0.22.04.1-Ubuntu`)[^1] --- #### 二、核心配置结构 1. **主配置文件** `/etc/bind/named.conf` 包含以下关键引用: ```bash include "/etc/bind/named.conf.options"; # 全局选项 include "/etc/bind/named.conf.local"; # 自定义区域声明 include "/etc/bind/named.conf.default-zones"; # 默认区域 ``` 2. **选项配置文件** `/etc/bind/named.conf.options` 示例: ```bash options { directory "/var/cache/bind"; # 工作目录 allow-query { 192.168.1.0/24; }; # 仅允许内网查询 recursion no; # 关闭递归查询(权威DNS建议) dnssec-validation auto; # 启用DNSSEC验证 listen-on port 53 { 192.168.1.10; }; # 监听指定IP listen-on-v6 { none; }; # 禁用IPv6 }; ``` [^1] --- #### 三、正向解析配置示例(域名→IP) 1. **声明区域** 在 `/etc/bind/named.conf.local` 添加: ```bash zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; # 区域文件路径 allow-transfer { 192.168.1.20; }; # 从服务器IP }; ``` 2. **创建区域文件** ```bash sudo mkdir /etc/bind/zones sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com # 复制模板 sudo nano /etc/bind/zones/db.example.com ``` 编辑内容示例: ```bash $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2024010101 ; 序列号 3600 ; 刷新时间 1800 ; 重试时间 604800 ; 过期时间 86400 ; 最小TTL ) @ IN NS ns1.example.com. ns1 IN A 192.168.1.10 www IN A 192.168.1.100 mail IN A 192.168.1.200 ``` [^2] --- #### 四、验证与重启服务 1. **语法检查** ```bash sudo named-checkconf # 检查主配置 sudo named-checkzone example.com /etc/bind/zones/db.example.com ``` 2. **重启 BIND** ```bash sudo systemctl restart bind9 ``` --- #### 五、注意事项 1. **安全建议** - 使用 `allow-query` 限制查询范围 - 权威DNS服务器建议关闭 `recursion` 防止DNS放大攻击[^1] 2. **反向解析配置** 类似正向解析,需定义 `zone "1.168.192.in-addr.arpa"` 并创建反向区域文件[^5] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值