我正在运行安装了 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.pdf,https://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 和文件)