当我将我的 GoDaddy 域名指向运行我的 Web 服务器的 GCP VM 的 IP 地址时,我所要做的就是:
- 将 GoDaddy 域名服务器更改为 GCP 域名服务器
- 在 GCP DNS 中为我的域创建指向我的 IP 地址的 A/CNAME/SOA 条目
是什么阻止我对世界上的任何域名做同样的事情?
事实上,我确实这样做了:
我为 google.ca 创建了一个 CNAME、A、SOA 条目,指向我的虚拟机外部公共 IP 地址,但没有什么能阻止我。现在我不希望所有 Google 的流量都开始指向我想要的任何地方(那将是一个有趣的 DDOS),但这里发生了什么?我遗漏了什么?
我的意图并无不道德之处。我只是想了解这一切是如何运作的。
答案1
没有什么可以阻止你。但是,也没有人会看一看。这是因为真正的域名没有指向你的名称服务器(GCP DNS)。只能通过直接向你的名称服务器索取这些记录才能获得它们。
DNS 查询从根目录开始:
$ dig google.ca +trace
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> google.ca +trace
;; global options: +cmd
. 68215 IN NS h.root-servers.net.
. 68215 IN NS k.root-servers.net.
. 68215 IN NS i.root-servers.net.
. 68215 IN NS g.root-servers.net.
. 68215 IN NS a.root-servers.net.
. 68215 IN NS b.root-servers.net.
. 68215 IN NS d.root-servers.net.
. 68215 IN NS f.root-servers.net.
. 68215 IN NS l.root-servers.net.
. 68215 IN NS e.root-servers.net.
. 68215 IN NS j.root-servers.net.
. 68215 IN NS m.root-servers.net.
. 68215 IN NS c.root-servers.net.
;; Received 553 bytes from 192.168.2.5#53(192.168.2.5) in 31 ms
ca. 172800 IN NS c.ca-servers.ca.
ca. 172800 IN NS x.ca-servers.ca.
ca. 172800 IN NS any.ca-servers.ca.
ca. 172800 IN NS j.ca-servers.ca.
;; Received 626 bytes from 202.12.27.33#53(m.root-servers.net) in 24 ms
google.ca. 86400 IN NS ns1.google.com.
google.ca. 86400 IN NS ns2.google.com.
google.ca. 86400 IN NS ns3.google.com.
google.ca. 86400 IN NS ns4.google.com.
;; Received 603 bytes from 199.253.250.68#53(x.ca-servers.ca) in 42 ms
google.ca. 300 IN A 172.217.16.163
;; Received 54 bytes from 216.239.32.10#53(ns1.google.com) in 22 ms
(为了简洁起见,我删除了 DNSSEC 内容。)
当然,通常您不会亲自执行迭代查询。递归 DNS 服务器会为您执行此操作,而且速度要快得多。
答案2
假设现在是 1980 年,电话簿仍然很流行。有什么能阻止你去电话簿中 Kmart 的条目,用你商店的电话号码替换他们的电话号码呢?绝对没有。你可以自由地这样做,如果你使用那本电话簿,每次你试图打电话给 Kmart,你都会接到你自己的商店的电话。你可以随心所欲地重新标记电话号码。
问题是,其他人都有自己的电话簿,他们不会看你的。除非你能闯入电话公司并更改 Kmart 的电话号码那里这样,他们发出的电话簿上就会有您公司的电话号码,您就不会拒绝与 Kmart 做任何生意。
同样,如果您觉得输入 incrediblelongdomainnamethattakesaridiculouslylongtimetotime.com 很累,而且不想依赖自动完成功能,您可以自由设置一个服务器,将 short.com 解析为 incrediblelongdomainnamethattakesaridiculouslylongtimetotime.com 的 IP 地址,并让您的计算机使用该服务器来解析域名。但除非您可以让其他人的计算机也使用该服务器,否则您无法影响他们在地址栏中输入 short.com 时发生的情况。
答案3
所以我的问题是,是什么阻止我对世界上任何域名做同样的事情?事实上,我做到了。
困难的部分是获取这些数据,包括NS
安装在名称服务器上的名称服务器的记录.ca
。他们可能不会让您这样做,第三方将通过从根向下查询名称服务器来解析域名,因此(全局)根首先,它将地址提供给名称.ca
服务器,名称服务器将地址提供给.google.ca
名称服务器。
当然,如果您将这些记录安装在组织的名称服务器中,那么组织内的任何人都会看到您设置的数据。(好吧,假设他们使用组织的名称服务器,而不是直接使用 8.8.8.8 之类的服务器。)但是,当有人尝试在那里打开 HTTPS 连接时,他们会收到错误,因为组织外部没有 CA 会为该域签署您的密钥。(当然,可以通过在组织内设置自己的 CA 来规避这种情况,但这是另一回事。)
答案4
尝试通过https://howdns.works 它以非常有趣和易于理解的方式介绍了迭代和递归 DNS 及其工作原理。Daniel 的回答几乎涵盖了所有需要的内容。