由于历史原因,我们在一个域 (example.com) 上的主机上同时拥有内部 (192.168.0.0/16) 和公共 IP。我现在想将其拆分,以便外部用户无需解析内部主机名。
我目前的计划是使用 RPZ 进行绑定。
我的named.conf如下:
options {
directory "/var/named";
pid-file "/run/named/named.pid";
// Uncomment these to enable IPv6 connections support
// IPv4 will still work:
// listen-on-v6 { any; };
// Add this for no IPv4:
// listen-on { none; };
allow-recursion { localhost; };
allow-transfer { none; };
allow-update { none; };
version none;
hostname none;
server-id none;
response-policy { zone "rpz"; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "localhost.ip6.zone";
};
zone "255.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "0.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "." IN {
type hint;
file "root.hint";
};
zone "rpz" {type master; file "rpz"; allow-query {localhost;}; };
我的rpz区域文件如下:
$TTL 1H
@ SOA LOCALHOST. named-mgr.example.com (16 1h 15m 30d 2h)
@ IN NS localhost.
support.example.com A 192.168.1.1
cname.example.com CNAME support.example.com
*.example.com CNAME rpz-passthru.
* CNAME .
当我查询 support.example.com 时,我得到了我想要的结果:
# dig +short support.example.com @127.0.0.1
192.168.1.1
但是当我查询 cname.example.com 时,IP 被解析,但客户端被告知他位于 RPZ 区域。
# dig +short cname.example.com @127.0.0.1
support.example.com.rpz.
192.168.1.1
或者,我可以按如下方式更改区域文件中的 CNAME:
cname.example.com CNAME support.example.com. ;mind the period at the end
但这将阻止 bind 递归解析 cname:
# dig +short cname.example.com @127.0.0.1
support.example.com.
# dig +short support.example.com. @127.0.0.1
192.168.1.1
你能解释一下我做错了什么吗?
谢谢克莱门斯
答案1
回复得有点晚了,但这个问题已经在isc 邮件列表。遗憾的是,您不能将多个 rpz 记录链接在一起,例如
cname.example.com CNAME support.example.com.
support.example.com A 192.168.1.1
rpz 是一次性操作。如果您的查询导致 2 次查找(涉及 CNAME 时会自动发生)- rpz 将仅处理第一次查找。
您需要将配置更改为
cname.example.com A 192.168.1.1
support.example.com A 192.168.1.1
...每个条目只需一次查找即可得到答案。
当不使用 cname 记录时,您也不必担心 cname 记录后面的句点的必要性 ;)
无论如何,如果您必须在 rpz 文件中使用 CNAME 记录,那么请添加句点。对于 rpz 来说,其他一切都没有多大意义。