我在 Linux 机器(Ubuntu 10.04.2)上使用 BIND 9.7.0-P1。
我想设置 BIND 服务器来将所有外部未解析的 DNS 查询解析到给定的内部主机。这可能吗?如何实现?
我尝试将转发器设置为:
forwarders {10.0.1.2; };
但这并没有什么帮助。
答案1
使用 BIND 无法实现 NXDOMAIN 劫持。可以使用 PowerDNS Recursor lua 脚本来实现。Ubuntu 10.04 存储库中有一个 PowerDNS Recursor 包,它支持lua 脚本功能。
正如其他人所说,NXDOMIAN 劫持可能会产生严重后果,您在实施之前应该了解潜在的问题。
答案2
转发器选项必须位于选项块或区域块中。从简短的摘录中,我无法看出这两个条件是否都得到满足。
显然,转发器上必须运行 DNS 服务,它可以解析查询或转发到另一台 DNS 服务器。此外,必须配置该 DNS 服务器以响应来自第一台 DNS 服务器的查询。如果您打开 Ubuntu 计算机的 shell 并运行
dig what.ever.domain @10.0.1.2
如果超时,则表示 10.0.1.2 没有回答来自 Ubuntu 机器的查询。
答案3
如果您所说的“将所有未解析的 DNS 查询解析到给定主机”是指 DNS 劫持(即服务器以指向该主机的记录进行响应,而它原本会以 NXDOMAIN 状态进行响应以表明查找失败),那么我认为这并不bind
支持开箱即用。以这种方式劫持本应为 NXDOAIN 响应的 ISP 可能使用了其他东西或修补了自定义版本以添加该功能。
NXDOMAIN 劫持通常不受欢迎,因为它会破坏很多东西。请参阅http://en.wikipedia.org/wiki/DNS_hijacking了解更多详情。
该forwarders
指令指示bind
执行递归查询时要查找的位置 - 如果此服务器被要求提供其本地没有记录的域,它会指定应查询的其他 DNS 服务器。当所有查找(本地和通过其他主机)都找不到匹配记录时,它不会控制行为。
答案4
请不要这样做,这会产生严重后果。我知道这只适用于您的内部网络;但是,它仍然会破坏许多东西。请记住,您正在返回实时服务器的 IP,因此许多应用程序和服务可能会认为他们尝试访问的东西确实可用,但实际上并非如此。虽然这看起来微不足道,但请考虑这样一种情况:应用程序试图将数据发送到远程服务器,并看到它在您的网络后面启动;但实际上服务器已脱机。用户开始看到与程序不工作无关的(如果有的话!)错误消息,并致电您和/或您的同事寻求支持。您真的想排除故障吗?
以下是 ICANN 对此的立场:
ICANN 强烈反对在现有 gTLD、ccTLD 以及注册级域名的 DNS 树中的任何其他级别中使用 DNS 重定向、通配符、合成响应和任何其他形式的 NXDOMAIN 替换。