BIND 可以根据请求 IP 地址改变响应吗?

BIND 可以根据请求 IP 地址改变响应吗?

你好服务器过错

我在一家医院工作,该医院使用 192.168.0.0/23 设置网络(在我来之前)。我们希望笔记本电脑和移动客户端使用 VPN 从远程位置连接,但医院网络与大多数家用路由器冲突严重。我向管理层施压,要求他们给我们时间进行更改,但作为一家服务器/设备/等遍布各处的医院,这无法安排。因此,我们使用 10.22.0.0/23 的 1:1 nat“解决”了这个问题。

问题:客户端可以使用 10.22.0.0/23 IP 连接并访问资源,没有任何问题,但如果它们查询 DNS 服务器,则会收到 192.168.0.0/23 响应。正确的如果查询来自 VPN 子网,BIND 中有什么方法可以动态地将这些地址转换为 10.22.0.0/23 地址?强调正确,因为我已通过 BIND 视图在 cron 中使用以下命令使其工作:

sed -e 's/192.168.0./10.22.0./' -e 's/192.168.1./10.22.1./' /var/lib/bind/db.company.local > /var/lib/bind/db.company.local.ext && /usr/sbin/rndc reload company.local in extView

这很有效,但由于 BIND 日志需要大约 15 分钟才能写回 db.company.local 文件,因此延迟了 15 到 20 分钟。

我读了一些关于 RPZ 的文章,但信息似乎不完整。有人能给我指出正确的方向吗?如果没有,你能让我的解决方案更优雅吗?

编辑:我只是想澄清一下,我已经在使用 BIND 视图,但我使用的是两个区域。我正在从第一个区域生成第二个区域,通过 sed 发送它以更改 IP,并在该视图中对该区域执行 rndc 重新加载。这会产生很大的延迟,有没有办法在两个视图中使用相同的区域文件,并在查询时更改 DNS 响应?

谢谢!

答案1

应该是一个过程问题。通常管理员会将新记录添加到两个视图的区域文件中。如果他们的记忆力不好,就强迫他们使用脚本。如果他们拒绝使用脚本,就惩罚他们。但如果它是一个疯人院,而你只需要这个工作,我认为你可以使用基于视图的响应策略来做到这一点。

假设您有如下记录:

$ORIGIN db.company.local.net.
test1   IN A 10.22.0.1
test2   IN A 10.22.1.255

在 192space 视图的视图选项中,定义以下响应策略:

options {
    response-policy { zone "192remap.rpz"; };
}

zone "192remap.rpz" {
    type master;
    file "192remap.rpz.zone";
};

响应策略将用于将所有 10space IP 重写为 192space。这与其他区域文件类似,但 NS 记录毫无意义,而记录具有特殊含义。由于手动写出每个 IP 地址重映射会很麻烦,因此我们将使用$GENERATE块来为您填充区域文件。

@            IN    SOA  localhost. root.localhost.  (
                      2   ; serial 
                      3H  ; refresh 
                      1H  ; retry 
                      1W  ; expiry 
                      1H) ; minimum 

             IN    NS    localhost.

; 32.$.0.22.10.rpz-ip. -> 10.22.0.$/32
$GENERATE 0 255 32.$.0.22.10.rpz-ip. A 192.168.0.$
$GENERATE 0 255 32.$.1.22.10.rpz-ip. A 192.168.1.$

这不仅会重新映射 DNS 响应的 ANSWER 部分中找到的任何 10.22.0.0/23 IP,还会捕获出于任何原因出现在 AUTHORITY 或 ADDITIONAL 部分中的任何可疑 IP。对test1.db.company.local.net.(10.22.0.1) 的请求应将其回复重写为 192.168.0.1,并且仅适用于访问 192space 视图的客户端。

希望这能有所帮助,如果有效请告诉我们。您可以在以下位置找到有关 RPZ 的更多信息和文档链接另一个答案我几个月前写过。

答案2

是的,您可以使用绑定视图来做到这一点:

http://www.zytrax.com/books/dns/ch7/view.html

基本上,您将每个视图定义为一个子网,然后每个视图维护自己的区域文件。根据 DNS 查询的源 IP /子网,您将获得不同的“视图”。

这对于名称服务器在“内部”/“外部”视图中使用很常见,因此 DNS 名称在外部视图上公开解析,但当从内部私有局域网查询时,将“内部”解析为内部局域网上主机的私有 IP。

相关内容