假设我拥有两台服务器,分别具有静态 IPv4 地址a.a.a.a
和b.b.b.b
。我可以在它们上运行自己的 DNS 服务器吗?这样我和我的朋友就可以在世界任何地方设置a.a.a.a
和b.b.b.b
解析器的设置,并拥有自己的玩具 DNS 根区域,我们可以在其中注册任何级别的任何域名,而无需依赖注册商?这有点像内部 DNS,但没有私有网络的边界。如果不能,究竟是什么阻止了我?
假设我拥有两台服务器,分别具有静态 IPv4 地址a.a.a.a
和b.b.b.b
。我可以在它们上运行自己的 DNS 服务器吗?这样我和我的朋友就可以在世界任何地方设置a.a.a.a
和b.b.b.b
解析器的设置,并拥有自己的玩具 DNS 根区域,我们可以在其中注册任何级别的任何域名,而无需依赖注册商?这有点像内部 DNS,但没有私有网络的边界。如果不能,究竟是什么阻止了我?
是的。这只是一个普通区域。人们既使用私有根服务器,也使用向公众开放的大型“备用根”项目。(例如,dn42 主要将前者作为练习,使用内部根服务器添加“dn42”TLD,而 OpenNIC 则执行后者。)
一般而言,互联网几乎没有什么特别之处;您可以像在 19X0 年代建造的那样自己重建一切 - 您自己的 DNS 根、您自己的网络间 BGP,然后您就拥有了互联网。(再次强调,dn42 是一个同时完成这两项任务的具体示例。)
但为了实现您要求的结果(即注册任何域名的能力),我认为根区域并不是您真正想要的。
玩具根区(按要求)
如果您特意想要从头开始构建一个复制互联网,那么任何权威的名称服务器软件(例如 BIND9)都可以用于像任何其他区域一样托管根区域 - 它将被命名
.
或""
取决于配置语法。这样的设置将是一片空白;除非您手动从 ICANN 的根区域复制这些内容,否则它将不具有通常的 .com 或 .org。(根区域是公开的,您可以将其下载为文本文件,然后添加更改 - 但不要忘记删除所有 DNSSEC 签名,因为这些签名将失效。)
如果这样做,则需要对每个级别重复该过程。例如,当根区域仍为新区域时,您可以直接example.com
向其添加自定义委派。但是,如果您已经添加了一般委派com
(以便您可以浏览 serverfault.com),则您无法再覆盖特定子域 - 因为您已将权限委托给com
其他地方。(此时,您需要重复“复制和编辑”过程com
,这是一个问题,因为 .com 的区域内容不公开。)我不确定上述内容是否完全正确;尽管理论上它不应该起作用,但它可能会起作用。
更简单的自定义域选项
对于您的目标,从根开始是没有必要的,因为 OS 存根解析器不会进行迭代查询,也不关心区域边界 - 它们让指定的服务器进行所有解析 - 因此设置一个特殊的解析器会容易得多,该解析器将您的自定义域作为权威区域(或某种其他类型的覆盖)位于标准 ICANN 根 DNS 之上。
例如 - 从普通的 BIND9 或 Windows Server 作为标准 DNS 的解析器开始(但要小心将解析器暴露给 Internet),然后为某些域定义您自己的权威区域,并且该域对于使用您的服务器的任何人而言都会立即“存在”。
(其他区域类型(例如“转发”区域)也可以工作,例如,您可以设置解析器 A,将 fake.com 转发到权威服务器 B。Unbound 或 Dnsmasq 也可以在较小范围内使用;前者有单独的覆盖,但我认为当前版本能够托管完整区域。)
这是非常常见的事情;这就是您的 wifi 路由器使用“.home”或“.lan”名称的方式,也是许多企业网络拥有其内部域的方式——数千个 Windows DNS 服务器除了作为通用解析器之外,还托管用于 Active Directory 的虚构域。
(虽然它可能会给 DNSSEC 带来一些问题,但大多数操作系统实际上并不会自行进行 DNSSEC 验证,因此您可能不需要对此做任何特殊的事情。)
换句话说,拥有根区域并不能赋予您针对较低级别的细粒度“注册商绕过”权力;它只赋予您完全替换 TLD 注册中心的权力。相反,您的朋友会将您的服务器用作他们的主要解析器(即根服务器的对立面!),这让您可以创建单独的自定义域。
附注:拥有一台服务器和一个 IP 地址就足够了。传统上,为了可靠性,需要两个,但这是 NIC 策略的问题,而不是 DNS 的基本问题。