使用 iptables 数据更改 BIND DNS 响应

使用 iptables 数据更改 BIND DNS 响应

我已经为 BIND DNS 服务器配置了两个视图。两者都有不同的区域数据集。当最终用户查询 DNS 服务器时,我需要根据他的需要动态路由和更改他的请求。例如,如果用户输入 example.com,我需要他给出 DNS 答案 1.2.3.4;如果用户想要访问不同的服务,我必须为他提供针对同一个 example.com 的 DNS 响应 4.3.2.1。

据我所知,唯一的方法是使用匹配用户的源 IP 地址并根据该地址路由 DNS 流量。对于设置,我设置了两个具有私有 IP 地址的虚拟接口,并使用匹配客户端选项配置绑定视图以匹配这些内部 IP

view "VIEW1" {
    match-clients { 192.168.10.20; };
    include "/etc/zones2.conf";
};

view "VIEW2" {
    match-clients { 192.168.10.30; };
    include "/etc/zones3.conf";
};

我需要取得这样的成果

scenario 1 --> example.com --> SNAT to 10.20 -->  response (1.2.3.4) --> send back to client 
scenario 2 --> example.com --> SNAT to 10.30 -->  response (4.3.2.1) --> send back to client 

我需要将传入数据包的源地址更改为这些私有 IP 地址,并在不同视图下使用绑定 DNS 进行查询。然后将 DNS 结果发送回客户端。这可以用 ipsets、iptables 和 iproute 来实现吗?如果可以,我该如何实现?

相关内容