注册
登录
新闻动态
其他科技
返回
替代 DNS 根
作者:
糖果
发布时间:
2024-03-19 06:41:22 (1月前)
来源:
https://scholz.ruhr/post
注意:*从技术上讲,我们不会设置“真正的”替代 DNS 根,尽管它会做完全相同的事情。稍后我将解释这些差异。* 您真的可以信任您的域名注册商吗?毕竟,他们可以随时决定删除您的域。一个解法?成为您自己的注册商。但由于所有 TLD 都已由某人管理,而注册新 gTLD 将花费您大约 185,000 美元: 评估费为 185,000 美元。申请人在注册时需要为每个请求的申请位置支付 5,000 美元的押金。押金将用于抵扣评估费。根据具体的申请途径,可能会收取其他费用。有关付款方式、额外费用和退款时间表的详细信息,请参阅《申请人指南》第 1.5 节。 即使您选择该选项,理论上 ICANN 也可以按照他们的意愿删除您的 TLD。 ### DNS速成课程 另一个更有趣的解决方案是创建替代 DNS 根。由于 DNS 是分布式协议,所有(全局)DNS 请求都从根服务器开始(根服务器本身的 IP 地址需要引导进程,并且通常与您在根提示文件中使用的 DNS 软件一起打包) . 例如,如果您想请求 scholz.ruhr,解析此域的第一步是找出如何解析 .ruhr 域: merlin@laptop:~> dig scholz.ruhr +trace ; <<>> DiG 9.16.19 <<>> scholz.ruhr +trace ;; global options: +cmd . 55342 IN NS h.root-servers.net. . 55342 IN NS i.root-servers.net. . 55342 IN NS j.root-servers.net. . 55342 IN NS k.root-servers.net. . 55342 IN NS l.root-servers.net. . 55342 IN NS m.root-servers.net. . 55342 IN NS a.root-servers.net. . 55342 IN NS b.root-servers.net. . 55342 IN NS c.root-servers.net. . 55342 IN NS d.root-servers.net. . 55342 IN NS e.root-servers.net. . 55342 IN NS f.root-servers.net. . 55342 IN NS g.root-servers.net. ;; Received 811 bytes from 192.168.255.1#53(192.168.255.1) in 4 ms ruhr. 172800 IN NS anycast24.irondns.net. ruhr. 172800 IN NS anycast23.irondns.net. ruhr. 172800 IN NS anycast10.irondns.net. ruhr. 172800 IN NS anycast9.irondns.net. ruhr. 86400 IN DS 25131 10 2 EC453960C396742EFA2EF815FA9C9DBA146E838F86F11643704C1630 424F4E78 ruhr. 86400 IN RRSIG DS 8 1 86400 20210904050000 20210822040000 26838 . Imh3craEWTqcXKij72tVd20uWbDfHdTpy/H6jpes0lPbfRAcxlHMENL2 nyIc+cFWXoPQhpYaJFRJb0okg/HOx+btyFWrWv36sgbp3p/QkbsaZ3gC 4dYZD+wymjudx4rsfNdZH/Qo9k0+QvOCYpgOqy7xh2VjDch5i+ZA3YzY KUGgIxG7NgfufgJe9XwM4FR6uHctn7YvnnVz3r3NbzxNuvBJiuIj61ZK EVgAik3hZQsA/0bSeiXU7Qj9w9h1DiE9SAhlTBp1zxDNjJL8uEZ8frhs /PKpJdpNEo1km00H3ir8VioyYSKkkReaRO1v4Wj8Av5MnHbKM3Jbrjtu vVuosA== ;; Received 685 bytes from 192.112.36.4#53(g.root-servers.net) in 24 ms 如您所见,第一个请求发送到根服务器(其顺序是随机的以进行负载平衡)以了解如何解析 .ruhr 域。之后,解析像往常一样递归地继续: scholz.ruhr. 86400 IN NS freedns4.registrar-servers.com. scholz.ruhr. 86400 IN NS freedns2.registrar-servers.com. scholz.ruhr. 86400 IN NS freedns3.registrar-servers.com. scholz.ruhr. 86400 IN NS freedns1.registrar-servers.com. tmkqchcq1683nopo94uhefgo2qdrakov.ruhr. 43200 IN NSEC3 1 0 12 36343552179D4DFB TMM19QLSJ3M9E1CLTLMICPCCT4UFDTGU NS tmkqchcq1683nopo94uhefgo2qdrakov.ruhr. 43200 IN RRSIG NSEC3 10 2 43200 20210902050916 20210819050916 27845 ruhr. Xb22peKB+JjxEpSs9wdebhwnogbbBJLhsak3g2uq5qA0NAIsQtnUuVxB liXVZVEM1OU46lhBOM4csv2yvVGUK2s7h67Rvc3FJnJwAaWDfw1wyCaY 7VEO/WW+7NyMzpsy3Pz3VbUowxUdVvffuO9G9jkY8xfok3/WbRSrGdOL tSg= ;; Received 399 bytes from 195.253.64.11#53(anycast9.irondns.net) in 27 ms scholz.ruhr. 300 IN A 152.70.184.10 ;; Received 56 bytes from 45.58.122.82#53(freedns1.registrar-servers.com) in 87 ms 根服务器包含所有 TLD 权威名称服务器的列表。您可以在此处下载它们,它们甚至可以让您将 AXFR 请求发送到某些根服务器,因此您还可以通过 dig 下载所有 TLD 名称服务器的列表:dig AXFR . @lax.xfr.dns.icann.org ### (假的)替代 DNS 根 回到注册商问题:您如何成为注册商(免费)?理论上,您可以替换所有客户端上的 Root Hints 文件。至少可以说这很麻烦(如果不是不可能的话,想想手机、游戏机……)。另一种更简单的选择是使用具有“修改过的”根提示文件的 DNS 服务器,该文件可以解析您自己的所有 TLD 并回退到普通域的官方 TLD。这样,您只需将客户端指向几乎每个客户端都支持的新 DNS 服务器。已经有供应商为您提供此类服务器,例如OpenNIC。但是使用别人的服务器很无聊,所以让我们自己设置。 我将使用大量免费提供的 Oracle Cloud aarch64 VM 。此外,我将使用 Oracle Linux 8,所以一切都应该在 RedHat Linux 8、CentOS 8、RockyLinux 8、AlmaLinux 8、VzLinux 8 上运行相同,并且在基本上所有其他类 UNIX 系统上进行一些小的修改。 我们将需要至少 2 台机器作为我们的假替代 DNS 根。理论上,我们可以在单个 VM 上运行所有这些,但其中的乐趣在哪里?我们将使用: 修改后的 DNS 解析器:此解析器将用作 DNS 递归器和我们区域的权威名称服务器。在适当的生产设置中,您只想从解析器中提供 NS 记录。 用于验证一切是否正常的 Web 服务器(我将使用此博客) 修改后的 DNS 解析器 这可能是最困难的事情,但仍然很容易做到。我将暂时跳过 VM 创建和初始系统设置(例如复制 SSH 密钥、更新系统)。在这一点上,我已经遇到了一个障碍,因为 PowerDNS 只提供 x86_64 存储库。所以我选择使用 BIND: sudo dnf install bind sudo systemctl enable --now bind 此时,来自 localhost 的访问应该已经可以工作了: [opc@adn-root-s-cin-defra-843f ~]$ dig scholz.ruhr. @localhost ; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> scholz.ruhr. @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48815 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 91a0df1eec94c9855a888c0661227b53a4fb7f069b94dce0 (good) ;; QUESTION SECTION: ;scholz.ruhr. IN A ;; ANSWER SECTION: scholz.ruhr. 288 IN A 152.70.184.10 ;; AUTHORITY SECTION: scholz.ruhr. 86353 IN NS freedns3.registrar-servers.com. scholz.ruhr. 86353 IN NS freedns1.registrar-servers.com. scholz.ruhr. 86353 IN NS freedns4.registrar-servers.com. scholz.ruhr. 86353 IN NS freedns2.registrar-servers.com. ;; Query time: 0 msec ;; SERVER: ::1#53(::1) ;; WHEN: Sun Aug 22 16:29:07 GMT 2021 ;; MSG SIZE rcvd: 197 为了使服务器可以从外部访问,我们必须修改/etc/named.conf. 我们将更改listen-on port 53 { 127.0.0.1; };tp listen-on port 53 { any; };(与 ipv6 相同)并allow-query { localhost; };更改为allow-query { any; };. 请记住,这会使服务器容易受到 DNS 放大攻击,如配置文件中所述。这也是为什么在我发表这篇文章后我的测试服务器可能都不可用的原因。在适当的生产环境中,您可以限制允许的客户端或实施针对这些攻击的保护。 另外,请记住为端口 53 打开防火墙:sudo firewall-cmd --add-port=53/udp --zone=public --permanent && sudo firewall-cmd --reload. 您的云提供商可能使用的任何防火墙也是如此。此时,您应该能够使用其公共 IP 地址向您自己的服务器发送 DNS 请求。到目前为止,这是一个关于设置 DNS 解析器的“普通”教程,现在让我们进入有趣的部分。 让我们named.conf再次敞开心扉。在文件的底部,您应该找到根区域的定义: # /etc/named/zones/db.scholz zone "." IN { type hint; file "named.ca"; }; 在这种情况下,named.ca是我们的 Root Hint 文件。我们将在此配置块中附加以下内容: # /etc/named/zones/db.scholz zone "scholz" IN { type master; file "/etc/named/zones/db.scholz"; }; 使用我的名字作为 TLD是一个糟糕的主意,因为 ICANN 可能会决定创建一个 scholz gTLD,或者其他人可能已经在使用一个 scholz TLD。毕竟它们不是保留的,所以一切皆有可能。 之后,我们将填写/etc/named/zones/db.scholz最低限度: @ IN SOA ns1.scholz. admin.scholz. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL IN NS ns1.scholz. ns1.scholz. IN A 0.0.0.0 blog.scholz. IN A 152.70.184.10 当然,在生产设置中,您应该使用多个名称服务器。将 0.0.0.0 替换为您的递归器的 IP 地址或使用适当的权威名称服务器。该blog.scholz.条目用于测试事物并指向为本博客提供服务的 VM。 ### 配置客户端 这是退出部分。我们重新配置我们的笔记本电脑、手机或其他任何东西以实际使用我们修改后的名称服务器。如果您已经深入了解本文,您可能知道如何更改自己的 DNS 服务器,因此我们将直接尝试一切: ### 有用! 除了不匹配的证书外,一切都按预期工作!请注意,您必须输入包含 https 部分的 URL,否则大多数浏览器会因为无法识别 TLD 而只使用搜索引擎。丢失的证书可能是下一篇文章的主题。 ### 真正的替代 DNS 根 要拥有真正的替代 DNS 根,我们必须用两台服务器替换我们的单个解析 DNS 服务器:一台使用其他一些根服务器,另一台充当根服务器。结果基本相同,除了其他人可以轻松设置指向我们的根服务器的 DNS 解析器这一事实。 ### 根区文件和根服务器 为根区提供服务几乎是微不足道的:如前所述,IANA 让您下载他们的根区文件。为它们提供服务就像默认的 BIND 安装一样简单,递归关闭并.指向该文件的区域。之后,您可以将所需的任何 TLD 添加到根区文件。只需重新启动 BIND 实例,所有使用您的根服务器的 DNS 解析器都将接受该新 TLD。 ### 设置解析器 “默认” BIND 安装已设置为充当普通解析器(如果默认情况下仅适用于 localhost)。剩下要做的就是用以下内容替换root.hint(或named.root,取决于系统)文件: . 3600000 NS NS1.EXAMPLE. NS1.EXAMPLE. 3600000 A 0.0.0.0 NS1.EXAMPLE . 3600000 AAAA :: . 3600000 NS NS2.EXAMPLE. NS2.EXAMPLE. 3600000 A 0.0.0.0 NS2.EXAMPLE . 3600000 AAAA :: 您也可以只附加到现有文件,以“向后兼容”。默认的根提示可在https://www.internic.net/domain/named.root获得。不过要记住的一件事是,系统更新将覆盖该文件,因此您应该将其移至其他位置。 也许我会在另一篇文章中这样做。这篇文章更像是一个“入门”指南。 ### 边注 在技术层面上,许多 DNS 提供商已经实施了虚假 TLD,尽管它们只存在 CHAOS 记录。CHAOS 记录用于获取有关您正在使用的 DNS 服务器的信息。例如,当使用 CloudFlare 的 1.1.1.1 时,您可以发送 CHAOS TXT 请求id.server以找出您正在使用的 AnyCast 位置: merlin@workstation:~> dig CHAOS TXT id.server. @1.1.1.1 ; <<>> DiG 9.16.6 <<>> CHAOS TXT id.server. @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28916 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;id.server. CH TXT ;; ANSWER SECTION: id.server. 0 CH TXT "DUS" ;; Query time: 0 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mon Aug 23 20:57:32 CEST 2021 ;; MSG SIZE rcvd: 43 BIND 服务器还提供 CHAOS 记录: merlin@workstation:~> dig CHAOS TXT version.bind @4.2.2.1 ; <<>> DiG 9.16.6 <<>> CHAOS TXT version.bind @4.2.2.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58630 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;version.bind. CH TXT ;; ANSWER SECTION: version.bind. 1 CH TXT "Version: recursive-main/20717463" ;; Query time: 20 msec ;; SERVER: 4.2.2.1#53(4.2.2.1) ;; WHEN: Mon Aug 23 20:58:56 CEST 2021 ;; MSG SIZE rcvd: 86 merlin@workstation:~> dig CHAOS TXT hostname.bind @4.2.2.1 ; <<>> DiG 9.16.6 <<>> CHAOS TXT hostname.bind @4.2.2.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16012 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 8192 ;; QUESTION SECTION: ;hostname.bind. CH TXT ;; ANSWER SECTION: hostname.bind. 1 CH TXT "pubntp1.frf1.Level3.net" ;; Query time: 30 msec ;; SERVER: 4.2.2.1#53(4.2.2.1) ;; WHEN: Mon Aug 23 20:59:29 CEST 2021 ;; MSG SIZE rcvd: 78
收藏
举报
1 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论