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