我通过 O'Reilly 的书阅读了一些有关 DNS 和 BIND 的必备知识。我的目标是拥有一个本地 DNS 服务器(即 seldon.foundation),它可以解析本地名称(即 *.foundation),但将其余内容转发给 OpenDNS 或 Google。
- 我的区域文件:
$TTL 3h foundation. IN SOA seldon.foundation. avery.foundation.com. ( 1 ; Serial 3h ; Refresh after 3 hours 1h ; Retry after 1 hour 1w ; Expire after 1 week 1h ; Negative caching TTL of 1 hour ) ; ; Name servers ; foundation. IN NS seldon.foundation. ; ; Addresses for the canonical names ; localhost.foundation. IN A 127.0.0.1 seldon.foundation. IN A 192.168.1.151 ; ; Aliases ; dns.foundation. IN CNAME seldon.foundation.
- 我的named.conf.local:
zone "foundation" in { type master; file "db.foundation"; }; zone "1.168.192.in-addr.arpa" in { type master; file "db.192.168.1"; };
在我重新启动 bind 之后:sudo service bind9 restart
我知道它会加载文件(并且加载时没有错误),因为我检查了系统日志。但是当我执行 a 时,dig seldon.foundation
我没有得到预期的结果。
resolv.conf
有两个 IP 地址,但文件中有一条注释说不要手动编辑该文件。我现在该怎么办?
答案1
回答这个问题的挑战部分在于知道要查看哪些文档。特别是,Ubuntu 12.04(我正在使用服务器发行版)的工作方式与named/bind的文档建议的方式略有不同。我花了很多时间调整不需要调整的东西。事不宜迟:
- 首先阅读有关 DNS 和 BIND 的资料。O'Reilley 的《DNS 和 BIND》一书的前几章非常精彩。网络上的很多示例都使用了缩写语法,在我看来,它不如较长的语法那么清晰。
- 编辑
/etc/bind/named.conf.local
。如果您查看我的 pastebin 文件,您就会明白我是如何设置自己的网络的。同样,如果您不明白那里发生了什么,请阅读更多有关 DNS 和 BIND 的信息(或者在这里或在 serverfault.com 上询问一些更简单的问题,专门解决您不明白的问题)。 - 将您的区域文件放在 中
/var/cache/bind
。如果您查看/etc/bind/named.conf.options
,您将看到查找区域文件的目录位于/var/cache/bind
。别介意这个目录 (/etc/bind/
) 中到处都是区域文件。我不明白为什么一些区域文件在这里被拾取,但任何用户定义的区域文件都必须位于/var/cache/bind
。我把这个问题留给比我更有经验的巫师来解释。 - 将适当的DNS转发地址添加到
named.conf.options
。这将允许您对子网无法处理的域进行合理的名称解析。您可以通过取消注释带有“转发器”的行来查看在哪里添加它(如果您使用的是 Ubuntu)。添加您要使用的 DNS 机器的 IP 地址。确保用分号分隔它们。 - 添加
127.0.0.1
到 resolv.conf。这很棘手,因为如果你打开它,/etc/resolv.conf
你会看到一条提示,告诉你不要编辑此文件。你需要做的是按照这里的建议去做:Stéphane 于 12.04 介绍 DNS。编辑该文件,并通过在文件末尾/etc/resolvconf/resolv.conf.d/head
输入您的本地主机,然后输入换行符。nameserver 127.0.0.1
- 使用 重新更新 resolv.conf
resolvconf -u
。此命令将使用您在 中指定的新配置重置 resolv.confresolv.conf.d/head
。 dig seldon.foundation
使用或其他适合您网络的方式重新测试。您应该在底部的服务器显示环回地址(即 127.0.0.1)。
感谢@Shane Madden 为我提供足够的线索以便继续前进。