[DNS][BIND9]客户端请求外部域名时转发到外部IP

[DNS][BIND9]客户端请求外部域名时转发到外部IP

因此,我有一些 DNS,其中为我的域 yyy.com 设置了许多内部区域。我需要向提供商服务器(主机 - 带有要下载的配置文件,这不是像 googleDNS 8.8.8.8 这样的 DNS)添加记录。因为他的设备使用域名 xxx.5060.com 或 xxy.5060.com 请求配置。我认为这很容易(在 BIND8 中)。

因此我将配置添加到主区域文件:

xxx.5060.com. IN A a.b.c.d
xxy.5060.com. IN A a.b.c.d

但是 named-checkzone 返回警告: ignoring out-of-zone data 当然 DNS 不想接收请求域名的 IP。因此我开始谷歌搜索并尝试新的配置,例如:

xxx.5060.com. IN CNAME helper
xxy.5060.com. IN CNAME helper
helper        IN A     a.b.c.d

警告是相同的,在谷歌中找到的另一个解决方案是编辑named.conf.local并添加“区域”:

zone "xxx.5060.com" {
    type forward;
    forwarders {
        a.b.c.d;
    }
}    
zone "xxx.5060.com" {
    type forward;
    forwarders {
        a.b.c.d;
    }
}
zone "yyy.com" {
    type master;
    file "/etc/bind/zones/db.yyy.com";
    allow-transfer { 10.e.e.e;
                     10.e.e.f; };
...

但DNS没有反应。

哦……我尝试添加到上层配置forward only;。同样的反应。

有谁能建议我做错了什么或做了什么设置吗?

答案1

仅前向区域应指向能够回答有关给定区域的请求的名称服务器地址。

因此,如果您希望您的名称服务器解析xxx.5060.com,您需要指定一个指向的名称服务器的转发区域5060.com,如下所示:

zone 5060.com {
    type forward;
    forward only;
    forwarders {
        172.247.252.11;
        115.29.220.216;
    };
};

这里有个小提示:我不知道该区域5060.com是否只是一个例子,还是您尝试解析的实际域。如果它只是一个例子,那么您就倒霉了,因为它5060.com确实存在,并且上面例子中的 IP 地址已注册为名称服务器。

如果您尝试解析的主机确实存在,则上述示例应该有效。如果不存在,那么这不是实现您想要的“好”方法。您不能将主机名“注入”到您不拥有的域中。您的选项如下:

您可以将您的名称服务器设置为 的主服务器5060.com

这样,您就可以在该区域中定义所需的任何主机。这有几个缺点:

  1. 您定义的主机仅对使用您的服务器(且仅此)作为 DNS 服务器的计算机可见。您的更改(自然)不会传播到其他 DNS 服务器。
  2. 区域文件中不存在的任何主机定义都将消失:您无法“添加”主机名并让您的 DNS 服务器向“真实”服务器询问其余部分。
  3. 如果您的服务器可以通过互联网访问,则必须注意不要将虚假配置传播给毫无戒心的客户端。

定义虚拟域

您还可以定义一个以 开头的虚拟域5060.com,但实际上是您的内部域,例如5060.com.ismine。定义您想要在此域中的主机,并将客户端计算机中的 DNS 搜索后缀设置为ismine。这样,如果通过“官方”DNS 服务器找不到主机,客户端将尝试保留带有后缀的主机名.ismine,并且您的 DNS 服务器可以向他们提供您想要的主机名。这种方法也有一些缺点:

  1. 与上一种方法一样,只有使用您的 DNS 服务器的客户端才能访问主机名。如果他们有备用 DNS,则此方法无效(至少当他们询问其他 DNS 服务器时无效)。
  2. 您无法重新定义主机名,因为客户端将首先尝试注册的名称服务器,并且仅在未找到主机名时才会尝试应用后缀。
  3. 您必须能够更改客户端的 DNS 解析配置。
  4. 如果您的服务器是可从互联网访问的 DNS 服务器,您可能不想将内部区域传播到外部客户端。

如果我理解您的帖子正确的话,您无法修改hosts设备上的本地文件,因此如果上述方法对您不起作用,那么您或多或少是运气不佳。

相关内容