在 debian 上配置 BIND DNS

在 debian 上配置 BIND DNS

我正在尝试配置 BIND 以供我的本地 Debian 机器使用,我将使用它作为开发和测试环境。

首先,我使用的是 Debian 6.x [Squeeze] 和 BIND 9。BIND 服务器是在安装 Debian 期间自动设置的。

为了回答这个问题,假设我想创建一个名为示例.com我将能够从运行 BIND 的同一台机器和我的本地网络进行访问。

以下是我目前所做的工作:

在 /etc/bind named.conf.local (包含在 name.conf 中)中我输入了以下内容:

zone "cms1.com" {
    type master;
    file "/etc/bind/db.example.com";
};

在 /etc/bind/db.example.com 中我输入了以下内容:

$TTL    3600
@   IN  SOA example.com. admin.example.com. (
            2011101601  ; Serial
            3600        ; Refresh 1h
            60      ; Retry 1m
            86400       ; Expire 1d
            600 )       ; Negative Cache TTL 1h
;
@   IN  NS  localhost.

;
example.com.    IN CNAME localhost.
example.com.    IN A 127.0.0.1

请注意,我将名称服务器设置为 localhost。我不知道这是对还是错。

然后我向 Apache 添加了适当的虚拟主机指令并使用命令重新启动 BIND /etc/init.d/bind9 restart

但是,当我 ping 或浏览 example.com 时,我访问的是互联网上的 example.com,而不是我机器上的 example.com。

我究竟做错了什么?


为了听取 AlexD 的建议,我nameserver 127.0.0.1在 /etc/resolv.conf 中的所有其他指令之前添加了如下所示的内容:

# Generated by NetworkManager
nameserver 127.0.0.1
domain cm.flowja.com
search cm.flowja.com
nameserver 65.183.0.76
nameserver 65.183.0.86

其余指令由 Debian 自动生成。

这是我编辑 resolve.conf 并重新启动 BIND 后的响应。

; <<>> DiG 9.7.3 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 60115
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.           IN  A

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Oct 16 16:06:29 2011
;; MSG SIZE  rcvd: 29

现在看来,nameserver 127.0.0.1向 resolv.conf 添加指令确实导致 example.com 解析到我的 BIND 服务器,但仍然出现问题。

有想法吗?

答案1

您的原始配置:

$TTL    3600
@   IN  SOA example.com. admin.example.com. (
            2011101601  ; Serial
            3600        ; Refresh 1h
            60      ; Retry 1m
            86400       ; Expire 1d
            600 )       ; Negative Cache TTL 1h
;
@   IN  NS  localhost.

;
example.com.    IN CNAME localhost.
example.com.    IN A 127.0.0.1

应改为:

$TTL    3600
@   IN  SOA example.com. admin.example.com. (
            2011101801  ; Serial
            3600        ; Refresh 1h
            60      ; Retry 1m
            86400       ; Expire 1d
            600 )       ; Negative Cache TTL 1h
;
@   IN  NS  ns1.example.com.

;
example.com.        IN A 127.0.0.1
ns1.example.com.    IN A 127.0.0.1
www.example.com.    IN CNAME example.com.

(你注意到我也更改了序列号了吗?每次更改配置时都需要更改序列号。它的格式是 YEARMMDD 和一个从 01 开始的两位数 ID,每次更改时都需要 +1。例如,如果你今天第二次更改配置,则应将其更改为 2011101802,第三次更改时应将其更改为 2011101803,或者如果你明天要进行更改,则应将其更改为 2011101901 等。这非常重要!)

还要确保在你的网络服务器上有一个配置为 example.com 的虚拟主机

检查您的 /etc/resolv.conf 是否指向您的本地 BIND 并且首先包含名称服务器 127.0.0.1 条目。如果您使用的是带 Gnome 的 Debian,则网络管理器可能会覆盖 resolv.conf。一种解决方案是通过 GUI 将名称服务器添加到网络管理器,但请确保它位于列表中的第一个。

答案2

首先检查您的/etc/resolv.conf指向本地 BIND 并有nameserver 127.0.0.1条目。如果您希望能够使用您的 example.com域,还应将本地网络客户端配置为使用本地 BIND 来解析域名。

要检查您的 BIND 是否example.com正确处理执行。要检查执行dig @127.0.0.1 example.com中指定的默认解析器/etc/resolv.confdig example.com

答案3

以下命令可能会有所帮助

检查指定的区域。

named-checkconf -z

转储已解析的配置并对其进行分页,以便您可以验证它。

named-checkconf -p | less

检查您的区域文件

named-checkzone example.com /etc/bind/db.example.com

还要检查重新启动 bind 时生成的日志消息。它们应该会告诉您正在加载和未加载的内容。在 Debian/Ubuntu 上,这些将记录到/var/log/daemon.log

您应该能够使用重新加载而不是重新启动来加载您的更改。

此外,dig您还可以使用host命令来解析名称。

host -a example.com localhost

答案4

我将其添加nameserver 127.0.0.1为 resolv.conf 文件中的第一个名称服务器。

我还在区域文件 /etc/bind/db.example.com 中进行了注释example.com. IN A 127.0.0.1,因为我不会使用基于 IP 的名称服务器。

运行之后named-checkzone example.com /etc/bind/db.example.com我得到了以下结果:

dns_master_load: /etc/bind/db.example.com:12: example.com: CNAME and other data
dns_master_load: /etc/bind/db.example.com:12: example.com: CNAME and other data
zone example.com/IN: loading from master file /etc/bind/db.example.com failed: CNAME and other data
zone example.com/IN: not loaded due to errors.

这表明第 12 行有错误,该行包含 CNAME 记录:example.com. IN CNAME localhost.。我www.example.com. IN CNAME localhost.通过在“example.com”之前添加“www.”将该行更改为,然后区域文件成功加载。这是我named-checkzone example.com /etc/bind/db.example.com再次运行时显示的内容:

zone example.com/IN: loaded serial 2011101601
OK

如果我运行dig example.com它,它会成功找到区域文件。结果如下:

; <<>> DiG 9.7.3 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51336
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.           IN  A

;; AUTHORITY SECTION:
example.com.        600 IN  SOA example.com. admin.example.com. 2011101601 3600 60 86400 600

;; Query time: 12 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Oct 17 02:17:49 2011
;; MSG SIZE  rcvd: 71

我现在可以使用“www.example.com”访问该网站。但是,如果我省略“www”,它就不起作用了 - 这是一个独立但相关的问题。如果您可以指导我如何在没有“www”的情况下使其正常工作,请发表评论。

谢谢大家的帮助。

相关内容