为不同的设备使用带有不同名称服务器的 BIND

为不同的设备使用带有不同名称服务器的 BIND

我正在运行安装了 BIND 的 pfSense。在那台机器上,对于设备子网,我希望请求转到 OpenDNS 并添加我自己的记录,这些记录将优先于 OpenDNS。对于其余设备,我想使用 Cloudflare 的 DNS(同时保留 DHCP DNS 条目/自己的记录)。我不使用 BIND,但 Unbound 似乎不支持它。

重要提示:我不会为每个设备单独设置 DNS 服务器!它必须根据设备所在的子网自动设置。

到目前为止:我有两个 ACL(一个用于 LAN 子网,另一个用于 VPN 子网)以及与每个 ACL 对应的视图。我有两个区域(local.lan 和 vpn.lan),其中包含子网上每个设备的域名。我还有一个额外的区域,用于处理 VPN 子网视图的转发。

TL;DR:我希望一些设备使用 OpenDNS,一些设备使用基于 IP 地址/子网的 Cloudflare。我希望具有添加自己的条目的功能(例如让 google.com 指向本地主机)。

答案1

好吧,感谢 Frank Thomas 的评论,我终于搞清楚了。最后,我使用了 RPZ 和 ACL + Views 来完成。我按照以下链接来弄清楚:https://www.isc.org/docs/BIND_RPZ.pdfhttps://www.isc.org/rpz/, 和https://www.linuxbabe.com/redhat/response-policy-zone-rpz-bind-centos

我的配置最终结果如下:

我创建了两个 ACL:一个用于我的 VPN 子网,一个用于我的 LAN 子网。

acl "LAN" { 192.168.1.0/24; };
acl "VPN" { 10.0.8.0/24; };

子网中的最后一个数字必须是0(取决于您的网络掩码,需要更多的零深度)否则 BIND 会引发异常。

然后,我创建了两个视图:一个用于 VPN,一个用于 LAN。

view "VPN" { 
    recursion yes;
    match-clients { VPN; };
    allow-recursion { VPN; };
    response-policy {
        zone "rpz.vpn.lan";
    };
    
    forwarders {
        208.67.220.123;
        208.67.222.123;
    };

    zone "vpn.lan" {
        type master;
        file "/etc/namedb/master/VPN/vpn.lan.DB";
        allow-query { any; };
        allow-transfer { none; };
        allow-update { localhost; localnets; };
    };

    zone "rpz.vpn.lan" {
        type master;
        file "/etc/namedb/master/VPN/rpz.vpn.lan.DB";
        allow-query { localhost; localnets; };
        allow-transfer { localhost; localnets; };
        allow-update { localhost; localnets; };
    };

    zone "." {
        type hint;
        file "/etc/namedb/named.root";
    };

};
view "LAN" { 
    recursion yes;
    match-clients { LAN; };
    allow-recursion { any; };

    zone "local.lan" {
        type master;
        file "/etc/namedb/master/LAN/local.lan.DB";
        allow-query { any; };
        allow-transfer { none; };
        allow-update { localhost; localnets; };
    };

    zone "." {
        type hint;
        file "/etc/namedb/named.root";
    };

};

为了完成 RPZ,我创建了以下区域rpz.vpn.lan

;
$ORIGIN rpz.vpn.lan.

;   Database file rpz.vpn.lan.DB for rpz.vpn.lan zone.
;   Do not edit this file!!!
;   Zone version 2595524218
;
rpz.vpn.lan.     IN  SOA pfsense.vpn.lan.    zonemaster.rpz.vpn.lan. (
        2595524218 ; serial
        1d ; refresh
        2h ; retry
        4w ; expire
        1h ; default_ttl
        )

;
; Zone Records
;
@    IN NS  pfsense.vpn.lan.
@    IN A   10.0.8.1
pfsense.vpn.lan      IN A   10.0.8.1
redis.io     IN CNAME   .

我使用 redis.io 作为测试来检查它是否有效。

还添加了 DHCP 区域:

对于 VPN 子网:

$TTL 7200
;
$ORIGIN vpn.lan.

;   Database file vpn.lan.DB for vpn.lan zone.
;   Do not edit this file!!!
;   Zone version 2595447119
;
vpn.lan.     IN  SOA pfsense.vpn.lan.    zonemaster.vpn.lan. (
        2595447119 ; serial
        1d ; refresh
        2h ; retry
        4w ; expire
        1h ; default_ttl
        )

;
; Zone Records
;
@    IN NS  pfsense.vpn.lan.
@    IN A   10.0.8.1
pfsense      IN A   10.0.8.1

对于 LAN:

$TTL 7200
;
$ORIGIN local.lan.

;   Database file local.lan.DB for local.lan zone.
;   Do not edit this file!!!
;   Zone version 2595445239
;
local.lan.   IN  SOA pfsense.local.lan.      zonemaster.local.lan. (
        2595445239 ; serial
        1d ; refresh
        2h ; retry
        4w ; expire
        1h ; default_ttl
        )

;
; Zone Records
;
@    IN NS  pfsense.local.lan.
@    IN A   192.168.1.1
pfsense      IN A   192.168.1.1

(请注意,为简洁起见,未显示某些 ACL 和文件)

相关内容