我有内部区域old-internal-domain.local
。我们有像server1.old-internal-domain.local
和 这样的记录www.server1.old-internal-domain.local
。
我想使old-internal-domain.local
区域中的所有记录都可访问,而new-internal-domain.company.tld
无需server1.new-internal-domain.company.tld
将记录从旧区域复制到新区域。
我想要类似的东西DNS 重写规则,因此当客户端向服务器查询 时server1.new-internal-domain.company.tld
,服务器内部将其重写为server1.old-internal-domain.local
并解析为 。作为响应,它响应为server1.new-internal-domain.company.tld A 10.20.30.40
关键时刻是在不创建记录副本的情况下完成此操作。
最好能用Windows DNS,不过其他软件也可以。请指教。
- 这不是 ActiveDirectory 域,只是一个普通的 DNS 域。
答案1
我使用 BIND 解决了类似的用例。在我的场景中,内部部门名称发生了变化(并且仍然经常变化)。但我不想维护 old-dept-name 和 new-dept-name 区域文件。
因此,在我的主 DNS 服务器上,我的区域文件定义如下:
zone "old-dept.companyname.net" {
type master;
file "GEN/companyname.net";
allow-query { GEN-CLIENTS; };
allow-transfer {
key "GEN-KEY";
};
// also-notify avoids problems about NS complaints
also-notify {
10.x.x.x key GEN-KEY;
10.x.x.x key GEN-KEY;
};
};
zone "new-dept.companyname.net" {
type master;
file "GEN/companyname.net";
allow-query { GEN-CLIENTS; };
allow-transfer {
key "GEN-KEY";
};
also-notify {
10.x.x.x key GEN-KEY;
10.x.x.x key GEN-KEY;
};
};
请注意,两个区域使用相同的文件名。注意:视图被大量使用,这就是 GEN* 的内容。
那么关键就在于从属服务器上不要多次使用“file”指令 - 否则复制期间会遇到锁定问题。对于此类区域,数据仅驻留在 RAM 中。甚至可能根本不需要使用它 - 已经有一段时间了,我不记得了:
zone "old-dept.companyname.net" {
type slave;
masters port 53 { 10.x.x.x key GEN-KEY; };
file "GEN/companyname.net";
allow-query { any; };
notify no;
};
zone "new-dept.companyname.net" {
type slave;
masters port 53 { 10.x.x.x key GEN-KEY; };
// Notice there's no 'file' listed here - this prevents locking problems during replication
allow-query { any; };
notify no;
};
这不是一个完美的解决方案,但我能几乎有无限的相同区域的“镜像”。基于 RAM 的区域不是问题,因为它们会在从属服务器重新启动/重新加载或区域更新时从主服务器重新加载。
一些缺点:
- 您可能会(取决于其配置方式)收到一些关于 NS 记录超出区域的粗略警告。
- 我只使用静态记录——我还没有测试过使用动态更新。
- 您必须对反向查找做出决定。您希望 PTR 记录指向 old-dept?new-dept?简称?全部?任何选项都很容易实现,但它是一个考虑。
祝你好运!