如何配置 FreeBSD 将所有 DNS 请求重定向到其他 DNS。
我们已将 FreeBSD 设置为我们公司的路由器。我们有两张卡,一张用于局域网,另一张用于广域网,配置为公共静态 IP 地址。
我想要做的是:
当我们网络 192.168.0.1/32 中的某个客户端向我们的旧 DNS 服务器发出 DNS 请求时,FreeBSD 会将该请求转发到另一个 DNS 服务器。
这可能吗?
我需要把规则放在哪里?
答案1
如果您在该路由器上运行 BIND,则可以轻松将其配置为将所有请求转发到适当的外部 DNS 服务器。根据您运行的防火墙,您还可以轻松地将数据包转发到该路由器的名称。问题是路由器现在正在回答请求,而客户端希望另一台服务器回答请求;这看起来像是典型的缓存中毒尝试,许多较新的客户端会拒绝它。如果您想尝试它并且您正在运行 IPFW,请添加类似以下内容:
ipfw add 00010 fwd localhost ip from {lan} to any dns
(请注意,您需要一个已编译的内核options IPFIREWALL_FORWARD
才能运行此功能。)
正如其他人提到的,您最好的选择是配置 DHCP 以发布新地址(或路由器并在那里设置转发,这也会潜在地减少外部网络流量,因为它会缓存一些 DNS 查询)。然后记录仍在使用任何外部 DNS 的任何人。
答案2
这是可行的,但可能比需要的要多。最简单粗暴的方法是使用 netcat 命令,更永久的方法是使用 iptables 中的 forward 语句(我相信这也适用于 BSD)
另一个解决方案是使用旧服务器 IP(en0.0 或类似的东西)的虚拟地址来设置新服务器。
最好的解决方案可能是更改 DHCP 服务器以提供新的 DNS IP,并将任何硬设置的服务器更改为新 IP。
答案3
您应该关闭旧的 DNS 服务器并阻止从内部 LAN 到外部 DNS 的 DNS 流量,这样您的用户就别无选择。
一个不太激烈的解决方案,也许发现哪些用户正在使用外部或旧的 DNS(分析流量或防火墙日志)并通知这些用户旧 DNS 将被关闭,然后关闭旧 DNS。