标签 DNS 下的文章

在过去的几天中,我编写了一个叫作 dnspeep 的小工具,它能让你看到你电脑中正进行的 DNS 查询,并且还能看得到其响应。它现在只有 250 行 Rust 代码

我会讨论如何去尝试它、能做什么、为什么我要编写它,以及当我在开发时所遇到的问题。

如何尝试

我构建了一些二进制文件,因此你可以快速尝试一下。

对于 Linux(x86):

wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-linux.tar.gz
tar -xf dnspeep-linux.tar.gz
sudo ./dnspeep

对于 Mac:

wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-macos.tar.gz
tar -xf dnspeep-macos.tar.gz
sudo ./dnspeep

它需要以 超级用户 root 身份运行,因为它需要访问计算机正在发送的所有 DNS 数据包。 这与 tcpdump 需要以超级身份运行的原因相同:它使用 libpcap,这与 tcpdump 使用的库相同。

如果你不想在超级用户下运行下载的二进制文件,你也能在 https://github.com/jvns/dnspeep 查看源码并且自行编译。

输出结果是什么样的

以下是输出结果。每行都是一次 DNS 查询和响应:

$ sudo dnspeep
query   name                 server IP      response
A       firefox.com          192.168.1.1    A: 44.235.246.155, A: 44.236.72.93, A: 44.236.48.31
AAAA    firefox.com          192.168.1.1    NOERROR
A       bolt.dropbox.com     192.168.1.1    CNAME: bolt.v.dropbox.com, A: 162.125.19.131

这些查询是来自于我在浏览器中访问的 neopets.com,而 bolt.dropbox.com 查询是因为我正在运行 Dropbox 代理,并且我猜它不时会在后台运行,因为其需要同步。

为什么我要开发又一个 DNS 工具?

之所以这样做,是因为我认为当你不太了解 DNS 时,DNS 似乎真的很神秘!

你的浏览器(和你电脑上的其他软件)一直在进行 DNS 查询,我认为当你能真正看到请求和响应时,似乎会有更多的“真实感”。

我写这个也把它当做一个调试工具。我想“这是 DNS 的问题?”的时候,往往很难回答。我得到的印象是,当尝试检查问题是否由 DNS 引起时,人们经常使用试错法或猜测,而不是仅仅查看计算机所获得的 DNS 响应。

你可以看到哪些软件在“秘密”使用互联网

我喜欢该工具的一方面是,它让我可以感知到我电脑上有哪些程序正使用互联网!例如,我发现在我电脑上,某些软件出于某些理由不断地向 ping.manjaro.org 发送请求,可能是为了检查我是否已经连上互联网了。

实际上,我的一个朋友用这个工具发现,他的电脑上安装了一些以前工作时的企业监控软件,但他忘记了卸载,因此你甚至可能发现一些你想要删除的东西。

如果你不习惯的话, tcpdump 会令人感到困惑

当我试图向人们展示他们的计算机正在进行的 DNS 查询时,我的第一感是想“好吧,使用 tcpdump”!而 tcpdump 确实可以解析 DNS 数据包!

例如,下方是一次对 incoming.telemetry.mozilla.org. 的 DNS 查询结果:

11:36:38.973512 wlp3s0 Out IP 192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)
11:36:38.996060 wlp3s0 In  IP 192.168.1.1.53 > 192.168.1.181.42281: 56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)

绝对可以学着去阅读理解一下,例如,让我们分解一下查询:

192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)

  • A? 意味着这是一次 A 类型的 DNS 查询
  • incoming.telemetry.mozilla.org. 是被查询的名称
  • 56271 是 DNS 查询的 ID
  • 192.168.1.181.42281 是源 IP/端口
  • 192.168.1.1.53 是目的 IP/端口
  • (48) 是 DNS 报文长度

在响应报文中,我们可以这样分解:

56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)

  • 3/0/0 是在响应报文中的记录数:3 个回答,0 个权威记录,0 个附加记录。我认为 tcpdump 甚至只打印出回答响应报文。
  • CNAME telemetry-incoming.r53-2.services.mozilla.comCNAME prod.data-ingestion.prod.dataops.mozgcp.net.A 35.244.247.133 是三个响应记录。
  • 56271 是响应报文 ID,和查询报文的 ID 相对应。这就是你如何知道它是对前一行请求的响应。

