是什么阻止我将“google.ca”的 A 名称条目设置为我想要的任何 IP 地址?

Sed*_*lah 56 networking dns cname

当我将我的 GoDaddy 域名指向运行我的 Web 服务器的 GCP VM 的 IP 地址时,这就是我所要做的:

  1. 将 GoDaddy 域名服务器更改为 GCP 域名服务器
  2. 在 GCP DNS 中为我​​的域创建 A/CNAME/SOA 条目到我的 IP 地址

是什么阻止我对世界上的任何域做同样的事情?

事实上,我做到了:

截屏

我为 google.ca 创建了一个 CNAME、A、SOA 条目到我的虚拟机外部公共 IP 地址,但没有什么能阻止我。现在我不希望 Google 的所有流量都开始指向我想要的任何地方(这将是一个有趣的 DDOS),但是这里发生了什么?我错过了什么?

我的意图并非不道德。我只是想了解这一切是如何运作的。

Dan*_*l B 83

没有什么能阻止你。然而,也没有人会去看。那是因为真正的域没有指向您的名称服务器 (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
Run Code Online (Sandbox Code Playgroud)

(为了简洁起见,我删掉了 DNSSEC 的内容。)

通常,您当然不会自己执行迭代查询。递归 DNS 服务器也会为您完成这项工作,而且速度要快得多。

  • 值得注意的是,[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) 是一种缓解措施。即使要设置带有知名站点记录的私有 DNS,然后设置这些站点的虚假版本,尝试访问这些站点的用户也会被其浏览器重定向到该站点的 HTTPS 版本,这要么失败或显示无效证书警告。 (9认同)
  • @ilkkachu HSTS 缓解措施是为了响应拥有解析为恶意 IP 的私有 DNS 服务器,而不是访问权威名称服务器。在颁发证书之前,让我们加密从多个位置解析站点并从多个 IP 查询。HKP 将进一步缓解恶意证书。 (8认同)
  • 如果他控制给定网络的名称服务器(例如公司内部网的名称服务器),他就不能做恶作剧,因为它是给定用户的计算机咨询的第一台服务器吗? (7认同)
  • @nick012000 除了恶作剧之外,它还为应用公司政策提供了一种非常有效的方法。例如,您可以通过 facebook 或 youtube 浏览器请求访问公司政策备忘录(或本地招聘网站,就像我们曾经为客户所做的那样)。 (7认同)
  • @PyRulez 默认情况下,您的电脑会忽略未知的证书颁发机构,或者您的电脑是预装“恶意”CA 的公司的财产。在后一种情况下,个人电脑可能会按照所有者的要求进行操作,而不是按照您的要求进行操作...... (3认同)

Acc*_*ion 34

假设是 1980 年,电话簿仍然是一个东西。是什么阻止您前往电话簿中的 Kmart 条目,并将他们的电话号码替换为您商店的电话号码?绝对没有。您可以随意执行此操作,如果您使用该电话簿,则每次尝试致电 Kmart 时,您都会拥有自己的商店。您可以根据自己的喜好重新标记电话号码。

问题是,其他人都有自己的电话簿,他们不会看你的。除非您可以闯入电话公司并在那里更改 Kmart 的电话号码以便他们发送的电话簿将包含您的公司号码,否则您不会拒绝 Kmart 的任何业务。

类似地,如果您确定您已经厌倦了输入难以置信的longdomainnamethattakesaridiculouslylongtimetotime.com 并且您不想依赖自动完成,那么您可以自由地设置一个服务器,将short.com 解析为explainedlylongdomainnamethattakesaridiculouslylongtimetotime.com 的IP 地址,并且让您的计算机使用该服务器来解析域名。但是,除非您也可以让其他人的计算机也使用该服务器,否则您不会影响他们在地址栏中键入 short.com 时发生的情况。

  • 基本上,这就像在您的名片上贴上“美国总统”的称号。世界上大多数人永远不会看到一个。大多数*做*的人会翻白眼忽略它。 (8认同)
  • @ceejayoz 前两句是正确的。三是错。在这种情况下,您的计算机会说“哦,总统先生,您好!”。问题是,如果您的计算机甚至查看那张名片,它也无法知道它不合法。您希望您的计算机根本不检查名片,您希望您的计算机检查您真正信任的唯一好的名片目录。如果您的计算机以某种方式认为最好询问(黑客/欺骗)DNS 服务器 B 而不是普通的 DNS 服务器 A,那么您的计算机将不会翻白眼并相信您是总统。 (3认同)

ilk*_*chu 25

所以我的问题是,是什么阻止我对世界上的任何域做同样的事情?事实上,我做到了。

困难的部分是获取这些数据,包括NS安装在.ca名称服务器上的名称服务器的记录。他们可能不会让您这样做,第三方将通过从根向下查询名称服务器来解析域,因此(全局)根首先将地址提供给.ca名称服务器,后者将地址提供给.google.ca名称服务器.

当然,如果您将这些记录安装在您组织的名称服务器中,那么您组织内的任何人都会看到您设置的数据。(好吧,假设他们使用组织的名称服务器,而不是直接使用 8.8.8.8 之类的东西。)但是当有人尝试在那里打开 HTTPS 连接时,他们会收到错误消息,因为您组织之外的任何 CA 都不会为您的密钥签名那个域。(当然,这可以通过在组织内设置您自己的 CA 来规避,但这是另一回事。)

  • 实际上,HTTPS 仍然可以在组织机器内被拦截。如果您的组织正在设置组织名称服务器,它们可能也在分发内部证书颁发机构(例如,使用组策略)。这在证书固定下仍然失败,条件是固定本身没有被拦截和丢弃。请注意,公钥固定已被弃用,但我相信 Google Chrome 对某些 Google 域的根证书进行了硬编码。 (4认同)
  • @Brian 即使有固定,浏览器通常也接受任何非默认证书颁发机构,无论是否固定了不同的 CA。这是专门为了*支持*组织 HTTPS 拦截而完成的,这通常被认为是一个有效的用例。 (3认同)