在区块链上托管 DNS 域
在区块链上托管 DNS 域
原文:https://medium.com/hackernoon/hosting-a-dns-domain-on-the-blockchain-58a41dc50028
TL;dr:如果你去 docs.ens.domains ,你的 DNS 查询是由以太坊区块链提供的!它是 DNS,托管在以太坊上,可以用于任何 DNS 域。
今天,我们将在以太坊区块链上发布托管 DNS 域名的实验支持。这建立在之前关于以太坊域名服务 ENS 的工作之上,增加了一个 DNS 网关和对在 ENS 中存储 DNS 区域的支持
对于那些想尝试一下的人来说,这里有一个简单的如何在区块链托管自己域名的方法。这篇文章的目的不是解释如何设置它,而是解释这个系统如何在技术层面上工作——将两个不同的命名系统粘合在一起。
背景
首先,简单介绍一下背景。您可能已经知道,DNS 是基于“区域”运行的。一个区域代表一个权限划分,一个名称服务器负责返回对其托管的一个或多个区域中的查询的权威回答,同时提供对其他托管层级中更低区域的名称服务器的引用。
例如,当您解析“docs.ens.domains”时,您的解析器首先会咨询其中一个 DNS 根服务器,他们的回答大意是他们不知道答案,但这里有一个人可能知道,并列出“的名称服务器”。域。然后你的解析器会问他们同样的问题,他们会给你一个‘ens . domains’的域名服务器。最后,你的解析器会询问这些域名服务器,它们会给出一个权威的回答:“docs . ens . domains CNAME readthedocs . io”。
ENS 的运作方式有些不同。与 DNS 不同,它有一个中央数据库 ENS 注册表——从域名到解析器的映射。此外,每个域都有一个所有者,他可以更新解析器地址,创建和委派子域。要查找某个域的信息,调用者首先要咨询注册中心以获得解析器地址,然后查询该解析器以获得问题的答案。就像 DNS 一样,它允许解析器实现的多样性,以及名称层次结构内的授权,但与 DNS 不同,它没有“区域”的概念。
DNS->ENS 网关如何工作
在区块链上存储 DNS 数据的简单方法是为现有的 DNS 层次结构部署一个 ENS 解析器,并期望该注册管理机构指向的解析器支持返回其域的区域信息。然后,网关可以在 ENS 注册表中查找被查询的域,获取区域数据,并满足来自该域的任何查询。
这是可行的,但是有一个关键问题:您允许谁来更新注册表?您只希望域的所有者能够更新他们的 DNS 条目,但是没有明显的方法来证明区块链上的 DNS 域的所有权——特别是因为您不能使用通常的途径来检查名称所有权,需要有人设置特定的 DNS 条目!
相反,我们采取了一种稍微不同的方法。我们允许任何人部署他们自己的 ENS 注册中心和解析器,并在上面托管他们喜欢的任何一组域。然后,它们将它们的 ENS 注册中心的地址包含在它们的域的 DNS 名称服务器记录中。由于每个人都有自己的注册中心,我们不再需要担心证明你有权利更新一个名称-没有人会去查询你的注册中心,除非它被现有的 DNS 基础设施引用。
例如,假设您在地址 0x1234ABCD 为您的域部署了一个 ENS 注册中心“myawesomedomain.com ”,并对其进行了适当的配置。为了完成这个过程,你应该去你的注册商那里,告诉他们把你的 myawesomedomain.com 的域名服务器设置为“1234ABCD.ns1.ens.domains”。
现在,当有人想要解析“www.myawesomedomain.com”时,会发生以下步骤:
- 用户的解析器做通常的递归解析,最终被告知‘myawesomedomain . com NS 1234 ABCD . NS1 . ens . domains’。他们向该地址发送查询,询问“A www.myawesomedomain.com”。
- “ns1.ens.domains”处的网关服务器接收查询。在它能够回答这个问题之前,它需要知道“www.myawesomedomain.com”是否真的托管在 ENS 上,如果是,哪个解析器负责它——所以它执行与客户端相同的查询,寻找“www.myawesomedomain.com”的名称服务器条目。最终,它会返回与客户端相同的响应,“myawesomedomain . com NS 1234 ABCD . NS1 . ens . domains”。它识别这一点,并将第一部分视为 ENS 注册中心的以太坊区块链地址。
- 现在网关服务器知道在哪里查找,它查询该地址的 ENS 注册中心,向它询问负责“myawesomedomain.com”的解析器。
- 接下来,网关服务器向解析器询问“myawesomedomain.com”的区域文件。它以紧凑的二进制形式获取 DNS 区域文件数据,并将其解包到内存中。
- 最后,网关服务器使用解包的 zonefile 数据来回答给出的原始问题“A www.myawesomedomain.com”,并将答案返回给客户端。
如果你想看看所有这些在实践中是如何实现的,GitHub 上有代码——仍在进行中。
这意味着什么
首先,这并不自动比常规的 DNS 服务器更能抵抗审查。该区域本身变得很难审查,但你的用户要发现这一点,他们仍然需要通过父区域中的 NS 记录来引用它,所以它仍然很容易以这种方式被关闭或阻止。将 DNS 根转移到以太坊将通过区块链支持的每一次查找来解决这个问题,但显然这不是我能在技术演示中破解的。这样做还会引起有关 DNS 区域枚举的问题:许多人不希望陌生人能够列出他们所有的 DNS 记录,而目前的解决方案将使这成为可能。
同样,它也不会自动变得更安全;您仍然必须信任来自父区域的推荐,并且如果您使用公共网关(而不是运行您自己的 DNS 网关),您必须信任它准确地响应。DNSSEC 可以在这里使用,就像在常规的域名系统,以更好地保护东西。同样,一个以以太坊为根的系统将解决这个问题,并完全消除对 DNSSEC 的需求!
这个是什么 是一种非常方便的方式,以这样一种方式将域名服务器数据分发给域名服务器,他们知道只要他们可以信任自己的 DNS 解析,他们就可以信任他们正在获取的数据的有效性,并且它是由被授权这样做的人编写的。它允许这种方式,这意味着任何人都可以利用公共 DNS 网关,而不必直接与它们交互或配置它们。这也是 ENS 的一个简洁的技术演示。
黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。
要了解更多信息,请阅读我们的“关于”页面、在脸书上点赞/给我们发消息,或者简单地说, tweet/DM @HackerNoon。