我正在合并两个DNS域。它们是内部的,所以我不必担心适应主DNS系统。它们大致相同:即它们主要包含相同的主机。
我想要做的是为其中一个域创建一个别名。
RFC说您不能将NS记录或MX记录与cname(或可能是A记录)相同,所以我创建了一个只有cname的区域,它可以工作:
zone 1 = example.com(普通域名)
尝试1:
zone 2 = sample.internal(具有单个别名的域)
不幸的是,Windows(它必须是Windows不会)有助于继续添加ns记录。 GRRRR。
试试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
是否可以在别名域中进行递归查找?
答案 0 :(得分:7)
是的,你可以。使用DNS实现此目的有两种主要方法(我将使用“BIND”配置示例):
第一个选项留下了它的起源和设置方式的路径,而第二个选项最容易实现,但需要仔细规划并限制区域使用。
假设您希望“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委派如何显示在查询结果中。有些人可能不喜欢这样,可以用第二种方法克服。
实际上我们已经在上面介绍了这一点。我们所做的只是重复使用带有默认记录的区域文件,而不是 明确引用区域名称 。在我们的示例中,我们使用“目录”选项,但将所有区域文件放在名为“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
现在是“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将一个区域的记录重定向到另一个区域的方法。
答案 1 :(得分:4)
CNAME
条记录将特定域名别名为另一个域名。
DNAME
条记录将特定域名的所有子域别名为另一个域名的子域。
不幸的是,两者不能共存在一起 - 不可能说:
foo IN CNAME bar ;; maps the domain
foo IN DNAME bar ;; maps the subdomains
虽然IETF提出了一个可以同时做到的替代方案的建议。