我有一台 Fortigate 100D,带有 2x BT Business Infinity Fibre 连接,用作 WAN1 和 WAN2。
每条 BT 线路都带有 5 个静态公共 IP,并且我通过 CloudFlare 托管的 DNS 指向其中一个 WAN 连接上的静态 IP。
(假设您对 mylesgray.com 执行 nslookup,您将看到 217.45.201.1 作为公共 IP)。
我们希望我们的 A 记录 (用于托管网站、VPN、ssh 等) 具有冗余,但显然 2 条 BT 线路具有 2 组不同的公共 IP,因此如果 WAN1 出现故障,我们就无法继续工作了 - 由于地址是静态的,因此无法进行故障转移。
我查过外部 DNS 故障转移,但我觉得这很乱,而且非常不对(循环让我很烦)。然后任播作为一个选项出现了,但是,任播似乎需要整个 /24 块,或者在某些 ISP 的广播中甚至需要 /22。我们正在运行企业级路由器,因此使用 BGP 等不是问题。
有人可以解释一下如何在不购买 /22 IP 块或使用循环 DNS 的情况下实现 DNS A 记录的故障转移吗?
答案1
只需注意几点:Anycast 并不真正提供 A 记录故障转移。您提到“外部 DNS 故障转移”和 roundrobin - 这些根本不是一回事。Roundrobin 是为同一主机名设置多个 A 记录。DNS 故障转移是在链接断开时将单个 A 记录更改为不同的 IP 地址,理想情况下,在链接恢复时将其更改回来。
正如 Lukas 提到的,DNS 故障转移通常不是实现此目的的最佳方法,原因如下。它确实适用于最多用户,但缓存和 DNS 服务器会忽略 TTL,从而产生延迟,这会影响故障转移到备用 IP 地址的时间。
如果您希望继续使用这种方法,有各种第三方 DNS 服务(DNSMadeEasy、Amazon Route 53 等)提供此服务。如果各种链接平衡器(PepLink、Baraccuda)充当您的 DNS 服务器,它们也可以执行 DNS 故障转移的变体。根据您的环境,您还可以编写自定义脚本来检查链接的状态并根据需要更新 IP 地址。
除非您拥有并管理自己的 ASN 和 IP 地址块,否则 BGP 不会为您提供任何帮助。理想的解决方案是向当地区域互联网注册机构 (RIPE/ARIN/等) 申请您自己的 IP 块和 ASN,并运行您自己的路由器以从适当的链路通告路由。
答案2
很多管理员认为使用 DNS 记录进行故障转移是一种不好的做法,因为:
DNS 记录具有生存时间,您必须在以下两者之间取得平衡:表现(高 TTL = 长缓存)和更新行为(低 TTL = 变化传播得更快)。
一些 DNS 客户端和递归服务器(例如 ISP 的服务器)倾向于完全忽略 TTL 值或设置自己的值。
据我所知,CF 的最小 TTL 为 5 分钟(至少在免费账户上)。
我自己没有使用过 BT 服务,但是否可以选择在两个上行链路之间移动 IP 地址?不过,我不确定如何使用您的设置来实现这一点。