我认为,这种格式最难处理的是(作为一个只想查看一些 DNS 流量的人),你必须手动匹配请求和响应,而且它们并不总是相邻的行。这就是计算机擅长的事情!

因此,我决定编写一个小程序(dnspeep)来进行匹配,并排除一些我认为多余的信息。

我在编写时所遇到的问题

在撰写本文时,我遇到了一些问题:

  • 我必须给 pcap 包打上补丁,使其能在 Mac 操作系统上和 Tokio 配合工作(这个更改)。这是其中的一个 bug,花了很多时间才搞清楚,用了 1 行代码才解决 :smiley:
  • 不同的 Linux 发行版似乎有不同的 libpcap.so 版本。所以我不能轻易地分发一个动态链接 libpcap 的二进制文件(你可以 在这里 看到其他人也有同样的问题)。因此,我决定在 Linux 上将 libpcap 静态编译到这个工具中。但我仍然不太了解如何在 Rust 中正确做到这一点作,但我通过将 libpcap.a 文件复制到 target/release/deps 目录下,然后直接运行 cargo build,使其得以工作。
  • 我使用的 dns_parser carte 并不支持所有 DNS 查询类型,只支持最常见的。我可能需要更换一个不同的工具包来解析 DNS 数据包,但目前为止还没有找到合适的。
  • 因为 pcap 接口只提供原始字节(包括以太网帧),所以我需要 编写代码来计算从开头剥离多少字节才能获得数据包的 IP 报头。我很肯定我还遗漏了一些情形。

我对于给它取名也有过一段艰难的时光,因为已经有许多 DNS 工具了(dnsspy!dnssnoop!dnssniff!dnswatch!)我基本上只是查了下有关“监听”的每个同义词,然后选择了一个看起来很有趣并且还没有被其他 DNS 工具所占用的名称。

该程序没有做的一件事就是告诉你哪个进程进行了 DNS 查询,我发现有一个名为 dnssnoop 的工具可以做到这一点。它使用 eBPF,看上去很酷,但我还没有尝试过。

可能会有许多 bug

我只在 Linux 和 Mac 上简单测试了一下,并且我已知至少有一个 bug(不支持足够多的 DNS 查询类型),所以请在遇到问题时告知我!

尽管这个 bug 没什么危害,因为这 libpcap 接口是只读的。所以可能发生的最糟糕的事情是它得到一些它无法解析的输入,最后打印出错误或是崩溃。

编写小型教育工具很有趣

最近,我对编写小型教育的 DNS 工具十分感兴趣。

到目前为止我所编写的工具:

以前我尽力阐述已有的工具(如 digtcpdump)而不是编写自己的工具,但是经常我发现这些工具的输出结果让人费解,所以我非常关注以更加友好的方式来看这些相同的信息,以便每个人都能明白他们电脑正在进行的 DNS 查询,而不仅仅是依赖 tcmdump。


via: https://jvns.ca/blog/2021/03/31/dnspeep-tool/

作者:Julia Evans 选题:lujun9972 译者:wyxplus 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Chromium 改进了滥用,让访问根服务器的 DNS 查询锐减 41%

去年 8 月,亚太互联网络信息中心(APNIC)报告 称,Chromium 浏览器中检查网络是否存在 DNS 拦截的代码会导致大量的垃圾 DNS 查询流量。据统计这产生了 45.8% 的对 DNS 根服务器的流量,约计每天查询 600 亿次。

此后,Chromium 团队重新设计了代码,在 Android 设备上禁用了重定向测试,并推出了多状态 DNS 拦截策略,支持禁用桌面浏览器的重定向测试。该功能在 2020 年 11 月中旬上线后,据统计,对根服务器的 DNS 查询量迅速下降。在新版本发布之前,根服务器系统的查询量峰值为每天约 1430 亿次。此后,流量已降至每天约 840 亿次查询。

作为具有市场垄断地位的广泛使用的软件,一个小小的举动就能影响很大。这让我想起来微信的域名,这么多年来一直是 weixin.qq.com,如果使用顶级域名,或更短的域名,想必能为中国互联网省下很多无谓的流量。

德国警方查获了 6000 万美元的比特币,但是没有密码

