3

我正在合并两个 DNS 域。它们是内部的,因此我不必担心适合主 DNS 系统。它们基本相同:即它们包含大部分相同的主机。

我想要做的是为其中一个域创建一个别名。

RFC 说您不能拥有与 cname(或者可能是 A 记录)相同的 NS 记录或 MX 记录,因此我创建了一个只有 cname 的区域并且它可以工作:

区域 1 = example.com(普通域)
尝试 1:
区域 2 = sample.internal(具有单个别名的域)
不幸的是 windows(它必须是 windows,不是吗)有助于不断添加 ns 记录。呸呸呸。
尝试 2:
区域 2 = 内部(一个域)
包含正常的 gumpf 和一个 cname

sample CNAME example.com.

但两者都给出了相同的结果:

nslookup sample.internal
Server:  ns.example.com
Address:  172.16.xx.xx

Name:    example.com
Addresses:  172.16.xx.xx
      172.16.xx.xx
Aliases:  sample.internal

但是这个 fred.example.com 存在的查找不起作用:

nslookup fred.sample.internal
Server:  ns.example.com
Address:  172.16.xx.xx

*** ns.example.com can't find fred.sample.internal: Non-existent domain

是否可以在别名域中进行递归查找?

4

2 回答 2

9

是的你可以。使用 DNS 有两种主要方法来完成此操作(我将使用“BIND”配置示例):

  1. 使用 DNAME(代表团名称)记录
  2. 在 BIND 配置中重载区域文件

第一个选项留下了它的起源和设置方式的踪迹,而第二个选项最容易实施,但需要仔细规划并限制区域使用。

DNAME 方法

假设您希望“bad.com”中的每个主机都访问“good.com”。首先在“named.conf”中设置区域:

// Malicious external domain, redirected to "good.com"
zone "bad.com" in {
    type master;
    file "security/good.com";
    check-names ignore;
};

“good.com”的区域文件(记住,这是我们要重定向的区域)看起来像这样:

; Name:         security/good.com
; Date:          2/19/2016
; Purpose:      General-use redirection to "good.com" using DNAME 

$TTL 3600
@        IN      SOA     dns.good.com. admin.dns.com. (
                         2016021900 
                         7200 
                         600 
                         2592000 
                         3600 )

         IN      NS      dns1.good.com.
         IN      NS      dns2.good.com.

         IN      DNAME   good.com.

当您重新加载名称服务器时,“bad.com”区域中的任何 DNS 查询现在都将委托给“good.com”:

> nslookup www.bad.com
Server:         dns1.good.com
Address:        10.9.8.7#53

bad.com         dname = good.com.
www.bad.com     canonical name = www.good.com.
Name:   www.good.com
Address: 10.1.2.3

我有目的地使用区域文件的默认行为,使用包含 SOA、NS 和 DNAME 记录的单个“@”,这使得您可以轻松地将“security/good.com”区域文件重新用于您的任何其他此类区域可能想要重定向:

// Malicious external domain, redirected to "good.com"
zone "bad.com" in {
    type master;
    file "security/good.com";
    check-names ignore;
};

// Another malicious external domain, redirected to "good.com"
zone "worse.com" in {
    type master;
    file "security/good.com";
    check-names ignore;
};

// Yet another malicious external domain, redirected to "good.com"
zone "evil.com" in {
    type master;
    file "security/good.com";
    check-names ignore;
};

你明白了……

请注意 DNAME 委托在查询结果中的显示方式。有些人可能不喜欢这样,这可以通过第二种方法来克服。

区域文件重载方法

实际上,我们已经在上面介绍了这一点。我们所做的只是重新使用带有默认记录的区域文件,并且从不明确引用区域名称。在我们的示例中,我们使用“目录”选项,但将所有区域文件放在名为“区域”的文件夹中,并为文件名提供与区域名称相同的名称(我从不喜欢“db.xxxx”)

$TTL 14400
@         IN      SOA     dns.good.com. admin.good.com. (
                          2016021900 ; Serial No.
                          1800       ; Refresh
                          600        ; Retry
                          604800     ; Expire
                          3600 )     ; Minimum

          IN      NS      dns1
          IN      NS      dns2
          IN      MX      10 mail
          IN      A       10.11.12.13

; A records

dns1      IN      A       10.9.8.7
dns2      IN      A       10.9.8.6
mail      IN      A       10.9.8.5
files     IN      A       10.9.8.4

; CNAME records

www       IN      CNAME   @
ftp       IN      CNAME   files

现在你的“named.conf”文件的元素:

zone "good.com" in {
    type master;
    file "zones/good.com";
    check-names ignore;
    notify yes;
};

现在假设您希望域“goodness.com”本质上是“good.com”。只需在“named.conf”中重新使用“good.com”文件,但指定重载区域名称:

zone "goodness.com" in {
    type master;
    file "zones/good.com";
    check-names ignore;
    notify yes;
};

现在,当您在“goodness.com”中查询记录时,它们将成为“good.com”区域中的记录:

> nslookup files.good.com
Server:         dns1.good.com
Address:        10.9.8.7#53

Name:   files.good.com
Address: 10.9.8.4

> nslookup files.goodness.com    
Server:         dns1.good.com
Address:        10.9.8.7#53

Name:   files.goodness.com
Address: 10.9.8.4

如上所述,您绝不能在区域文件中显式引用区域名称,而是使用“@”默认引用,并且永远不要使用完全限定的域名作为引用区域内 A 记录的 CNAME 记录的目标。

这种方法的缺点是必须非常小心地使用“$ORIGIN”指令,并且使用“$GENERATE”指令变得非常困难。此外,它在您的权威服务器中占用两倍的内存,因为就服务器而言它们是单独的区域。

无论如何,这应该演示使用 DNS 将一个区域的记录重定向到另一个区域的两种方法。

于 2016-02-20T02:59:34.443 回答
5

记录将CNAME特定域名别名为另一个域名。

记录将特定域名的DNAME所有子域别名为另一个域名的相同子域。

不幸的是,这两者不能共存——不可能说:

foo   IN CNAME bar    ;; maps the domain
foo   IN DNAME bar    ;; maps the subdomains

尽管 IETF 提出了一种可以同时兼顾两者的替代方案。

于 2012-05-16T10:42:17.417 回答