当我注册新域名时,我会通过在注册商的设置中为其分配域名服务器将其发送给托管服务提供商。例如,使用 Digital Ocean,我输入以下内容:
ns1.digitalocean.com
ns2.digitalocean.com
ns3.digitalocean.com
然后,我在服务器的 A 记录中添加域设置。我突然想到,同一托管服务提供商的其他人都可以使用我拥有的域添加 A 记录。
有什么可以防止这种情况发生?如果使用相同域名服务器的两个不同服务器尝试通过 A 记录为自己分配一个域,那么当您在浏览器中输入该域时,该域实际上会在哪里解析?什么可以防止同一 DNS 服务器上的域名冲突?
答案1
别介意下面的评论部分,也别介意编辑历史中的先前答案。经过大约一个小时与朋友的交谈(感谢@joeQwerty、@Iain 和@JourneymanGeek),以及一些愉快的讨论,我们终于搞清楚了你的问题和整个情况。抱歉一开始就粗鲁无礼,完全误解了情况。
让我们逐步完成该过程:
wesleyisaderp.com
假设您在 NameCheap.com 购买。- Namecheap 作为您的注册商,您将在那里填充 NS 记录。假设您实际上想在 Digital Ocean 上托管 DNS 区域。
- 您将崭新的域名的 NS 记录指向
ns1.digitalocean.com
和ns2.digitalocean.com
。 - 但是,假设我能确定你已经注册了该域名,此外,您已将您的 NS 记录更改为 Digital Ocean 的。然后我抢先获得了 Digital Ocean 帐户,并将 wesleyisaderp.com 区域添加到我自己的帐户中。
- 您尝试添加区域*你的*帐户,但 Digital Ocean 说该区域在他们的系统中已经存在!噢不!
- 我 CNAME
wesleyisaderp.com
到wesleyisbetterthanyou.com
。 - 有趣的事情发生了。
我和一些朋友刚刚试过了这种场景,确实有效。如果@JoeQwerty 购买了一个域名并将其指向 Digital Ocean 名称服务器,但我已经将该区域添加到我的帐户中,那么我就是区域管理员,可以随心所欲地使用它。
但是请考虑一下,有人必须先将区域添加到他们的 DNS 帐户,然后您必须将 NS 记录指向同一主机的名称服务器,以免发生任何恶意行为。此外,作为域所有者,您可以随时切换 NS 记录,并将解析从坏区域主机移开。
发生这种情况的可能性至少可以说有点低。据说,从统计学上讲,你可以洗一副 52 张扑克牌,得到一个其他人从未得到过的顺序,而且其他人永远不会得到。我认为这里也存在同样的道理。有人利用这一点的可能性非常低,而且有更好的捷径,所以这种情况可能不会在野外偶然发生。
此外,如果您在注册商处拥有一个域名,而有人恰好在 Digital Ocean 等提供商处创建了一个与您发生冲突的区域,我敢肯定,如果您提供所有权证明,他们会要求在其帐户中创建该区域的人将其删除,因为他们不是域名所有者,所以该区域没有存在的理由。
但是 A 记录怎么样
第一个拥有区域的人(例如 Digital Ocean)将是控制该区域的人。您不能在同一个 DNS 基础架构上拥有多个相同的区域。因此,例如,使用上面的愚蠢名称,如果我在 Digital Ocean 上将 wesleyisaderp.com 作为区域,则 Digital Ocean 的 DNS 基础架构上的其他人都无法将其添加到他们的帐户中。
有趣的是:我确实将 wesleyisaderp.com 添加到了我的 Digital Ocean 帐户!继续尝试将其添加到您的帐户中。这不会造成任何损害。
因此,您无法向 wesleyisaderp.com 添加 A 记录。它全部属于我。
但是关于...
正如@Iain在下面指出的那样,我上面的第4点实际上太冗长了。我根本不需要等待、策划或策划。我可以直接千帐户中的区域,然后坐下来等待。从技术上讲。如果我创建数千个域,然后等待它们注册,然后希望它们使用我设置了区域的 DNS 主机……也许我可以做一些坏事?也许?但可能不会?
向 Digital Ocean 和 NameCheap 致歉
请注意,Digital Ocean 和 NameCheap 并非独一无二,与此场景无关。这是正常行为。他们在所有方面都无可指责。我之所以使用它们,只是因为这是给出的例子,而且它们都是非常知名的品牌。
答案2
除了 Wesley 的出色回答之外,我想补充一点,已经有一个解决方案可以防止这种情况发生。它被称为 DNSSEC。
基本情况如下:
- 您注册自己的域名(在这里我将使用著名的名称
wesleyisaderp.com
,仅此而已。) - 您可以向注册商注册您的名称服务器,通常是通过一个使用用户名/密码组合进行身份验证的 Web 界面进行注册。
- 您还可以创建公钥/私钥对,并以 DNSKEY 记录的形式将公钥上传到您的注册商。(这就是注册商如何为顶级域的根服务器设置信任链的方式 - 在本例中为 的根服务器
.com
。)同样,您在使用自己的用户名/密码组合登录时上传此密钥,因此它与您的域相连,而不是与其他人的域相连。 - 您前往名称服务器,输入您的记录,然后使用您的私钥签署生成的区域文件。或者,如果您有 DNS 托管服务的 Web 界面,您可以将私钥上传给他们,以便他们可以签署区域文件。
- 当 Wesley 如此粗鲁地试图劫持您的域名并将其 CNAME 到 时
wesleyisbetterthanyou.com
,他的记录不会被 .com 根域服务器接受,因为它们没有使用正确的密钥签名。如果您的 DNS 托管提供商很聪明,他们会立即检查这一点,甚至不允许他尝试向该域添加记录,除非他拥有正确的私钥。 - 当你输入自己的记录时,它们将由正确的密钥签名,因此它们将会起作用。
- 现在你可以坐下来嘲笑韦斯利了。
(在最初的案例中,也就是 Wesley 描述的案例中,主要的错误在于 Digital Ocean 在允许某人为域名设置 DNS 记录之前没有验证域名的所有权。不幸的是,他们并不是唯一这样做的人;我知道至少有一家瑞典注册商也存在同样的问题。)
答案3
只要您在告诉注册商使用他们的名称服务器之前在 DigitalOcean 上声明对该域名的所有权(即将其与您的帐户关联),您就没问题。
如果有人已将您的域名与其帐户关联,您会在 DigitalOcean 名称服务器获得授权之前发现。如果发生这种情况,请与 DigitalOcean 联系,让该人退出其帐户。
根据最佳实践,{ns1,ns2,ns3}.DigitalOcean.com 不会充当托管在其他地方的域名的递归解析器。如果它们确实充当了递归解析器,并且如果 DigitalOcean 托管的服务器将这些服务器用作通用解析器,那么问题就会大得多。尽管众所周知这是不好的做法,但找到做错事的托管服务提供商可能并不难,这为滥用提供了可能性。
答案4
我认为这个问题意味着任何人都不应该使用此类名称服务器(例如 Digital Ocean 的名称服务器)作为解析器,因为任何人都可以为现有域名创建名称服务器。争夺域名控制权无关紧要,因为可以轻松证明域名所有权,但事实上,某人可以将任何尚未托管在 Digital Ocean 上的现有域名定向到他们想要的任何地方。
底线:不要信任任何不需要域名所有权证明的托管服务的 DNS 服务器(例如,通过上面建议的方法可以轻松快速地完成:首先在域上添加具有特定值的 TXT 记录,例如 Microsoft O365 和 Google 所做的)。