路透社 报道,这名当事人因在人们的电脑上秘密安装比特币挖矿软件而被判刑两年多,并已在监狱中服刑。检察官扣押了他的加密钱包,但是没有得到密码,当事人称自己忘记了。

加密钱包可以使用密码来保护私钥,因此,如果没有密码就无法解锁钱包以取出存储于其中的比特币。警方多次努力破解密码以获取这 1700 多个比特币,然而无济于事。当然,检察官也已经“确保该男子无法获得这笔慷慨的资金”了。

所以,这些比特币也可以算是丢失了吧。

Mac 软件包管理工具 Homebrew 3 发布

热门 macOS 软件包管理工具 Homebrew 在本周五发布的 3.0.0 版本更新中, 宣布了对 M1 芯片以及后续 Apple Silicon 芯片的原生支持。不过,Homebrew 还没有像 Intel x86\_64 那样,为 Apple Silicon 上的所有软件包提供支持。Homebrew 呼吁社区帮助制作更多支持 Apple Silicon 的软件包。

现在的问题是,使用 Apple Silicon 的用户还太少,所以软件包也不会很快得到增长。但是能原生支持,就为进一步增加软件包数量铺平了道路。

域名系统解析互联网网站的名称及其底层 IP 地址,并在此过程中增加了效率和安全性。

域名系统 Domain Name System (DNS)是互联网的基础之一,然而大多数不懂网络的人可能并不知道他们每天都在使用它来工作、查看电子邮件或在智能手机上浪费时间。

就其本质而言,DNS 是一个与数字匹配的名称目录。这些数字,在这里指的是 IP 地址,计算机用 IP 地址来相互通信。大多数对 DNS 的描述都是用电话簿来比喻,这对于 30 岁以上的人来说是没有问题的,因为他们知道电话簿是什么。

如果你还不到 30 岁,可以把 DNS 想象成你的智能手机的联系人名单,它将人们的名字与他们的电话号码及电子邮件地址进行匹配,然后这个联系人名单的就像地球上的人一样多。

DNS 简史

当互联网还非常、非常小的时候,人们很容易将特定的 IP 地址与特定的计算机对应起来,但随着越来越多的设备和人加入到不断发展的网络中,这种简单的情况就没法持续多久了。现在仍然可以在浏览器中输入一个特定的 IP 地址来到达一个网站,但当时和现在一样,人们希望得到一个由容易记忆的单词组成的地址,也就是我们今天所认识的那种域名(比如 linux.cn)。在 20 世纪 70 年代和 80 年代早期,这些名称和地址是由一个人指定的,她是斯坦福大学的 Elizabeth Feinler,她在一个名为 HOSTS.TXT 的文本文件中维护着一个主列表,记录了每一台连接互联网的计算机。

随着互联网的发展,这种局面显然无法维持下去,尤其是因为 Feinler 只处理加州时间下午 6 点之前的请求,而且圣诞节也要请假。1983 年,南加州大学的研究人员 Paul Mockapetris 受命在处理这个问题的多种建议中提出一个折中方案。但他基本上无视了所有提出的建议,而是开发了自己的系统,他将其称为 DNS。虽然从那时起,现今的它显然发生了很大的变化,但在基本层面上,它的工作方式仍然与将近 40 年前相同。

DNS 服务器是如何工作的

将名字与数字相匹配的 DNS 目录并不是整个藏在互联网的某个黑暗角落。截至 2017 年底,它记录了超过 3.32 亿个域名,如果作为一个目录确实会非常庞大。就像互联网本身一样,该目录分布在世界各地,存储在域名服务器(一般简称为 DNS 服务器)上,这些服务器都会非常有规律地相互沟通,以提供更新和冗余。

权威 DNS 服务器与递归 DNS 服务器的比较

当你的计算机想要找到与域名相关联的 IP 地址时,它首先会向 递归 recursive DNS 服务器(也称为递归解析器)提出请求。递归解析器是一个通常由 ISP 或其他第三方提供商运营的服务器,它知道需要向其他哪些 DNS 服务器请求解析一个网站的名称与其 IP 地址。实际拥有所需信息的服务器称为 权威 authoritative DNS 服务器。

DNS 服务器和 IP 地址

