在debian上configurationBIND DNS

我正在尝试configurationconfigurationBIND,以便在本地Debian机器上使用,我将其用作开发和testing环境。

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

对于这个问题,假设我想创build一个名为example.com的域,我可以从运行BIND的同一台机器上访问我的本地networking。

这是我迄今为止所做的:

在/ 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,并使用命令/etc/init.d/bind9 restart启动BIND。

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

我究竟做错了什么?


为了采取AlexD的build议,我在这里显示的/etc/resolv.conf中的所有其他指令之前添加了nameserver 127.0.0.1

 # 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 

现在看来,为resolv.conf添加nameserver 127.0.0.1指令实际上导致example.comparsing到我的BIND服务器,但仍有问题。

想法?

您的原始configuration:

 $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. 

(你是否注意到我也改变了序列号?对于你在configuration上所做的每一个改变,你都需要改变序列号。它的格式是YEARMMDD和一个两位数的ID,从01开始,每当你改变的时候你需要+1 。举个例子,如果你今天在configuration上做了第二个改动,你应该把它改成2011101802,第三个改变应该是2011101803,或者如果你明天要改变,应该是2011101901等等,这非常重要! )

另外请确保在您的networking服务器上有一个虚拟主机configuration为example.com

检查你的/etc/resolv.conf指向你的本地BIND并且首先有nameserver 127.0.0.1条目。 如果你在Gnome上使用debian,Network Manager可能会覆盖resolv.conf。 一个解决scheme就是通过GUI将名称服务器添加到networkingpipe理器,但要确保它是列表中的第一个。

检查你的/etc/resolv.conf指向你的本地BIND并且首先有nameserver 127.0.0.1条目。 如果您希望能够使用您的example.com域,则还应将本地networking客户端configuration为使用本地BINDparsing域名。

要检查您的BIND是否正确处理example.com ,请执行dig @127.0.0.1 example.com 。 要检查在/etc/resolv.conf指定的默认parsing器,执行dig example.com

以下命令可能会有所帮助

检查指定的区域。

 named-checkconf -z 

转储parsing后的configuration并对其进行分页,以便validation。

 named-checkconf -p | less 

检查您的区域文件

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

同时检查重新启动绑定时生成的日志消息。 他们应该告诉你什么是和未被加载。 在Debian / Ubuntu上,这些将被logging到/var/log/daemon.log

您应该可以使用重新加载而不是重新启动加载您的更改。

除了dig你可以使用host命令来parsing名称。

 host -a example.com localhost 

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

我也评论了example.com. IN A 127.0.0.1 example.com. IN A 127.0.0.1区域文件/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行有一个错误,其中包含CNAMElogging: example.com. IN CNAME localhost. example.com. IN CNAME localhost. 。 我将该行改为www.example.com. IN CNAME localhost. www.example.com. IN CNAME localhost. 通过添加“www”。 在“example.com”之前,区域文件已成功加载。 这是我再次运行named-checkzone example.com /etc/bind/db.example.com时显示的内容:

 zone example.com/IN: loaded serial 2011101601 OK 

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

 ; <<>> 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”的情况下工作。 请留下评论。

感谢所有的帮助。