DNS 记录包含 0.0.0.0 地址

DNS 记录包含 0.0.0.0 地址

长话短说。

dig c.cx

返回

; <<>> DiG 9.11.0-P2 <<>> c.cx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32806
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;c.cx.              IN  A

;; ANSWER SECTION:
c.cx.           6903    IN  A   0.0.0.0

;; Query time: 90 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Feb 06 22:33:08 +03 2017
;; MSG SIZE  rcvd: 49

即地址0.0.0.0

问题:

  • 有什么特殊含义吗?
  • 这是合法的吗(DNS记录可以包含的地址有什么限制吗)?

答案1

这是合法的(见RFC1035§3.4.1),但毫无用处(因为它的意思是“任何 IP”)。至于含义,请看Zoneedit 常见问题解答 (顺便说一下,这是错误的,没有强制要求域名本身必须有 A 记录,恰恰相反,所有 MTA 都可以使用 MX 记录):

  1. 为什么我无法删除我的域名根名称的“A”记录?

所有域名都必须具有域名根目录的“A”记录。省略此“A”记录可能会导致某些邮件服务器无法正确递送您的电子邮件。WebParking 或 WebForwarding 域名根目录就足够了,因为这两者都会创建指向我们服务器的隐藏“A”记录。如果您确实想删除此记录,请尝试将 IP 地址更改为“0.0.0.0”,其功能相同。

答案2

著名的案例是域名注册商 epik 用它来关闭 parler.com

$ dig @NS3.EPIK.COM parler.com

; <<>> DiG blah blah blah <<>> @NS3.EPIK.COM parler.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43362
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;parler.com.            IN  A

;; ANSWER SECTION:
parler.com.     300 IN  A   0.0.0.0

结果是从本地网络服务器提供错误页面。

答案3

目前关于 0.0.0.0 有很多错误信息流传,因此请务必仔细阅读定义,寻找权威来源,并得出自己的结论。

官方含义/官方用途

IANA 拥有对 IP 地址的管理权,已保留 0.0.0.0/32因为它的定义是RFC 1122 第 3.2.1.3 节。RFC 1122 仅涉及低级协议(IP 本身)。RFC 将其描述为“此网络上的此主机”,并禁止将其用作目标地址(在线)

(a)  { 0, 0 }

        This host on this network.  MUST NOT be sent, except as
        a source address as part of an initialization procedure
        by which the host learns its own IP address.>

        See also Section 3.3.6 for a non-standard use of {0,0}.

RFC 5735 中也提到了这一点。

所以理论上它不应该用于其他任何用途!

非官方用途-内部操作系统(Linux)

如果 Linux 上的程序尝试连接到 0.0.0.0,它将连接到自身(本地主机)。我不确定其他操作系统是否这样做。

严格来说,作为 IANA 保留的 IP 地址,这可能不符合标准。然而,这种行为非常古老,甚至可以追溯到早期Berkly 插座于 1983 年推出 (我不知道). 它的命名似乎也与 RFC 1122 定义相对接近This host on this network

确切地说:

  • 尝试bind更改为 0.0.0.0 会导致允许消息传入到任何主机的 IP 地址。
  • 尝试connect到 0.0.0.0 的结果是连接到本地主机。

非官方用途 - DNS

最近,一些 DNS 服务器和服务器软件开始使用 0.0.0.0 作为黑洞地址。这种用法越来越普遍,但也存在一些问题,包括:

  • 它直接与预订的IANA / RFC 定义。它甚至似乎没有尊重名称的原始含义,更不用说功能了。
  • 当主机被告知连接到 0.0.0.0 时,似乎没有标准化的定义。因此,这依赖于未指定的行为
  • 它并不总是导致黑洞。在某些设备上,它会导致本地主机连接。实际连接到某个东西的结果可能是不理想的。

这合法吗? - 这很复杂

DNS 没有明确禁止它;不在RFC 1035或者RFC 1034无论如何。这意味着 DNS 服务器和客户端不太可能直接拒绝它。

但请注意。定义什么是有效的资源 IP 地址,什么不是有效的资源 IP 地址,并不是 DNS 标准的工作。这通常超出了 DNS RFC 的范围。DNS 仅定义如何传达名称 <--> IP 映射。仅仅因为 DNS 能够传达非法的名称 --> IP 映射,并不意味着它是合法的。

由于 0.0.0.0 是 IP 下的非法目标地址,因此很难看出它怎么可能成为存储在网络 DNS 服务器上的“合法”资源 IP 地址。

我相信,定义什么不是有效的资源 IP 的最终责任将在于 IANA 和其他网络 RFC 之间。

结论

我个人认为馊主意将任何 DNS 配置为指向 0.0.0.0。我曾见过由此导致的不良行为,如果不更改 DNS 资源记录,则很难缓解这种情况。

我个人会使用 IANA / RFC 分配的“localhost”IP 范围之一,这个范围非常少见(例如 127.253.252.251)。至少如果它实际连接到 localhost,则将其定义为 localhost,而不是 0.0.0.0。但这只是我个人的看法。

答案4

IP 地址“0.0.0.0”是一个黑洞地址,会导致查找无果。这在内部网络和外部网络共享同一域名的拆分 DNS 场景中可能非常有用。您可能有一个指向您网站的通配符 DNS 条目(似乎很合理),但您组织的一台笔记本电脑尝试连接到“fileserver.contoso.com”,并缓存主网站 IP,因为通配符返回了它。

将 fileserver.contoso.com 添加到指向 0.0.0.0 的外部 DNS 将停止缓存地址。因此,当您重新连接到 VPN(并返回内部网络)时,fileserver.contoso.com 仍然可以工作。

如果您没有指向 0.0.0.0 的外部地址,您将无法访问文件服务器,直到 TTL 过期。

我知道用例有限但是我见过这种用法!

相关内容