每个域名可以对应一个以上的 IP 地址。事实上,有些网站有数百个甚至更多的 IP 地址与一个域名相对应。例如,你的计算机访问 www.google.com 所到达的服务器,很可能与其他国家的人在浏览器中输入相同的网站名称所到达的服务器完全不同。

该目录的分布式性质的另一个原因是,如果这个目录只在一个位置,在数百万,可能是数十亿在同一时间寻找信息的人中共享,那么当你在寻找一个网站时,你需要花费多少时间才能得到响应 —— 这就像是排着长队使用电话簿一样。

什么是 DNS 缓存?

为了解决这个问题,DNS 信息在许多服务器之间共享。但最近访问过的网站的信息也会在客户端计算机本地缓存。你有可能每天使用 google.com 好几次。你的计算机不是每次都向 DNS 名称服务器查询 google.com 的 IP 地址,而是将这些信息保存在你的计算机上,这样它就不必访问 DNS 服务器来解析这个名称的 IP 地址。额外的缓存也可能出现在用于将客户端连接到互联网的路由器上,以及用户的互联网服务提供商(ISP)的服务器上。有了这么多的缓存,实际上对 DNS 名称服务器的查询数量比看起来要少很多。

如何找到我的 DNS 服务器?

一般来说,当你连接到互联网时,你使用的 DNS 服务器将由你的网络提供商自动建立。如果你想看看哪些服务器是你的主要名称服务器(一般是递归解析器,如上所述),有一些网络实用程序可以提供关于你当前网络连接的信息。Browserleaks.com 是一个很好的工具,它提供了很多信息,包括你当前的 DNS 服务器。

我可以使用 8.8.8.8 的 DNS 吗?

但要记住,虽然你的 ISP 会设置一个默认的 DNS 服务器,但你没有义务使用它。有些用户可能有理由避开他们 ISP 的 DNS —— 例如,有些 ISP 使用他们的 DNS 服务器将不存在的地址的请求重定向到带有广告的网页

如果你想要一个替代方案,你可以将你的计算机指向一个公共 DNS 服务器,以它作为一个递归解析器。最著名的公共 DNS 服务器之一是谷歌的,它的 IP 地址是 8.8.8.8 和 8.8.4.4。Google 的 DNS 服务往往是快速的,虽然对 Google 提供免费服务的别有用心的动机有一定的质疑,但他们无法真正从你那里获得比他们从 Chrome 浏览器中获得的更多信息。Google 有一个页面,详细说明了如何配置你的电脑或路由器连接到 Google 的 DNS。

DNS 如何提高效率

DNS 的组织结构有助于保持事情的快速和顺利运行。为了说明这一点,让我们假设你想访问 linux.cn

如上所述,对 IP 地址的初始请求是向递归解析器提出的。递归解析器知道它需要请求哪些其他 DNS 服务器来解析一个网站(linux.cn)的名称与其 IP 地址。这种搜索会传递至根服务器,它知道所有顶级域名的信息,如 .com、.net、.org 以及所有国家域名,如 .cn(中国)和 .uk(英国)。根服务器位于世界各地,所以系统通常会将你引导到地理上最近的一个服务器。

一旦请求到达正确的根服务器,它就会进入一个顶级域名(TLD)名称服务器,该服务器存储二级域名的信息,即在你写在 .com、.org、.net 之前的单词(例如,linux.cn 的信息是 “linux”)。然后,请求进入域名服务器,域名服务器掌握着网站的信息和 IP 地址。一旦 IP 地址被找到,它就会被发回给客户端,客户端现在可以用它来访问网站。所有这一切都只需要几毫秒的时间。

因为 DNS 在过去的 30 多年里一直在工作,所以大多数人都认为它是理所当然的。在构建系统的时候也没有考虑到安全问题,所以黑客们充分利用了这一点,制造了各种各样的攻击。

DNS 反射攻击

DNS 反射攻击可以用 DNS 解析器服务器的大量信息淹没受害者。攻击者使用伪装成受害者的 IP 地址来向他们能找到的所有开放的 DNS 解析器请求大量的 DNS 数据。当解析器响应时,受害者会收到大量未请求的 DNS 数据,使其不堪重负。

DNS 缓存投毒

DNS 缓存投毒可将用户转移到恶意网站。攻击者设法在 DNS 中插入虚假的地址记录,这样,当潜在的受害者请求解析其中一个中毒网站的地址时,DNS 就会以另一个由攻击者控制的网站的 IP 地址作出回应。一旦访问了这些假网站,受害者可能会被欺骗,泄露密码或下载了恶意软件。

