我正在开发免费的 DNS 服务,当两个或多个客户尝试添加同一个域(几乎同时)时,我无法完全解决这种情况。
以下是处理这种情况的一些解决方案,但它们似乎都不是好的或可行的。
解决方案1:
为每个客户使用不同的名称服务器对
创建多个不同的 ns(如 ns1、ns2.. ns49、ns50、ns51..)允许我使用不同的服务器对,不同的客户尝试添加相同的域。
真正的所有者将仅在域注册商中使用他的一对(即:ns8 和 ns9),因此只有他的记录将被接受并传播到整个互联网。
解决方案1的问题:
它容易受到大规模攻击
如果恶意人员创建了非常多的帐户,那么如果所有这些帐户都尝试添加相同的域,那么就不可能拥有相同数量的对。
解决方案2:
只允许一个用户帐户使用域
如果一个用户已经添加了一个特定的域并在他的域注册器中正确配置了它,那么其他帐户将无法添加相同的域。
解决方案2的问题:
宽限期
验证添加的域可能需要数小时(如果我错了,请纠正我)。这将需要我给一个“宽限时间”,以允许每个最近添加的域保持“未经验证”,直到我们可以通过相应的域注册商对其进行验证。
此外,在此宽限期内,除非我们使用解决方案 1(但请记住#1 存在漏洞),否则没有其他帐户能够添加相同的域。
免费(或付费)DSN 服务如何解决这个问题?他们的方法是什么(因为任何用户显然都可以不受限制地添加它想要的任何域)?
编辑:关于重复
我的问题和Era 的问题略有不同。我是供应商而不是客户。而Era的问题,也只是从客户的眼中指向了问题所在。
此外,甚至来自 DigitalOcean 的@Jacob 也表示他们采用“先到先得”的方法,我试图避免这种方法,这也是我的问题存在的原因。
解决方案 1 可用于对域的用户控制进行身份验证。在您的问题中,您似乎对自己施加了一些限制,可能是由于一些误解,或者可能是因为您希望它在不验证域的用户控制权的情况下工作。
假设您确实验证了用户对域的控制权,上述三个观察结果中的任何一个都应该填补您提出的解决方案 1 中的空白以使其工作。
如果您想要一个无需用户首先验证他们对域的控制权的解决方案,我只能建议您依赖 IPv6。
混合解决方案可能会为用户提供顺畅的流程。我会设计如下:
kasperd-ns1-ds.example.com
.用户可以创建他们喜欢的任何区域名称。它将立即在该用户的 IPv6 地址上可用。
在 IPv4 地址(必须在用户之间共享)上为特定区域提供服务将采用先到先得的方式。但是任何后来的用户都可以通过将域的 NS 记录指向您分配给该用户的任何主机名来验证对域的控制。域的认证控制优于先到原则。