![任播是否允许尝试替代路由?](https://linux22.com/image/701403/%E4%BB%BB%E6%92%AD%E6%98%AF%E5%90%A6%E5%85%81%E8%AE%B8%E5%B0%9D%E8%AF%95%E6%9B%BF%E4%BB%A3%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
标题有点不太好,但是我对这个主题了解不够,无法想出一个更合适的标题。
我多次读到过,任播是实现负载平衡的绝佳解决方案,也是 DNS 负载平衡的首选解决方案。然而,我想知道,任播似乎只具有负载平衡的优势,并没有提供冗余方面的帮助。而没有负载平衡的普通 DNS 解决方案(即只有多个 A 记录)不提供任何负载平衡,但似乎提供了更好的冗余。
我一直在仔细研究 DNS 服务,并注意到 2016 年 Dyn 遭遇过一次中断:https://en.wikipedia.org/wiki/2016_Dyn_cyberattack。但有两件事:
1) 如果某个特定任播公告背后的服务器出现问题,是否会自动尝试其他路由?如果是这样,为什么 Dyn 会遭遇这样的中断 - 或者这是由于 DNS 在 UDP 上运行造成的?
例如,如果我们尝试连接到蓝色节点,并按照路线 1-2-6 行驶,却发现路线 6 已损坏(无法连接到服务器或出现某些错误),那么会自动尝试路线 1-2-5 或 1-3-4 吗?
2)客户可以做些什么来缓解这个问题?
3) 在我看来,任播更有可能牺牲某个特定区域来保持其他区域在线,而不是像 DNS 循环那样,虽然后者无法提供相同的性能,但可以更好地缓冲此类攻击。那么,为什么(假设我的想法是正确的)人们似乎大力推崇任播,而较少推崇更多可以返回与用户相关的服务器顺序的循环 DNS 服务呢?
我知道这个问题多个数据中心和 HTTP 流量:DNS 循环是确保即时故障转移的唯一方法吗?虽然我不认为这是一个重复,因为我对任播失败的原因很感兴趣。
答案1
首先让我们简单回顾一下使用任播 DNS 的含义:
给定的 IP 地址A是我们希望提供更多可用性的解析器。A主持人是A/24 子网。任播可以通过特定主机路由来实现(即A/32) 但这种情况一般只在私有网络内出现,在一般互联网上则不会出现。
有一些机制可以使得A仅当相应的 DNS 服务正常运行时,才会动态通告子网。请注意(这是真的重要的是)广告本身可能来自运行解析器的站点内的单个主机,也可能来自包含所述解析器的多个实例的整个物理站点(即运行解析器的许多主机,整个站点共享单个路由)。
相同路线(A) 将从公共互联网上的多个点进行广告。这可能采取大型提供商(即遍布全球的接入点)的形式,在与外国网络的每个互连点提供相同的路由,或者来自多个运营商托管的点的相同路由。
因此,当任意客户端向任播 IP 发送数据包时,该数据包将倾向于找到“最近”的广告点。我在“最近”周围加了引号,因为它只是在路由拓扑的布局方式和沿途路由器的策略意义上才接近。任播地址的最近实例实际上可能是物理上最远的实例,这是完全有可能的。
反过来,如果此路由的通告点失败(...这可能是由于主机上的服务失败和路由撤销或更传统的网络可达性问题导致的),则绑定到任播地址的数据包将被路由到下一个最近的(再次 - 以路由协议术语来说)路由实例。在网络重新收敛期间,客户端的解析可能会失败并重新尝试,重新尝试现在遵循更长的路径以到达 - 显然 - 相同的地址。这对客户端进程和用户都是透明的,从网络术语来看,最好将其视为遵循给定网络的备用路径。
有时将任播网络视为逻辑结构会有所帮助。它是一个包含您感兴趣的服务的虚拟子网。该虚拟子网可通过网络中的多条路径到达。
话虽如此,以下是任播设计的主要注意事项:
由于无法保证发送到任播 IP 的特定数据包将到达同一物理主机,因此这种方法实际上仅映射到无连接协议。
解决方案的可靠性取决于将服务的正确运行与路由通告绑定在一起的逻辑。如果服务停止运行,而路由继续被通告,那么就会出现潜在的重大黑洞。
获得任播路由通告适当地- 分布在公共互联网上并非易事。很容易创建热点:大多数客户端都喜欢的任播路由的特定实例。这仍然是一个潜在的不错的 HA 解决方案(适用于较容易发生的故障类型),但它与负载平衡无关。
现在 - 终于 - 所有这些都列出来了,你的问题就更容易回答了:
什么也没有固有转向任播,使其更能抵御 DDoS。数百万个 DDoS 流量中的每一个都会找到通往其最近实例的路径,这可能会导致其他合法客户端无法访问,否则这些客户端将被路由到这些点。
现在,如果僵尸网络上的绝大多数主机恰好位于东欧,而其中一条任播路由恰好源自附近的 PoP(再次强调 - 就路由拓扑而言是“附近”),那么这些流量将被沉没到一个点,而世界其他大部分地区则继续解析到其他大洲方便点托管的同一条路由。在这种特殊情况下,任播可以说是最好的机制来最大限度地减少 DDoS 攻击造成的损害。这在很大程度上取决于任播路由的分发方式以及策略的配置方式(请参阅上面的第 3 点 - 这不是一个小问题)。
显然,在真正发生 DDoS 攻击的情况下,这种用例并不那么引人注目分散式。但是,如果设计得当,任播路由的本地化意味着攻击负载现在可以分散到任意数量的地理分散的物理主机上。这将倾向于削弱攻击对目标的影响,并可能将影响分散到更大的网络块上。再次 -巨大的数量取决于事物的设计和配置方式。
为什么这被认为是对循环法的胜利?原因很简单,因为可以部署任意数量的主机,而无需在各个 IP 上安装单独的负载平衡器,并且也不依赖于特定客户端决定转移到另一个解析器的超时值。实际上,可以部署一千台主机之内具有相同 IP 的单个数据中心并相应地平衡流量(注:显然基于 ECMP 表的大小等存在巨大的实际限制)或部署一千个地理位置分散的站点每个拥有一千台主机。所有这些都可以在不改变客户端配置的情况下完成,无需负载平衡器(通常集群)故障点等。简而言之 - 如果设计得当,它可以像整个互联网一样扩展。