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

Vil*_*ier 7 domain-name-system vpn bind

你好服务器故障

我在一家使用 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 地址?强调正确,因为我在 cron 中使用以下内容通过 BIND 视图工作:

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
Run Code Online (Sandbox Code Playgroud)

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

我已经阅读了一些关于 RPZ 的内容,但信息似乎参差不齐。任何人都可以指出我正确的方向吗?如果没有,你能让我的解决方案更优雅吗?

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

谢谢!

nan*_*doP 7

是的,您可以使用绑定视图执行此操作:

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

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

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


And*_*w B 2

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

假设您有如下所示的记录:

$ORIGIN db.company.local.net.
test1   IN A 10.22.0.1
test2   IN A 10.22.1.255
Run Code Online (Sandbox Code Playgroud)

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

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

zone "192remap.rpz" {
    type master;
    file "192remap.rpz.zone";
};
Run Code Online (Sandbox Code Playgroud)

响应策略将用于将所有 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.$
Run Code Online (Sandbox Code Playgroud)

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

希望这会有所帮助,并让我们知道它是否有效。您可以在我几个月前写的另一个答案中找到有关 RPZ 的更多信息以及文档链接。