为此,我认为可以使用具有多个IP的DNS记录.
那么,单个DNS A记录可以容纳多少个IP? This answer说它大约30,但那里的用例有所不同.对于上面的场景,我不关心给定的ISP只缓存30,只要另一个ISP缓存另外30个,依此类推.
解决方法
但如果你给一个无聊的IT人员一个实验室,那么有趣的事情就会发生!
在本次实验中,我使用了在Server 2012 R2上运行的Microsoft DNS服务器.由于在Active Directory中托管DNS区域的复杂性,我创建了一个名为testing.com的新主区域,该区域不是AD集成的.
使用此脚本:
$Count = 1 for ($x = 1; $x -lt 256; $x++) { for ($y = 1; $y -lt 256; $y++) { for ($z = 1; $z -lt 256; $z++) { Write-Host "1.$x.$y.$z`t( $Count )" $Count++ dnscmd . /RecordAdd testing.com testing A 1.$x.$y.$z } } }
我继续创建名为testing.testing.com的65025主机记录,其中包含从1.1.1.1到1.1.255.255的每个IPv4地址.
然后,我想确保我可以毫无错误地突破65536(2 ^ 16位)A记录总数,我可以,所以我想我可能已经一直走到16581375(1.1.1.1到1.255) .255.255,)但我不想坐在这里观看这个剧本整晚都在运行.
因此,我认为可以安全地说,您可以添加到服务器上具有不同IP的同名区域的A记录数量没有实际限制.
但它实际上是否会从客户的角度出发?
以下是我从Wireshark查看的客户处获得的信息:
(在新浏览器选项卡中打开图像以获取完整尺寸.)
如您所见,当我从客户端使用nslookup或ping时,它会自动发出两个查询 – 一个UDP和一个TCP.正如您所知,我可以塞进UDP数据报的最多是512字节,因此一旦超过该限制(如20-30个IP地址),就必须使用TCP.但即使使用TCP,我也只能获得testing.testing.com的一小部分A记录.每个TCP查询返回1000条记录. A记录列表随每个连续查询正确旋转1,与您期望循环DNS工作的方式完全相同.通过所有这些循环将需要数百万次查询.
我不知道这将如何帮助您建立大规模可扩展,有弹性的社交媒体网络,但仍有您的答案.
编辑:在你的后续评论中,你问为什么我认为这通常是一个坏主意.
>假设我是一般的互联网用户,我想连接到您的服务.我在我的网络浏览器中输入www.bozho.biz.我的计算机上的DNS客户端返回1000条记录.好吧,运气不好,列表中的前30条记录没有响应,因为A记录列表没有保持最新,或者可能存在影响互联网大块的大规模中断.假设我的网络浏览器在每个IP上移动并且尝试下一个IP之前有超时5秒的超时时间.所以现在我坐在这里盯着一个旋转的沙漏,等待你的网站加载2分半钟.是不是没有人有时间.而我只是假设我的网络浏览器或我用来访问您服务的任何应用程序甚至会尝试超过前4或5个IP地址.它可能不会.>如果您使用自动清理并允许对DNS区域进行未经验证或匿名更新,以期保持A记录列表的新鲜……想象一下这将是多么不安全!即使您设计了一些系统,其中客户端需要事先从您那里获得的客户端TLS证书才能更新区域,因此地球上任何地方的一个受损客户端将启动僵尸网络并破坏您的服务.传统的DNS虽然没有众包,但却不安全.>浪费带宽使用和浪费.如果每个DNS查询都需要32千字节或更多的带宽,那么根本不能很好地扩展.> DNS循环法无法替代正确的负载平衡.它无法从一个节点恢复或在事物中间变得不可用.如果他们连接的节点发生故障,您是否要指示您的用户执行ipconfig / flushdns? GSLB和Anycast等问题已经解决了这些问题.>等