我希望位于内部网络上的主机将“host1.example.com”,“host2.example.com”和“example.com”解析为内部IP地址而不是网关的IP地址.其他主机如“otherhost.example.com”仍应由外部DNS提供商解析.
通过在BIND中为“host1.example.com”和“host2.example.com”定义两个单一条目区域,我已经成功地为host1和host2条目执行了此操作.但是,如果我为“example.com”添加区域,则该域的所有查询都由我的本地DNS服务器解析,例如查询“otherhost.example.com”会导致错误.
是否可以将BIND配置为仅覆盖域的某些条目,并以递归方式解析其余条目?
解决方法
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
编辑:让我们正确地做到这一点.我将基于上面链接的教程记录我所做的事情.
我的操作系统是Raspberry Pi的Raspbian 4.4,但该技术应该可以在Debian和Ubuntu上进行任何更改,或者在其他平台上进行最小的更改.
转到绑定配置文件保存在系统中的位置 – 这是在/ etc / bind中.在那里创建一个名为db.rpz的文件,其中包含以下内容:
$TTL 60 @ IN SOA localhost. root.localhost. ( 2015112501 ; serial 1h ; refresh 30m ; retry 1w ; expiry 30m) ; minimum IN NS localhost. localhost A 127.0.0.1 www.some-website.com A 127.0.0.1 www.other-website.com CNAME fake-hostname.com.
它有什么作用?
>它使用虚假地址127.0.0.1覆盖www.some-website.com的IP地址,有效地将该站点的所有流量发送到环回地址
>它将www.other-website.com的流量发送到另一个名为fake-hostname.com的站点
要激活这些更改,还有一些步骤:
编辑named.conf.local并添加此部分:
zone "rpz" { type master; file "/etc/bind/db.rpz"; };
上面链接的教程告诉您向区域“rpz”{}添加更多内容,但在简单设置中这不是必需的 – 我在这里展示的是使其在本地解析器上运行的最小值.
编辑named.conf.options和options {}部分中的某处添加response-policy选项:
options { // bunch // of // stuff // please // ignore response-policy { zone "rpz"; }; }
现在重启Bind:
service bind9 restart
而已.名称服务器现在应该开始覆盖这些记录.
如果需要进行更改,只需编辑db.rpz,然后重新启动Bind.
Bonus:如果你想将DNS查询记录到syslog中,那么你可以关注程序,编辑named.conf.local并确保有一个包含这些语句的日志记录部分:
logging { // stuff // already // there channel my_syslog { syslog daemon; severity info; }; category queries { my_syslog; }; };
再次重新绑定,就是这样.
在运行Bind的机器上测试:
dig @127.0.0.1 www.other-website.com. any
如果你在另一台机器上运行dig,只需使用@ the-ip-address-of-Bind-server而不是@ 127.0.0.1
我已经非常成功地使用这种技术来覆盖我正在处理的网站的CNAME,并将其发送到我刚刚测试的新AWS负载均衡器. Raspberry Pi用于运行Bind,RPi也配置为WiFi路由器 – 所以通过将设备连接到RPi上运行的SSID,我将获得测试所需的DNS覆盖.