DNS 资源耗尽

DNS 资源耗尽攻击可以堵塞 ISP 的 DNS 基础设施,阻止 ISP 的客户访问互联网上的网站。攻击者注册一个域名,并通过将受害者的名称服务器作为域名的权威服务器来实现这种攻击。因此,如果递归解析器不能提供与网站名称相关的 IP 地址,就会询问受害者的名称服务器。攻击者会对自己注册的域名产生大量的请求,并查询不存在的子域名,这就会导致大量的解析请求发送到受害者的名称服务器,使其不堪重负。

什么是 DNSSec?

DNS 安全扩展是为了使参与 DNS 查询的各级服务器之间的通信更加安全。它是由负责 DNS 系统的 互联网名称与数字地址分配机构 Internet Corporation for Assigned Names and Numbers (ICANN)设计的。

ICANN 意识到 DNS 顶级、二级和三级目录服务器之间的通信存在弱点,可能会让攻击者劫持查询。这将允许攻击者用恶意网站的 IP 地址来响应合法网站的查询请求。这些网站可能会向用户上传恶意软件,或者进行网络钓鱼和网络欺骗攻击。

DNSSec 将通过让每一级 DNS 服务器对其请求进行数字签名来解决这个问题,这就保证了终端用户发送进来的请求不会被攻击者利用。这就建立了一个信任链,这样在查询的每一步,请求的完整性都会得到验证。

此外,DNSSec 可以确定域名是否存在,如果不存在,它就不会让该欺诈性域名交付给寻求域名解析的无辜请求者。

随着越来越多的域名被创建,越来越多的设备继续通过物联网设备和其他“智能”系统加入网络,随着更多的网站迁移到 IPv6,将需要维持一个健康的 DNS 生态系统。大数据和分析的增长也带来了对 DNS 管理的更大需求

SIGRed: 蠕虫病毒 DNS 漏洞再次出现

最近,随着 Windows DNS 服务器缺陷的发现,全世界都看到了 DNS 中的弱点可能造成的混乱。这个潜在的安全漏洞被称为 SIGRed,它需要一个复杂的攻击链,但利用未打补丁的 Windows DNS 服务器,有可能在客户端安装和执行任意恶意代码。而且该漏洞是“可蠕虫传播”的,这意味着它可以在没有人为干预的情况下从计算机传播到计算机。该漏洞被认为足够令人震惊,以至于美国联邦机构被要求他们在几天时间内安装补丁

DNS over HTTPS:新的隐私格局

截至本报告撰写之时,DNS 正处于其历史上最大的一次转变的边缘。谷歌和 Mozilla 共同控制着浏览器市场的大部分份额,他们正在鼓励向 DNS over HTTPS(DoH)的方向发展,在这种情况下,DNS 请求将被已经保护了大多数 Web 流量的 HTTPS 协议加密。在 Chrome 的实现中,浏览器会检查 DNS 服务器是否支持 DoH,如果不支持,则会将 DNS 请求重新路由到谷歌的 8.8.8.8。

这是一个并非没有争议的举动。早在上世纪 80 年代就在 DNS 协议上做了大量早期工作的 Paul Vixie 称此举对安全来说是“灾难”:例如,企业 IT 部门将更难监控或引导穿越其网络的 DoH 流量。不过,Chrome 浏览器是无所不在的,DoH 不久就会被默认打开,所以让我们拭目以待。


via: https://www.networkworld.com/article/3268449/what-is-dns-and-how-does-it-work.html

作者:Keith Shaw, Josh Fruhlinger 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

黑莓手机还活着

获得黑莓品牌使用权的 TCL 公司今年初宣布它将在今年晚些时候停止销售黑莓手机,因为双方的合作即将结束。但本周一家美国得州公司 OnwardMobility 宣布与黑莓公司达成协议,将发布一款带物理键盘的 5G 黑莓 Android 手机,预计 2021 年上半年在欧洲和北美市场发售。

来源:solidot

拍一拍:黑莓是当年的传奇手机,奈何时代将其抛弃。就像 Palm 一样,这样的电子产品你还记得几个?

Chromium 对根 DNS 服务器流量的影响

有些 ISP 会对于无效域名会进行拦截重定向到广告页挣些广告费。Chromium 在 DNS 查询的时候需要识别某个网络是否存在这种拦截。在每次启动、每次 IP 地址变化、每次设备 DNS 配置变更时对 3 个随机的 10 字符长的字符串进行 DNS 查询。这种行为会在根 DNS 服务器留下记录。根据亚太互联网络信息中心的统计,根服务器一半的查询流量来自于 Chromium 的检查,这相当于每天查询 600 亿次。

来源:solidot

拍一拍:形成垄断性格局的 Chromium 的一点点小功能,都可能对互联网基础设施形成重压。

zstd 有望进入 Linux 5.9,支持压缩系统固件

此前 Facebook 工程师向 Linux 内核提交了使用 zstd 压缩 Linux 内核镜像的补丁,这些补丁显示了使用 zstd 对内核、ramdisk 和 initramfs 进行压缩操作具备巨大潜力。现在有内核开发者提交补丁,希望采用 zstd 统一压缩内核所有内容,包括固件文件。

来源:开源中国

拍一拍:是时候在内核中采用更先进的算法了,现在采用 zlib 有点落后了。

dig 是一个强大而灵活的工具,用于查询域名系统(DNS)服务器。在这篇文章中,我们将深入了解它的工作原理以及它能告诉你什么。

dig 是一款强大而灵活的查询 DNS 名称服务器的工具。它执行 DNS 查询,并显示参与该过程的名称服务器返回的应答以及与搜索相关的细节。系统管理员和 DNS 管理员经常使用 dig 来帮助排除 DNS 问题。在这篇文章中,我们将深入了解它的工作原理,看看它能告诉我们什么。

开始之前,对 DNS(域名系统)的工作方式有一个基本的印象是很有帮助的。它是全球互联网的关键部分,因为它提供了一种查找世界各地的服务器的方式,从而可以与之连接。你可以把它看作是互联网的地址簿,任何正确连接到互联网的系统,都应该能够使用它来查询任何正确注册的服务器的 IP 地址。

dig 入门

Linux 系统上一般都默认安装了 dig 工具。下面是一个带有一点注释的 dig 命令的例子:

$ dig www.networkworld.com

; <<>> DiG 9.16.1-Ubuntu <<>> www.networkworld.com <== 你使用的 dig 版本
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6034
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:                            <== 你的查询细节
;www.networkworld.com.          IN      A

;; ANSWER SECTION:                              <== 结果

www.networkworld.com.   3568    IN      CNAME   idg.map.fastly.net.
idg.map.fastly.net.     30      IN      A       151.101.250.165

;; Query time: 36 msec                          <== 查询用时
;; SERVER: 127.0.0.53#53(127.0.0.53)            <== 本地缓存解析器
;; WHEN: Fri Jul 24 19:11:42 EDT 2020           <== 查询的时间
;; MSG SIZE  rcvd: 97                           <== 返回的字节数

如果你得到了一个这样的应答,是好消息吗?简短的回答是“是”。你得到了及时的回复。状态字段(status: NOERROR)显示没有问题。你正在连接到一个能够提供所要求的信息的名称服务器,并得到一个回复,告诉你一些关于你所查询的系统的重要细节。简而言之,你已经验证了你的系统和域名系统相处得很好。

其他可能的状态指标包括:

  • SERVFAIL:被查询的名称存在,但没有数据或现有数据无效。
  • NXDOMAIN:所查询的名称不存在。
  • REFUSED:该区域的数据不存在于所请求的权威服务器中,并且在这种情况下,基础设施没有设置为提供响应服务。

下面是一个例子,如果你要查找一个不存在的域名,你会看到什么?

$ dig cannotbe.org

; <<>> DiG 9.16.1-Ubuntu <<>> cannotbe.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 35348
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

一般来说,digping 会提供更多的细节,如果域名不存在,ping 会回复 “名称或服务未知”。当你查询一个合法的系统时,你可以看到域名系统对该系统知道些什么,这些记录是如何配置的,以及检索这些数据需要多长时间。

(LCTT 译注:dig 也比 nslookup 提供的数据更多。此外,dig 采用的是操作系统的解析库,而 nslookup 采用的是自己提供的解析库,这有时候会带来不同的行为。最后,有趣的一点是,dig 的返回的格式是符合 BIND 区域文件格式的。)

