6

dig 默认支持 EDNS

 2 years ago
source link: https://blog.wolfogre.com/posts/dig-support-edns/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近碰到了件挺无语的事。

如果不说废话,那就是:“dig 默认支持 EDNS”。

但你可能会好奇为什么这会让我无语。

那我们就唠唠呗。

dig 与 EDNS

我在排查一些问题的过程中,要测试一下 DNS 解析在不同地域的不同配置是否生效,需要模拟客户端发起解析请求,通过类似于 17ce.com 这种拨测工具,已然能满足我绝大多数情况下的需求。

但有些时候,我就是想知道某个 IP 段向权威 DNS 服务器发起请求时,返回的内容是啥。这时候就犯难了:哪有那么巧的事,拨测点还能刚好在我想要的 IP 段上的?

其实无需拨测,多数权威 DNS 服务器是支持 EDNS 协议的,即“扩展了的 DNS 协议”。而指明客户端 IP 就是这个扩展中重要的特性之一。

dig 是一个常用的命令行工具,用来查询域名的解析记录,功能强大,使用起来也不复杂。比如这里查一下这个站点解析是否正常:

image

好了,下一步就简单了,通过参数指定一下 EDNS 协议中客户端 IP 就好了呗。

但不知道是哪个参数,于是我搜了一下。

image

怎么说呢,真没办法的,大家都是中国人,肯定会一眼先被中文搜索结果吸引住,定睛一看,发现中文的搜索结果都异口同声地告诉你:

“dig 工具默认不支持 EDNS,通过打补丁可让其支持。”

好了,计时开始,从这里开始我就跑偏了,后面发生的所有事情都单纯浪费自己时间。

我一直非常反感安装个工具还需要从源码编译的,但是没办法哇,碰到个硬茬了,自行编译就自行编译吧,日子还是要过的。

在编译源码的漫长等待过程中,其实我有察觉一点异样,那就是教程指名道姓说要下载特定的 dig 版本,即 9.9.3,版本不对可能会找不到对应的补丁包。

这其实是一个偏旧的版本,作为比较,CentOS 上通过 yum install bind-utils 安装的 dig 已经是 9.11.4 了。

我以为是时间长了,文章的信息没有更新造成的,于是到提供补丁包的网站上看了一下,到目前为止,确实只提供了少数几个版本的补丁包,而 9.9.3 是最新的一版。

image

但是注意看,即使是最新的一版也是 2016 年创建的文件,这就有点诡异了,但是当时的我并没有多想,继续傻乎乎地等编译完成。

好了,这就不怪我了,我刚才已经提醒你注意看了,但是你仍然没有注意到那么明显的警告,说明你和我一样,眼神都不咋样啊。

前一张图,用那么大一个红框框来转移你的注意点确实是我的心机,但是开头那用加粗大写的“THIS IS RATHER OBSOLETE”你没看到就不完全是我责任了。

我英语不好,如果写 deprecated、outdated 或 expired 我能认得,但 obsolete 这单词确实认不出,没关系,我英语学不好整翻译插件倒是一套一套的,当时但凡能眼睛多看一眼,意识到大写加粗的文字是作者在尝试传达什么不得了的信息,右击翻译轻轻一点,“过时的”三个大字映入眼帘,也就不至于有这么一出了。

后来之所以能发现,还多亏了那些教人打补丁编译源码的教程偷懒了,只教人怎么添加 EDNS 支持,没说怎么使用,于是我不得不找了些其它的文章看,这才发现了端倪,

端倪在于,这玩意儿怎么用还得看版本,不同版本下指定客户端 IP 的参数名竟是不一样的:

  • 9.10 及以上,使用 +subnet,形如 dig google.com +subnet=208.67.222.0
  • 9.9.3 及以上,使用 +client,形如 dig google.com +client=208.67.222.0

可是补丁包只支持到 9.9.3 哇,那怎么样才能……等等,我勒个去……

当我使用未打补丁包的、使用 yum 默认安装的、版本是 9.11.4 的 dig,添加 +subnet 参数执行,它就这样无情的成功了,我甚至能从程序那迅捷而果断的返回输出中,感受到一点嘲讽的气息:“你还自己编译,瞧把你能的!”

事后我去查了一下,发现 9.10 早在 2014 年就已经发布了。

image

即使考虑到各个软件包平台发版的滞后性,那也不至于在六年后,还有“dig 默认不支持 EDNS”这样的说法吧。

挺无语的。

写这么个无语的事儿,当我在想该起什么标题时,有一点纠结,叫《一件无语的事儿》?或者《如何使用支持 EDNS 的 dig》?

不,我就要和这些落后了六年的信息唱反调:

dig 默认支持 EDNS 哇大哥!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK