拆分 DNS 配置:无法使用 nsupdate 从内部系统更新外部区域

拆分 DNS 配置:无法使用 nsupdate 从内部系统更新外部区域

我已经使用 bind9 和拆分 DNS 配置设置了一个 DNS 服务器,以便对我的域名的所有内部请求都会获得内部 IP 地址,而来自我网络外部的所有请求都会获得官方地址(这些请求通过 Cisco ASA 防火墙路由,但最终会到达相同的系统)。

当我从内部网络使用 nsupdate 时,内部区域会更新。同样,当我在外部系统(使用 TSIG)上运行 nsupdate 时,外部区域也会更新。

但是我更希望能够从内部网络内更新所有 DNS 数据。问题似乎是我可以为我的域名定义多个视图,但 bind9 根据我的 views.conf 通过客户端的 ip 地址标识要使用的区域。因此,当它是内部 ip 地址时,将检索或更新内部区域,但无法从内部系统更新外部区域。

我还尝试使用两个不同的 TSIG 密钥,希望 bind9 可以通过密钥识别外部区域,但这也不起作用:

Aug 26 11:04:22 s1006 named[13444]: client 10.1.1.6#39841: view internal: signer "external" denied
Aug 26 11:04:22 s1006 named[13444]: client 10.1.1.6#39841: view internal: update 'example.org/IN' denied

以下是相关的 bind9 配置设置:

view "internal" {
        match-clients {
                10.1.1.6;
        };
        recursion yes;
        include "/etc/bind/named.conf.default-zones";

        include "/etc/bind/zones/example.org-internal.conf";
};

view "external" {
        match-clients {
                10.1.1.3;
        };
        recursion no;
        include "/etc/bind/named.conf.default-zones";

        include "/etc/bind/zones/example.org-external.conf";
};

key internal {
        algorithm hmac-md5;
        secret "x2ZKW4SxbeySMK7PmV1Nng==";
};

key external {
        algorithm hmac-md5;
        secret "kiHB9BR6IeSmUUnp1QMCcA==";
};

zone "example.org" {
        type master;
        file "/var/cache/bind/example.org-internal/example.org";
        notify yes;
        allow-update {
                key internal;
        };
};

zone "example.org" {
        type master;
        file "/var/cache/bind/example.org-external/example.org";
        notify yes;
        allow-update {
                key external;
        };
};

注意:出于测试目的,视图设置为所有来自 10.1.1.3 的请求都是“外部的”,而来自 10.1.1.6 的请求都被视为“内部的”。

请告知如何配置,以便我可以通过在 10.1.1.6 而不是 10.1.1.3 上运行 nsupdate 来更新外部区域。另外,如果您认为这个特定的设置是一个非常愚蠢的想法,请告诉我。

答案1

我认为最好的解决方案通常就是使用专用的 TSIG 密钥来访问不同的视图。

我知道问题提到了这一点并且说它不起作用,但那一定是因为两个视图的客户端匹配指令没有得到适当更新。

如果我们假设有两个 TSIG 密钥,分别为这个目的internal而命名external(看起来是问题中的情况),则视图应按照以下步骤更新:

view "internal" {
        match-clients {
                key "internal";
                !key "external";
                ... # existing IP-based matching as it was
        };
        ... # all the other stuff from the view as it was
};

view "external" {
        match-clients {
                    key "external";
                    !key "internal";
                    ... # existing IP-based matching as it was
        };
        ... # all the other stuff from the view as it was
};

这样,使用这两个密钥之一签名的任何传入消息(查询/更新)将始终命中相应的视图,因为新的基于密钥的匹配条目在任何基于 IP 的匹配之前列出,并用尽关于这些密钥的所有可能的视图/密钥组合。

(从技术上讲,我提出的解决方案有些冗余,因为视图的顺序也是可以用来消除某些视图/键组合的一个因素,但我建议无论如何都要明确列出所有组合。这样,如果你重新排序视图,事情就不会崩溃,我个人也发现它更清楚实际的意图。)

答案2

nsupdate有一个local子命令,可让您选择源地址。理论上,这将允许您使用外部源地址从内部网络内部触发外部视图的更新。实际上,您的防火墙策略可能会阻止它。

相关内容