我遇到过一种情况,即我有一个使用两个互联网连接的双宿主 VOIP 服务器。除了一个问题之外,该解决方案运行良好,即当主互联网连接中断时,DNS 解析也会中断。这会阻止我的 VOIP 服务器通过备用互联网连接连接到我的 VOIP 提供商,因为它无法解析服务器的 DNS 名称。我无法使用 IP,因为提供商喜欢移动他们的服务器。
所以我的“解决方法”计划是在 cron 作业上每 x 分钟更新一次 HOSTS 条目,这样,除非主互联网长时间停机且服务器 IP 地址发生变化,否则应该没问题。
但是,我真的想不出一个好的方法来做到这一点,请记住,如果无法解析 DNS 条目,我不想用空白或错误信息覆盖它们。
有什么建议么?
编辑:
也许我说得不太清楚。我需要这样做的原因是我的 VOIP 提供商喜欢移动他们的服务器。如果我使用缓存名称服务器,而他们移动了服务器,那么我就会遇到过时的 DNS 数据,如果我将 DNS 缓存时间设置得足够低,那么它就违背了目的,因为当主互联网出现故障时,缓存会在恢复之前过期,我也会遇到同样的情况。
我需要的是一种两全其美的方法,即能够快速对 DNS 变化做出反应,但在连接中断时不会失去解析能力,因此我能想到的唯一解决方案就是更新 hosts 文件。
此外,使用 OpenDNS 并不能解决任何问题,因为 DNS 查找不会在辅助网络连接上进行,它们总是在主网络连接上进行。这就是问题所在。即使我将应用程序绑定到使用不同网络连接的两个接口,它也只会在主连接上进行 DNS 查找。
答案1
为什么不安装本地缓存 DNS 服务器(例如 bind)——配置它非常简单。
这样,您只需询问本地 DNS 服务器,它就会从您的 ISP 的名称服务器询问(并缓存)。您只需将转发器指令添加到named.conf
...
forwarders {
xxx.xxx.xxx.xxx; //. 1st DNS Server
xxx.xxx.xxx.xxx; //. 2nd DNS Server
};
(您可以根据需要添加任意数量)。
答案2
答案3
我没有同时使用 2 个互联网连接的经验,但是如果将两个提供商的 DNS 服务器放入 resolv.conf 中,这样可以吗(可以在 dhclient.conf 中使用“supersede domain-name”来完成)?
答案4
您还可以使用适用于两个 ISP 的 OpenDNS 名称服务器。
208.67.222.222 208.67.220.220