我可以将一个域别名变为另一个域吗?

k-h*_*k-h 2 dns alias

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

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

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

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

sample CNAME example.com.
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

但是这个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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*her 7

是的你可以.使用DNS实现此目的有两种主要方法(我将使用"BIND"配置示例):

  1. 使用DNAME(Delegation NAME)记录
  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;
};
Run Code Online (Sandbox Code Playgroud)

"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.
Run Code Online (Sandbox Code Playgroud)

当您重新加载名称服务器时,"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
Run Code Online (Sandbox Code Playgroud)

我故意使用包含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;
};
Run Code Online (Sandbox Code Playgroud)

你明白了......

请注意DNAME委派如何显示在查询结果中.有些人可能不喜欢这样,可以用第二种方法克服.

区域文件重载方法

实际上我们已经在上面介绍了这一点 我们所做的只是重复使用带有默认记录的区域文件,而不是显式引用区域名称.在我们的示例中,我们使用"目录"选项,但将所有区域文件放在名为"zone"的文件夹中,并为文件名指定与区域名称相同的名称(我从不喜欢"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
Run Code Online (Sandbox Code Playgroud)

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

zone "good.com" in {
    type master;
    file "zones/good.com";
    check-names ignore;
    notify yes;
};
Run Code Online (Sandbox Code Playgroud)

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

zone "goodness.com" in {
    type master;
    file "zones/good.com";
    check-names ignore;
    notify yes;
};
Run Code Online (Sandbox Code Playgroud)

现在,当您在"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
Run Code Online (Sandbox Code Playgroud)

如上所述,您必须永远不要在区域文件中明确引用区域名称,而是使用"@"默认引用,并且永远不要使用完全限定的域名作为引用区域内A记录的CNAME记录的目标.

使用"$ ORIGIN"指令时,此方法的缺点必须非常小心,并且使用"$ GENERATE"指令变得非常困难.此外,它占用权威服务器的两倍内存,因为就服务器而言,它们是独立的区域.

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


Aln*_*tak 5

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

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

不幸的是,两者无法共存-无法说:

foo   IN CNAME bar    ;; maps the domain
foo   IN DNAME bar    ;; maps the subdomains
Run Code Online (Sandbox Code Playgroud)

尽管IETF提出了一项建议,建议将两者一起使用。