如何根据源子网解析不同的 DNS 条目?

如何根据源子网解析不同的 DNS 条目?

我在多个站点上建立了一个新的内部网站,我希望根据使用的源子网将其 fqdn 解析为站点特定的子域。我们当前设置的绑定 DNS 方式是,fqdn 解析在站点 a 中为主,从属于站点 b 和 c(全部通过 puppet),因此我无法在站点 b 和 c 中设置具有不同答案的单独记录文件来执行此操作。

举个例子,我想让站点 a 中的 IP 172.10.0.0/16 将 server.domain.com 解析为 server.a.domain.com,让站点 b 中的 IP 172.11.0.0/16 将 server.domain.com 解析为 server.b.domain.com 等等

我一直在研究 Bind RPZ,但它似乎没有提供针对子网的特定解析选项,除非我理解有误,否则只能提供删除或阻止整个子网的功能。我可以让它重定向 cname,而不是转发到正确的区域进行解析,但这通常适用于所有不使用客户端 IP 触发器的服务器(如我尝试使用的),我还不如更新 domain.com 区域中的 CNAME。

添加到 name.d.conf.options

response-policy { zone "rpz"; };

rpz 区域文件

zone "rpz" {
  type master;
  file "/etc/named/zones/rpz/db.rpz.conf";
  allow-query { none; };
};

数据库文件

@       IN    SOA  nstest.domain.com. domain.com.  (
                      2   ; serial
                      3H  ; refresh
                      1H  ; retry
                      1W  ; expiry
                      1H) ; minimum

@        IN    NS    nstest.domain.com. ; destination IP rewrite

16.0.0.16.172.rpz-ip CNAME server.domain.com.
server.domain.com     CNAME   server.a.domain.com.

通过这些设置,所有通过此 ns 发往 server.domain.com 的请求,无论源 IP 是否解析为 server.a.domain.com

或者尝试使用 RPZ 的错误方法,我在研究中也看到了绑定视图,但看起来您必须为每个站点重新创建整个区域文件,我只是想修改单个 CNAME 记录。

任何帮助均感激不尽。

答案1

  • 位置 B 的专用服务器

在这种情况下,您可以轻松使用 RPZ。解决方案甚至可以在非标准端口(除 53 TCP/UDP 之外)上运行此 DNS 服务器,并在防火墙级别设置端口重定向,这样一旦请求来自特定网络,它就会重定向到此端口。所有其他请求将由标准端口上的 DNS 服务器处理(由于“全局”RPZ 是个问题,我认为其他流量也需要有 DNS 服务器)。

  • “共享” DNS 服务器不仅适用于位置 B

视图很可能是适合您的正确方向。如果您不需要显式 CNAME,但它甚至可以是 A 记录,您可以轻松地在视图中定义“特定子域”,其余部分则保持“正常”解析/转发到其他 DNS 服务器”。

假设你有一个域名示例.com在位置 A 的 DNS 服务器上。存在服务器.example.com通常解析为 192.0.2.10 的 A 记录。此外还有另一条记录another.example.com解析为 A 的值为 192.0.2.20。

然后,您在本地某处(位置 B)绑定服务器以解析一些本地客户端。您可以为特定客户端(位置 B 上的本地 IP)创建本地视图,您可以在其中创建域服务器.example.com

@       IN    SOA  dns.example.com. admin.example.com.  (
                      2   ; serial
                      3H  ; refresh
                      1H  ; retry
                      1W  ; expiry
                      1H) ; minimum

@        IN    NS    dns.example.com ; destination IP rewrite

@        IN    A     192.0.2.30

一旦客户端发送对 server.example.com 的请求,它将在本地解析为视图中的本地“主”区域。一旦客户端请求其他任何内容(除了 server.example.com 的子域),它将根据其他配置进行常规解析或转发...

因此在位置 A 的结果将是:

server.example.com => 192.0.2.10
another.example.com => 192.0.2.20

在位置 B 处将是:

server.example.com => 192.0.2.30
another.example.com => 192.0.2.20

这样,您就可以覆盖子域的明确列表。缺点是,由于它是额外的区域,因此必须至少有 SOA 和最有可能的 NS 记录,因此在这种情况下不可能使用 CNAME。

相关内容