事实上,有时 dig 可以在 ping 完全不能响应的时候进行响应,当你试图确定一个连接问题时,这种信息是非常有用的。

DNS 记录类型和标志

在上面的第一个查询中,我们可以看到一个问题,那就是同时存在 CNAMEA 记录。CNAME 规范名称 canonical name )就像一个别名,把一个域名指向另一个域名。你查询的大多数系统不会有 CNAME 记录,而只有 A 记录。如果你运行 dig localhost 命令,你会看到一个 A 记录,它就指向 127.0.0.1 —— 这是每个系统都使用的“回环”地址。A 记录用于将一个名字映射到一个 IP 地址。

DNS 记录类型包括:

  • AAAAA:IPv4 或 IPv6 地址
  • CNAME:别名
  • MX:邮件交换器
  • NS:名称服务器
  • PTR:一个反向条目,让你根据 IP 地址找到系统名称
  • SOA:表示授权记录开始
  • TXT 一些相关文本

我们还可以在上述输出的第五行看到一系列的“标志”。这些定义在 RFC 1035 中 —— 它定义了 DNS 报文头中包含的标志,甚至显示了报文头的格式。

                                1  1  1  1  1  1
  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

在上面的初始查询中,第五行显示的标志是:

  • qr = 查询
  • rd = 进行递归查询
  • ra = 递归数据可用

RFC 中描述的其他标志包括:

  • aa = 权威答复
  • cd = 检查是否禁用
  • ad = 真实数据
  • opcode = 一个 4 位字段
  • tc = 截断
  • z(未使用)

添加 +trace 选项

如果你添加 +trace 选项,你将从 dig 得到更多的输出。它会添加更多信息,显示你的 DNS 查询如何通过名称服务器的层次结构找到你要找的答案。

下面显示的所有 NS 记录都反映了名称服务器 —— 这只是你将看到的数据的第一部分,因为查询通过名称服务器的层次结构来追踪你要找的东西:

$ dig +trace networkworld.com

; <<>> DiG 9.16.1-Ubuntu <<>> +trace networkworld.com
;; global options: +cmd
.                       84895   IN      NS      k.root-servers.net.
.                       84895   IN      NS      e.root-servers.net.
.                       84895   IN      NS      m.root-servers.net.
.                       84895   IN      NS      h.root-servers.net.
.                       84895   IN      NS      c.root-servers.net.
.                       84895   IN      NS      f.root-servers.net.
.                       84895   IN      NS      a.root-servers.net.
.                       84895   IN      NS      g.root-servers.net.
.                       84895   IN      NS      l.root-servers.net.
.                       84895   IN      NS      d.root-servers.net.
.                       84895   IN      NS      b.root-servers.net.
.                       84895   IN      NS      i.root-servers.net.
.                       84895   IN      NS      j.root-servers.net.
;; Received 262 bytes from 127.0.0.53#53(127.0.0.53) in 28 ms
...

最终,你会得到与你的要求直接挂钩的信息:

networkworld.com.       300     IN      A       151.101.2.165
networkworld.com.       300     IN      A       151.101.66.165
networkworld.com.       300     IN      A       151.101.130.165
networkworld.com.       300     IN      A       151.101.194.165
networkworld.com.       14400   IN      NS      ns-d.pnap.net.
networkworld.com.       14400   IN      NS      ns-a.pnap.net.
networkworld.com.       14400   IN      NS      ns0.pcworld.com.
networkworld.com.       14400   IN      NS      ns1.pcworld.com.
networkworld.com.       14400   IN      NS      ns-b.pnap.net.
networkworld.com.       14400   IN      NS      ns-c.pnap.net.
;; Received 269 bytes from 70.42.185.30#53(ns0.pcworld.com) in 116 ms

挑选响应者

你可以使用 @ 符号来指定一个特定的名称服务器来处理你的查询。在这里,我们要求 Google 的主名称服务器响应我们的查询:

$ dig @8.8.8.8 networkworld.com

; <<>> DiG 9.16.1-Ubuntu <<>> @8.8.8.8 networkworld.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43640
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
networkworld.com.       299     IN      A       151.101.66.165
networkworld.com.       299     IN      A       151.101.194.165
networkworld.com.       299     IN      A       151.101.130.165
networkworld.com.       299     IN      A       151.101.2.165

