最好的方法是通过绑定9.8.1或更高版本中的响应策略区域。它允许您覆盖任意区域中的单个记录(并且无需为此创建整个子域,只需创建要更改的单个记录),即可覆盖CNAME等。其他解决方案(例如,未绑定)不能覆盖CNAME 。
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.
它有什么作用?
- 它
www.some-website.com
使用伪造的地址覆盖IP地址127.0.0.1
,从而有效地将该站点的所有流量发送到环回地址
- 它将流量发送
www.other-website.com
到另一个名为fake-hostname.com
可以在此处使用的绑定区域文件中可能包含的所有内容。
要激活这些更改,还有几个步骤:
编辑named.conf.local
并添加以下部分:
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
};
上面链接的教程告诉您向其中添加更多内容,zone "rpz" { }
但这在简单的设置中是不必要的-我在这里展示的是使其在本地解析器上运行的最低要求。
编辑named.conf.options
并在该options { }
部分的某处添加response-policy
选项:
options {
// bunch
// of
// stuff
// please
// ignore
response-policy { zone "rpz"; };
}
现在重新启动Bind:
service bind9 restart
而已。域名服务器现在应该开始覆盖这些记录。
如果需要进行更改,只需编辑db.rpz
,然后再次重新启动Bind。
奖励:如果您想将DNS查询记录到syslog中,那么您可以密切注意程序,进行编辑named.conf.local
并确保有一个logging
包含以下语句的部分:
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替代。