【问题标题】:Can I alias one domain to another?我可以将一个域别名为另一个域吗?
【发布时间】:2012-05-15 01:15:15
【问题描述】:

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

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

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

区域 1 = example.com(普通域)
尝试 1:
zone 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

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

【问题讨论】:

  • 我要说这是一个坏主意,可能会导致一些问题,而不是仅仅为合并区域推出更新。也就是说,Windows DNS 服务器将区域存储在文本区域文件和/或 Active Directory 中。那么,基本上这些会经常改变吗?如果没有,您是否可以通过在其间复制区域数据并不再更新旧区域来复制设置一次?
  • 我刚刚发现了一种我从来不知道的新 DNS 类型:DNAME 类型。然后这一切就像我想象的那样工作。
    问题是这两个区域拥有相同的信息,我希望有一个单一的权威数据源。
  • 我仍然质疑长期实施此功能的需要/目的。这篇文章讨论了一些问题DNAME

标签: dns alias


【解决方案1】:

是的,你可以。使用 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 将一个区域的记录重定向到另一个区域的两种方法。

【讨论】:

  • 我遇到的一个问题是,当您查询 bad.com 的 A 记录时,我从 Bind 和 windows 2012r2 得到“No answer”。 windows 2008r2返回A记录
  • “好”区域中指向自身的 DNAME 记录不起作用。不要这样做。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • @Fonzie 不幸的是,它实际上没有。 DNAME 记录特别不涵盖名称本身,仅涵盖其子域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2022-01-26
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多