我在 Ubuntu 服务器 (Linux) 上设置了本地 BIND/DNS 服务。它运行正常,并允许我接收针对我们在 Apache Web 服务中设置的多个主机名的新域请求。因此,我可以托管 example1.com、example2.com 等网站,只要这些域名的注册商指向此服务器上的我的域名服务器 IP。
当我查看 /etc/resolv.conf 时,它显示“名称服务器 127.0.0.1”。
一切都很好,只是偶尔我的服务器无法 ping 通别人的全新域名(两天前创建的),而在其他计算机上却可以 ping 通。但是当我重新启动 Ubuntu 服务器时,它又恢复了,现在可以 ping 通新域名了。
我们的 BIND 配置有什么问题?
答案1
您需要进行调试,下次主机名没有响应时,通过发出命令检查问题是否实际上是 DNS 解析问题
dig domain_name.ext @127.0.0.1
从服务器,根据输出,您将确定是否收到响应,如果没有,则需要查看日志以查看绑定是否仍在运行。
答案2
你的系统操作员没有给你解决方案,他给了你一个解决方法。
解决方案将确定为什么您的本地递归服务器有时不工作,然后修复它。尝试 @topdog 的建议来证明是本地 DNS 服务器出了问题。如果是,只需重新启动 BIND - 而不是整个服务器!
无论如何,这听起来像是负面缓存效果(参见 RFC 2308)。如果(且仅当)您之前查找过新名称,BIND 将记住它不存在,并从其否定答案缓存中返回 NXDOMAIN。
否定答案的缓存过期时间由两个因素控制:
minttl
来自父域的 SOA 记录的字段max-ncache-ttl
来自您的设置bind.conf
。
后一种设置将 SOA 中收到的任何值限制为最大值,而 BIND 的默认值为 3 小时。您的设置是什么?
无论如何,混合递归和权威性同一服务器上的 DNS 进程不是最佳实践。
如果你确实想拥有相同的递归和权限系统,将它们作为两个单独的进程运行。递归服务器只监听环回接口(127.0.0.1),而面向公众权威性服务器仅为其具有权威的域提供服务。
答案3
我的系统操作员终于跟我说我需要做的就是编辑我的 /etc/resolv.conf 并在“nameserver 127.0.0.1”之前添加一个额外的条目,所以,我的 /etc/resolv.conf 现在看起来像这样:
# 8.8.8.8 is Google's free DNS
nameserver 8.8.8.8
nameserver 127.0.0.1
这将让我的服务器解决它自己无法处理的 DNS 问题。