传统上,我总是使用别名/功能来从CLI轻松访问我的WAN IP:

$ type -a whatismyip
whatismyip is a function
whatismyip ()
{
    curl ipv4.icanhazip.com
}

该别名是多年前创建的,可能使用其他域,但始终使用HTTP。

最近,我发现越来越多的人引用一线式网络,它通过DNS查找相同的信息。

但是真的一样吗?

在撰写本文时,我使用的是4G网络共享,不同协议(protocol)的结果有所不同。

更令人惊讶的是,它们在DNS服务器之间也有所不同。

有趣的是,ns1.google.com8.8.8.8具有不同的结果。
$ whatismyip
92.251.255.11

$ dig +short myip.opendns.com @resolver1.opendns.com
178.167.254.133

$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8
"74.125.73.77"
"edns0-client-subnet 178.167.255.120/32"

$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
"178.167.255.120"

$ ifconfig | grep 'inet addr:'
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet addr:192.168.42.125  Bcast:192.168.42.255  Mask:255.255.255.0
          inet addr:10.47.206.109  Bcast:10.63.255.255  Mask:255.192.0.0

有谁愿意详细解释一下? :)

~~ 编辑:为了澄清起见,我在某种程度上尝试了上述所有命令,它们提供了一致的结果。~~

~~ EDIT2 :我最初忘记发布whatismyip结果,但是没有一个DNS查询与HTTP匹配。我正在尝试复制它,但是没有成功。我必须回到咖啡馆:)~~

EDIT3 :我回到那里并获得了新数据。与上次一致!

最佳答案

您进行了两个DNS查询:

$ dig +short myip.opendns.com @resolver1.opendns.com
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

应该返回相同的地址:您的外部IP。也许您的外部IP在请求之间发生了变化,这就是为什么您获得不同结果的原因。
它绝不是DNS协议(protocol)的一部分,而是这些DNS服务器返回返回发起查询的IP的技巧。这些和其他一些DNS技巧都在in this post中列出。

另一方面:
$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8

无法为您提供客户端的IP,因为8.8.8.8不是o-o.myaddr.l.google.com的权威DNS服务器(ns1.google.com是),因此它无法直接获取您的IP,并且您看到的响应是DNS协议(protocol)允许的最大努力近似值(逐行描述):
  • 与权威服务器联系以获取TXT记录的DNS解析器的IP地址。
  • (如果可用),由DNS解析器代表其进行查询的客户端(在本例中为您)的子网(edns-client-subnet)。

  • 有关edns-client-subnet的更多详细信息,您可以阅读this article

    07-28 02:58
    查看更多