我正在尝试配置 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.conf
dig 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”的情况下使其正常工作,请发表评论。
谢谢大家的帮助。