;; Query time: 48 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Jul 25 11:21:19 EDT 2020
;; MSG SIZE  rcvd: 109

下面所示的命令对 8.8.8.8 IP 地址进行反向查找,以显示它属于 Google 的 DNS 服务器。

$ nslookup 8.8.8.8
8.8.8.8.in-addr.arpa    name = dns.google.

总结

dig 命令是掌握 DNS 工作原理和在出现连接问题时排除故障的重要工具。


via: https://www.networkworld.com/article/3568488/digging-for-dns-answers-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 PDNS 为你的项目提供稳定可靠的域名系统(DNS)服务器。

几个月前,我们接到了一个要求,为一个新项目提供一个稳定可靠的域名系统(DNS)服务器。该项目使用容器进行自动部署,每个新环境都会生成唯一的随机 URL。在对可能的方案进行了大量研究之后,我们决定尝试一下 PowerDNS(PDNS)。

一开始,我们发现 PowerDNS 在所有主流 Linux 发行版中都得到了支持,它采用 GPL 许可,且仓库保持更新。我们还在官方网站上发现了整洁、组织良好的文档,以及大量来自真正喜欢和使用该产品的人在网络上的使用方法。看了一些并学习了一些基本命令之后,安装了 PDNS,启动并运行,我们的旅程开始了。

数据库驱动

PowerDNS 将记录保存在 SQL 数据库中。这对我们来说是新变化,不必使用文本文件来保存记录是一个不错的更改。我们选择 MariaDB 作为首选的强大工具,由于有大量的正确地设置来安装名称服务器的信息,我们可以完美地设置和加固我们的数据库。

简单配置

其次使我们感兴趣的是 PDNS 的所有功能都在配置文件中。pdns.conf 有许多选项,你可以通过添加或删除 号来启用或禁用这些选项。这真是太神奇了,因为它使我们有机会将这项新的服务集成到我们现有的基础架构中,并且只有我们想要的功能,不多也不少。一个简单的例子:

谁可以访问你的网络服务器?

webserver-allow-from=172.10.0.1,172.10.1.2

我可以转发基于域的请求吗?当然!

forward-zones=mylocal.io=127.0.0.1:5300
forward-zones+=example.com=172.10.0.5:53
forward-zones+=lucky.tech=172.10.1.5:53

包含 API

我们可以使用配置文件进行激活 API 服务,解决了我们开发团队的第一个需求,让我们见识到了 PDNS 的强大。这个功能让我们通过发送请求,简单、干净地创建、修改或删除 DNS 服务器中的记录。

这个 API 有一些基本的安全性参数,因此,只需几步,你就可以基于 IP 地址和预共享密钥验证的组合来控制谁有权与名称服务器进行交互。这是配置文件的样子:

api=yes
api-key=lkjdsfpoiernf
webserver-allow-from=172.10.7.13,172.10.7.5

日志

在日志方面,PDNS 做得非常出色。你可以使用日志文件和一个简单的内置 Web 服务器来监控服务器并查看计算机的运行状况。你可以使用浏览器查看服务器不同类型的统计信息,例如 CPU 使用率和收到的 DNS 查询。这非常有价值。例如,我们能够检测到一些“不太健康”的 PC,它们正在向我们的服务器发送与恶意流量相关的站点的 DNS 请求。深入查看日志后,我们可以看到流量来自何处,并对这些 PC 进行清理操作。

其他功能

这只是你使用 PowerDNS 可以做的所有事情的一点点。它还有更多的功能。它是一个拥有很多功能和特性的完整名称服务器,因此值得一试。

目前,我们尚未部署 DNSSEC,但似乎只需点击一下即可将其快速投入生产环境。另外,在将递归服务与名称服务器分离时,PowerDNS 有个不错的方法。我了解到它还支持 DNS RPZ(响应策略区域),并且还提供了非常不错且设计良好的前端,可让你使用 Web 浏览器来管理服务器,如下图。

 title=

信不信由你,你只需花费几个小时了解 PDNS,就可以大大提高你对 DNS 和 IT 操作的了解。


via: https://opensource.com/article/20/5/powerdns

作者:Jonathan Garrido 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出