是的,你可以。使用 DNS 有两种主要的方式来实现这一点(我将使用“BIND”配置示例):
- 使用 DNAME(代表团名称)记录
- 在 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 将一个区域的记录重定向到另一个区域的两种方法。