标签 DNS 下的文章

大家好!今年早些时候,我在写《DNS 是如何工作的》 时,有人问我——为什么人们有时在域名的末尾加一个点?例如,如果你通过运行 dig example.com 查询 example.com 的 IP,你会看到一下内容:

$ dig example.com
example.com.        5678    IN  A   93.184.216.34

执行完 dig 命令后,example.com 有一个 . ——变成了 example.com.!发生了什么?

有些 DNS 工具也要求传给它的域名后加一个 .:如果你在使用 miekg/dns 时传给它 example.com,它会报错:

// trying to send this message will return an error
m := new(dns.Msg)
m.SetQuestion("example.com", dns.TypeA)

最初我以为我知道这个问题的答案(“呃,末尾的点意味着域名是完全限定的?”)。这是对的 —— 一个 完全限定域名 fully qualified domain name (FQDN)是一个末尾有 . 的域名!

但是为什么末尾的点是有用且重要的呢?

在 DNS 的请求/响应中,域名的末尾并没有 “.”

我曾经(错误地)认为 “为什么末尾有一个点?”的答案可能是 “在 DNS 请求/响应中,域名末尾有一个 .,所以我们把它放进去,以匹配你的计算机实际发送/接收的内容”。但事实并不是这样!

当计算机发送 DNS 请求/响应时,域名的末尾并没有点。实际上,域名中没有点。

域名会被编码成一系列的长度/字符串对。例如,域名 example.com 被编码为这 13 个字节。

7example3com0

编码后的内容一个点也没有。一个 ASCII 域名(如 example.com)被转成了各种 DNS 软件的 DNS 请求/响应中使用的格式。

今天我们来讨论域名被转成 DNS 响应的一个地方:区域文件。

区域文件中域名末尾的 “.”

一些人管理域名的 DNS 记录的方法是创建一个被称为 “区域文件” 的文本文件,然后配置一些 DNS 服务器软件(如 nsdbind)来为该区域文件中指定的 DNS 记录提供服务。

下面是一个对应 example.com 的示例区域文件:

orange  300   IN    A     1.2.3.4
fruit   300   IN    CNAME orange
grape   3000  IN    CNAME example.com.

在这个文件中,任何不以 . 结尾的域名(比如 orange)后都会自动加上 .example.com。所以 orange 成了 orange.example.com 的简称。DNS 服务器从它的配置中得知这是一个 example.com 的区域文件,所以它知道在所有不以点结尾的名字后面自动添加 example.com

我想这里的想法只是为了少打几个字符——如果要打出全称,区域文件会是这样:

    orange.example.com.  300   IN    A     1.2.3.4
    fruit.example.com.   300   IN    CNAME orange.example.com.
    grape.example.com.   3000  IN    CNAME example.com.

确实多了很多字符。

你也可以不通过区域文件来使用 DNS

尽管官方的 DNS RFC(RFC 1035)中定义了区域文件格式,但你也可以不通过区域文件来使用 DNS。例如,AWS Route 53 就不用区域文件来存储 DNS 记录!你可以通过 Web 界面或 API 来创建记录,我猜他们是用某种数据库而不是一堆文本文件来存储记录。

不过,Route 53(像许多其他 DNS 工具一样)确实支持导入和导出区域文件,这个功能或许在你更换 DNS 提供商时很有用。

dig 命令输出中末尾的 “.”

现在我们来讨论下 dig 命令的输出:

$ dig example.com
; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> +all example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10712
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
example.com.        81239   IN  A   93.184.216.34

有一件奇怪的事是,几乎每一行都以 ;; 开头,这是怎么回事?; 是区域文件中的注释字符!

我想 dig 以这种奇怪的方式输出的原因可能是为了方便你粘贴这些内容到区域文件时,不用修改就可以直接用。

这也是 example.com 末尾有个 . 的原因 —— 区域文件要求域名末尾必须有点(否则它们会被解释为是相对于该区域的)。因此 dig 也这么处理了。

我真的希望 dig 有一个 +human 选项,以更人性化的方式打印出这些信息,但现在我太懒了,懒得花工夫去实际贡献代码来做这件事(而且我并不擅长 C),所以我只能在我的博客上抱怨一下 :smiley:

curl 命令输出中末尾的 “.”

我们来看下另一个末尾有 . 的例子:curl

我家里有台计算机名为 grapefruit,其上运行着 Web 服务器。当我执行 curl grapefruit 时,会输出:

$ curl grapefruit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
......

这样运行没问题!但是如果我在域名后加一个 . 会怎样呢?它报错了:

$ curl grapefruit.
curl: (6) Could not resolve host: grapefruit.

发生了什么?为了搞清楚,我们需要先来学习下搜索域:

初识搜索域

当我执行 curl grapefrult 时,它是怎么被转成一个 DNS 请求的?你可能会认为我的计算机会向域名 grapefruit 发送一个请求,对吗?但事实并不是这样。

让我们用 tcpdump 来看看到底是什么域名在被查询。

$ sudo tcpdump -i any port 53
[...] A? grapefruit.lan. (32)

实际上是向 grapefruit.lan. 发送的请求。为什么呢?

解释一下:

  1. curl 调用函数 getaddrinfo 来查询 grapefruit
  2. getaddrinfo 查询了我计算机上的文件 /etc/resolv.conf
  3. /etc/resolv.conf 包含两行内容:
nameserver 127.0.0.53
search lan
  1. 因为有 search lan 这行内容,所以 getaddrinfograpefruit 的末尾添加了一个 lan,去查询 grapefruit.lan

什么时候搜索域被使用?

现在我们知道了一些奇怪的事情:当我们查询一个域名时,有时会有一个额外的东西(如 lan)被加到最后。但是什么时候会发生这种情况呢?

  1. 如果我们在域名末尾添加一个 .,那么这时不会用到搜索域
  2. 如果域名中间包含一个 .(如 example.com),那么默认也不会用到搜索域。但是可以通过修改配置来改变处理逻辑(在 ndots 里有更详细的说明)

我们现在知道了 curl grapefruit.curl grapefruit 结果不一样的原因——因为一个查询的是 grapefruit.,而另一个查询的是 grapefruit.lan.

我的计算机怎么知道使用哪个搜索域呢?

当我连接路由时,它会通过 DHCP 告诉我它的搜索域是 lan —— 它也是通过这个方式给我的计算机分配 IP。

所以为什么要在域名末尾加一个点呢?

现在我们已经了解了区域文件和搜索域,下面是我认为的人们要在域名末尾加点的原因:

有两种情况下,域名会被修改,并在末尾添加其他东西。

  • example.com 的区域文件中,grapefruit 会被转为 grapefruit.example.com
  • 在我的本地网络(我的计算机已经配置了使用搜索域 lan),grapefruit 被转为 grapefruit.lan

因此,由于域名在某些情况下实际上可能被转成其他名字,人们就在结尾处加一个 .,以此来表示 “这是域名,末尾不需要添加任何东西,这就是全部内容”。否则会引起混乱。

“这就是全部内容”的技术术语是**“完全限定域名”,简称为“FQDN”**。所以 google.com. 是一个完全限定域名,而 google.com 不是。

我总是要提醒自己这样做的原因,因为我很少使用区域文件和搜索域,所以我经常觉得——“我当然是指 google.com 而不是 google.com.something.else! 我为什么要指其他东西?那太傻了!”

但是有些人确实在使用区域文件和搜索域(例如 Kubernetes 中使用了搜索域!),所以结尾的 . 很有用,可以让人确切的知道,不应该再添加其他东西。

什么时候在末尾添加 “.”?

以下是关于何时在域名末尾加 ". " 的几个简单说明:

需要添加:配置 DNS 时

在配置 DNS 时,使用完全限定域名从来都不是坏事。你不一定要这样做:非完全限定域名通常也能正常工作,但我从来没有遇到过不接受完全限定域名的 DNS 软件。

有些 DNS 软件需要这样做:现在我为 jvns.ca 使用的 DNS 服务器让我在域名的末尾加上 .(例如在 CNAME 记录中),并提示如果我不添加,它将在我输入的内容末尾加上 .jvns.ca。我不同意这个设计决定,但这不是什么大问题,我只是在最后加一个 .

不需要加:在浏览器中

令人困惑的是,在浏览器中,在域名结尾处加一个 . 不能正常运行。例如,如果我在浏览器中输入 https://twitter.com.,它就会报错。它会返回 404。

我认为这里发生的事情是,它将 HTTP Host 标头设置为 Host:twitter.com.,而对端的 Web 服务器则期望 Host:twitter.com

同样地,https://jvns.ca. 由于某种原因,返回了一个 SSL 错误。

我认为相对域名在过去是比较常见的

最后一件事:我认为“相对”域名(比如我用 grapefruit 来指代我家的另一台计算机 grapefruit.lan)在过去更常用,因为 DNS 是在大学或其他有大型内部网络的大机构中开发的。

在今天的互联网上,使用“绝对”域名(如 example.com)似乎更为普遍。


via: https://jvns.ca/blog/2022/09/12/why-do-domain-names-end-with-a-dot-/

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

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

Fedora 38 考虑提供面向手机的版本

虽然 Fedora 37 还没有发布,但是开发人员已经在计划下一个版本。一个新的提案建议提供一个面向移动设备的 Phosh 镜像,用于运行专注于智能手机和平板电脑的 Wayland shell,同时提供一个良好的基于 GNOME 的体验。另外预计也会引入一个带有 KDE Plasma Mobile 的镜像。Fedora 38 预计明年春天发布。

消息来源:Phoronix
老王点评:期待看到 Fedora 运行在手机上。

罗马法院要求 Cloudflare 的 DNS 封锁 BT 网站

罗马法院已经确认,Cloudflare 必须通过其公共的 1.1.1.1 DNS 解析器阻止三个 BT 网站。Cloudflare 并不反对阻止针对其客户网站的请求,但认为干扰其 DNS 解析器是有问题的,因为这些措施不容易在地理上加以限制,将影响封锁该政府管辖范围以外的终端用户。

消息来源:Slashdot
老王点评:DNS 作为互联网流量入口的方向标,屡屡被用来做各种滥用。已经习惯了,不是吗?

15000 个网站被黑帽 SEO 利用

安全专家发现,有 15000 个网站(其中大部分是 WordPress 网站),这些网站被重定向到虚假的问答讨论区。恶意威胁者的目标是产生足够的索引页面,以增加虚假问答网站的权重,从而在搜索引擎中获得更好的排名。

消息来源:Bleeping Computer
老王点评:WordPress 这样的 CMS 系统越流行,其被一网打尽的可能越多,尤其是都采用了某些存在缺陷的插件或主题时。

使得 DNS 难以理解的事情之一是它是 分布式的。有成千上万(也许是几十万?我不知道!)的 权威性域名服务器 authoritative nameserver ,以及至少 1000 万个解析器。而且它们正在运行许多不同的软件!不同服务器运行着不同的软件意味着 DNS 的工作方式有很多不一致的地方,这可能导致各种令人沮丧的问题。

但是,与其谈论这些问题,我更感兴趣的是弄清楚 —— 为什么 DNS 是分布式的是一件好事?

为什么 DNS 是分布式的是件好事?

一个原因是 可扩展性 —— DNS 的分布式设计使其更容易扩展,对故障的恢复能力更强。我发现,尽管 DNS 已经有近 40 年的历史,但它的扩展性仍然很好,这真是令人惊讶。这一点非常重要,但这并不是这篇文章的主题。

相反,我想说的是,它是分布式的意味着你可以 控制 你的 DNS 的工作方式。你可以向巨大而复杂的 DNS 服务器中添加更多的服务器!添加你控制的服务器!

昨天我 在 Twitter 上问 为什么你要运行自己的 DNS 服务器,我得到了很多很好的答案,我想在这里总结一下。

你可以运行 2 种类型的 DNS 服务器

你可以运行 2 种主要类型的 DNS 服务器:

  1. 如果你拥有一个域名,你可以为该域名运行一个 权威名称服务器
  2. 如果你有一台电脑(或一个有很多电脑的公司),你可以运行一个 解析器 来为这些电脑解析 DNS。

DNS 不是静态数据库

我经常看到 DNS 的 “电话簿” 比喻,域名就像人名,IP 地址就像电话号码。

这是一个不错的思维模型。但是,“电话簿” 思维模型可能会使你认为,如果你对 google.com 进行 DNS 查询,你将永远得到相同的结果。而这是不正确的。

你在 DNS 查询中得到的记录可能取决于:

  • 你在世界的哪个地方(也许你会得到一个离你更近的服务器的 IP 地址)
  • 你是否在企业网络里(你可以在其中解析内部域名)
  • 该域名是否被你的 DNS 解析器认为是 “坏” 的(它可能被封锁!)
  • 之前的 DNS 查询(也许 DNS 解析器正在做基于 DNS 的负载平衡,每次给你一个不同的 IP 地址)
  • 你是否在使用机场 Wi-Fi 专属门户(机场 Wi-Fi 会在你登录前以不同的方式解析 DNS 记录,它会给你发送一个特殊的 IP 来重定向你)
  • 随便什么

你可能想控制你自己的服务器的很多原因都与 DNS 不是一个静态数据库这一事实有关 —— 对于如何处理 DNS 查询,你可能会有不同的选择(无论是为你的域名还是为你的组织)。

运行权威性名称服务器的理由

这些原因并没有任何特定的顺序。

对于其中一些原因,你不一定必须要运行你自己的权威名称服务器,你只需选择提供了该功能的权威名称服务器服务就行了。

要明确的是:有很多理由 运行自己的权威名称服务器 —— 我就没有运行,我也不想说服你应该这样做。它需要时间来维护,你的服务可能不那么可靠,等等。

原因:安全

这条推文说的很好

[存在] 攻击者通过你的 DNS 供应商的客户支持人员获得 DNS 变更权限的风险,客服本来只应该提供帮助。他们可以被你的 DNS 阻止(也许就是因为缺少这个)。内部可能更容易审计和验证内容。

原因:你喜欢运行 bind/nsd

有几个人提到的一个原因是:“我习惯于编写区域文件和运行 bindnsd ,对我来说这样做更容易。”

如果你喜欢 bind/nsd 的方式,但又不想运维自己的服务器,有几个人提到,你也可以通过运行一个 “隐藏的主服务器” 来获得 bind 的优势,该服务器存储记录,但从一个 “辅助” 服务器提供所有的实际 DNS 查询。这里有一些我发现的关于配置辅助 DNS 的网页,以 NS1cloudflareDyn 作为示例。

我真的不知道什么是最佳的权威 DNS 服务器。我想我只在工作中使用过 nsd。

原因:你可以使用新的记录类型

并非所有的 DNS 服务都支持某些较新的 DNS 记录类型,但如果你运行你自己的 DNS,你就可以支持任何你想要的记录类型。

原因:用户界面

你可能不喜欢你正在使用的 DNS 服务的用户界面(或 API,或干脆没有 API)。这与 “你喜欢运行 BIND ”的原因差不多,也许你喜欢编写区域文件的方式。

原因:你可以自己修复问题

当问题出现时,能够自己解决,有一些明显的优点和缺点(优点:你可以解决问题,缺点:你必须解决问题)。

原因:做一些奇怪的、自定义的事情

你可以写一个 DNS 服务器,做任何你想做的事情,它不一定要只返回一组静态记录。

有几个例子:

原因:省钱

权威名称服务器似乎一般按每百万次 DNS 查询收费。比如,似乎 Route 53 每百万次查询收费 0.5 美元,NS1 每百万次查询收费约 8 美元。

我对一个大型网站的权威 DNS 服务器实际需要解决多少次查询没有概念(哪些类型的网站会对其权威 DNS 服务器进行 10 亿次 DNS 查询?可能是很多,但我没有这方面的经验)。但是有几个人在回复中提到成本是一个原因。

原因:你可以改变你的注册商

如果你为你的域名使用一个单独的权威名称服务器,而不是你的注册商的名称服务器,那么当你转移到一个不同的注册商时,你所要做的就是把你的权威 DNS 服务器设置为正确的值,从而使你的 DNS 恢复正常。你不需要迁移你所有的 DNS 记录,那非常痛苦。

但你不需要为此而运行你自己的名字服务器。

原因:地理 DNS

你可能想根据客户的位置为你的域名返回不同的 IP 地址,给他们一个离他们很近的服务器。

这是很多权威的域名服务器服务所提供的服务,你不需要为此而专门运行名字服务器。

原因:避免针对他人的拒绝服务攻击

许多权威 DNS 服务器是共享的。这意味着,如果有人攻击 google.com 或其他的 DNS 服务器,而你恰好在使用同一个权威 DNS 服务器,你可能会受到影响,即使攻击不是针对你。例如,2016 年的这次 对 Dyn 的 DDoS 攻击

原因:把所有的配置放在一个地方

有一个人提到,他们喜欢把所有的配置(DNS 记录、let's encrypt、nginx 等)放在一台服务器上的同一个地方。

另类原因:把 DNS 当作 VPN 使用

显然,iodine 是一个可以让你通过 DNS 隧道传输流量的权威 DNS 服务器,它可以让你像 VPN 一样与外界联系,

运行解析器的原因

原因:隐私

如果有人能看到你所有的 DNS 查询,他们就有你(或你组织中的每个人)正在访问的所有域名的完整列表!你可能更愿意保持这种隐私。你可能更愿意保持这种隐私。

原因:阻止恶意网站

如果你运行你自己的解析器,你可以(通过不返回任何结果)拒绝解析你认为 “坏” 的域名的 DNS 查询。

几个你可以自己运行(或只是使用)的解析器的例子:

  • Pi-Hole 阻止广告商
  • Quad9 阻止做恶意软件/网络钓鱼/间谍软件的域名。 Cloudflare 似乎有一个 类似的服务
  • 我想也有一些企业安全软件会阻止那些托管恶意软件的域名的 DNS 查询
  • DNS 不是静态数据库。它是非常动态的,答案往往实时取决于查询的 IP 地址、内容服务器的当前负载等。除非你将这些记录的服务委托给做出这些决定的实体,否则很难实时实现。
  • DNS 委派控制使访问控制非常简单。从区域中切下的部分都由控制委派服务器的人控制,所以对一个主机名的责任是隐含在 DNS 委派中的。

原因:在 nginx 中获得动态代理

这里有一个很酷的故事,来自 这条推文

我在一个应用程序中写了一个 DNS 服务器,然后把它设置为 nginx 的解析器,这样我就可以获得动态的后端代理,而不需要 nginx 运行 lua。Nginx 向应用程序发送 DNS 查询,应用程序查询 Redis 并作出相应的反应。这对我正在做的事情来说,效果非常好。

原因:避免恶意解析器

一些 ISP 运行的 DNS 解析器会做一些不好的事情,比如把不存在的域名指向他们控制的 IP,向你显示广告或他们控制的奇怪的搜索页面。

使用你控制的解析器或你信任的另一个解析器可以帮助你避免这种情况。

原因:解析内部域名

你可能有一个内部网络,其域名(比如 blah.corp.yourcompany.com)并不在公共互联网上。为内部网络中的机器运行你自己的解析器,就有可能访问这些域名。

无论是访问只在本地的服务,还是为公共互联网上的服务获得本地地址,你都可以在家庭网络中做同样的事情。

原因:避免你的 DNS 查询被中间人劫持

有一个人

我在我的局域网路由器上运行了一个解析器,它的上游使用了基于 HTTPS 的 DNS(DoH),所以物联网和其他不支持 DoH 或 DoT 的设备不会在外面喷射明文 DNS 查询。

就是这样

对我来说,探索 DNS 的 “原因” 感觉很重要,因为它是一个如此复杂凌乱的系统,我认为大多数人如果不理解为什么这些复杂的东西是有用的,就很难有动力去学习这么复杂的主题。

感谢 Marie 和 Kamal 对这篇文章的讨论,也感谢 Twitter 上提供这些原因的所有人。


via: https://jvns.ca/blog/2022/01/05/why-might-you-run-your-own-dns-server-/

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

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

你好!最近我和几个朋友聊天,他们提到希望知道如何使用 dig 来进行 DNS 查询,所以这是一篇关于它的速读博文。

当我第一次使用 dig 时,我发现它有点吓人 —— 有这么多的选项!我打算把大部分的选项省略。在这篇文章中,我打算不谈 dig 的大部分选项,只谈我实际使用的选项。

我最近还了解到,你可以设置一个 .digrc 配置文件,让它的输出更容易阅读,这让它的使用变得更加轻松。

几年前我还画了一个关于 digzine 页,但我想写这篇文章来包括更多的信息。

两种类型的 dig 参数:查询和格式化

有两种主要的参数可以传递给 dig

  1. 告诉 dig 要进行什么 DNS 查询的参数
  2. 告诉 dig 如何 格式化响应的参数

首先,让我们看一下查询选项。

主要的查询选项

你通常想控制 DNS 查询的 3 件事是:

  1. 名称(如 jvns.ca)。默认情况下,查询的是空名称(.)。
  2. DNS 查询类型(如 ACNAME)。默认是 A
  3. 发送查询的 服务器(如 8.8.8.8)。默认是 /etc/resolv.conf 中的内容。

其格式是:

dig @server name type

这里有几个例子:

  • dig @8.8.8.8 jvns.ca 向谷歌的公共 DNS 服务器(8.8.8.8)查询 jvns.ca
  • dig ns jvns.cajvns.ca 进行类型为 NS 的查询。

-x:进行反向 DNS 查询

我偶尔使用的另一个查询选项是 -x,用于进行反向 DNS 查询。下面是输出结果的样子。

$ dig -x 172.217.13.174
174.13.217.172.in-addr.arpa. 72888 IN PTR yul03s04-in-f14.1e100.net。

-x 不是魔术。dig -x 172.217.13.174 只是对 174.13.217.172.in-addr.arpa. 做了一个 PTR 查询。下面是如何在不使用 `-x’ 的情况下进行完全相同的反向 DNS 查询。

$ dig ptr 174.13.217.172.in-addr.arpa.
174.13.217.172.in-addr.arpa. 72888 IN PTR yul03s04-in-f14.1e100.net。

我总是使用 -x,因为它可以减少输入。

格式化响应的选项

现在,让我们讨论一下你可以用来格式化响应的参数。

我发现 dig 默认格式化 DNS 响应的方式对初学者来说是很难接受的。下面是输出结果的样子:

; <<>> DiG 9.16.20 <<>> -r jvns.ca
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28629
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: d87fc3022c0604d60100000061ab74857110b908b274494d (good)
;; QUESTION SECTION:
;jvns.ca.           IN  A

;; ANSWER SECTION:
jvns.ca.        276 IN  A   172.64.80.1

;; Query time: 9 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Dec 04 09:00:37 EST 2021
;; MSG SIZE  rcvd: 80

如果你不习惯看这个,你可能需要花点时间来筛选,找到你要找的 IP 地址。而且大多数时候,你只对这个响应中的一行感兴趣(jvns.ca. 180 IN A 172.64.80.1)。

下面是我最喜欢的两种方法,可以使 dig 的输出更容易管理:

方式 1 : +noall +answer

这告诉 dig 只打印 DNS 响应中的“答案”部分的内容。下面是一个查询 google.comNS 记录的例子:

$ dig +noall +answer ns google.com
google.com.     158564  IN  NS  ns4.google.com.
google.com.     158564  IN  NS  ns1.google.com.
google.com.     158564  IN  NS  ns2.google.com.
google.com.     158564  IN  NS  ns3.google.com.

这里的格式是:

NAME         TTL            TYPE   CONTENT
google.com   158564   IN    NS     ns3.google.com.

顺便说一下:如果你曾经想知道 IN 是什么意思,它是指“查询类”,代表“ 互联网 internet ”。它基本上只是上世纪 80、90 年代的遗物,当时还有其他网络与互联网竞争,如“ 混沌网络 chaosnet ”。

方式 2:+short

这就像 dig +noall +answer,但更短:它只显示每条记录的内容。比如说:

$ dig +short ns google.com
ns2.google.com.
ns1.google.com.
ns4.google.com.
ns3.google.com.

你可以在 digrc 中设置格式化选项

如果你不喜欢 dig 的默认格式(我就不喜欢!),你可以在你的主目录下创建一个 .digrc 文件,告诉它默认使用不同的格式。

我非常喜欢 +noall +answer 格式,所以我把 +noall +answer 放在我的 ~/.digrc 中。下面是我使用该配置文件运行 dig jvns.ca 时的情况。

$ dig jvns.ca
jvns.ca.        255在172.64.80.1中

这样读起来就容易多了!

如果我想回到所有输出的长格式(我有时会这样做,通常是因为我想看响应的权威部分的记录),我可以通过运行再次得到一个长答案。

$ dig +all jvns.ca

dig +trace

我使用的最后一个 dig 选项是 +tracedig +trace 模仿 DNS 解析器在查找域名时的做法 —— 它从根域名服务器开始,然后查询下一级域名服务器(如 .com),以此类推,直到到达该域名的权威域名服务器。因此,它将进行大约 30 次 DNS 查询。(我用 tcpdump 检查了一下,对于每个根域名服务器的 A / AAAA 记录它似乎要进行 2 次查询,所以这已经是 26 次查询了。我不太清楚它为什么这样做,因为它应该已经有了这些 IP 的硬编码,但它确实如此。)

我发现这对了解 DNS 的工作原理很有用,但我不认为我用它解决过问题。

为什么要用 dig

尽管有一些更简单的工具来进行 DNS 查询(如 doghost),我发现自己还是坚持使用 dig

我喜欢 dig 的地方实际上也是我 不喜欢 dig 的地方 —— 它显示了大量的细节!

我知道,如果我运行 dig +all,它将显示 DNS 响应的所有部分。例如,让我们查询 jvns.ca 的一个根名称服务器。响应有 3 个部分,我可能会关心:回答部分、权威部分和附加部分。

$ dig @h.root-servers.net. jvns.ca +all
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18229
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 9
;; WARNING: recursion requested but not available

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

;; AUTHORITY SECTION:
ca.         172800  IN  NS  c.ca-servers.ca.
ca.         172800  IN  NS  j.ca-servers.ca.
ca.         172800  IN  NS  x.ca-servers.ca.
ca.         172800  IN  NS  any.ca-servers.ca.

;; ADDITIONAL SECTION:
c.ca-servers.ca.    172800  IN  A   185.159.196.2
j.ca-servers.ca.    172800  IN  A   198.182.167.1
x.ca-servers.ca.    172800  IN  A   199.253.250.68
any.ca-servers.ca.  172800  IN  A   199.4.144.2
c.ca-servers.ca.    172800  IN  AAAA    2620:10a:8053::2
j.ca-servers.ca.    172800  IN  AAAA    2001:500:83::1
x.ca-servers.ca.    172800  IN  AAAA    2620:10a:80ba::68
any.ca-servers.ca.  172800  IN  AAAA    2001:500:a7::2

;; Query time: 103 msec
;; SERVER: 198.97.190.53#53(198.97.190.53)
;; WHEN: Sat Dec 04 11:23:32 EST 2021
;; MSG SIZE  rcvd: 289

dog 也显示了 “附加” 部分的记录,但它没有明确指出哪个是哪个(我猜 + 意味着它在附加部分?) ,但它似乎没有显示“权威”部分的记录。

$ dog @h.root-servers.net. jvns.ca 
  NS ca.                2d0h00m00s A "c.ca-servers.ca."
  NS ca.                2d0h00m00s A "j.ca-servers.ca."
  NS ca.                2d0h00m00s A "x.ca-servers.ca."
  NS ca.                2d0h00m00s A "any.ca-servers.ca."
   A c.ca-servers.ca.   2d0h00m00s + 185.159.196.2
   A j.ca-servers.ca.   2d0h00m00s + 198.182.167.1
   A x.ca-servers.ca.   2d0h00m00s + 199.253.250.68
   A any.ca-servers.ca. 2d0h00m00s + 199.4.144.2
AAAA c.ca-servers.ca.   2d0h00m00s + 2620:10a:8053::2
AAAA j.ca-servers.ca.   2d0h00m00s + 2001:500:83::1
AAAA x.ca-servers.ca.   2d0h00m00s + 2620:10a:80ba::68
AAAA any.ca-servers.ca. 2d0h00m00s + 2001:500:a7::2

host 似乎只显示“答案”部分的记录(在这种情况下没有得到记录):

$ host jvns.ca h.root-servers.net
Using domain server:
Name: h.root-servers.net
Address: 198.97.190.53#53
Aliases:

总之,我认为这些更简单的 DNS 工具很好(我甚至自己做了一个 简单的网络 DNS 工具),如果你觉得它们更容易,你绝对应该使用它们,但这就是为什么我坚持使用 dig 的原因。drill 的输出格式似乎与 dig 的非常相似,也许 drill 更好!但我还没有真正试过它。

就这些了

我最近才知道 .digrc,我非常喜欢使用它,所以我希望它能帮助你们中的一些人花更少的时间来整理 dig 的输出!

有人在 Twitter 上指出,如果有办法让 dig 显示响应的简短版本,其中也包括响应的状态(如 NOERRORNXDOMAINSERVFAIL 等),那就更好了!我同意这个观点!不过我在手册中没有找到这样的选项。


via: https://jvns.ca/blog/2021/12/04/how-to-use-dig/

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

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

微软计划为 Edge 浏览器提供“超级无敌安全模式”

这个新的“超级无敌安全模式”背后的想法是在 Edge 浏览器的 JavaScript 引擎 V8 中禁用对 JIT 的支持。JIT 的工作原理是将 JavaScript 提前编译成机器代码。如果浏览器需要再次使用这些代码,就会获得显著的速度提升。如果不需要,代码就会被丢弃。但是,JIT 相关的安全问题占 2019 年所有 V8 漏洞的 45%。此外,超过一半的“野外” Chrome 浏览器漏洞依赖于 JIT 相关的错误。而另外一方面,尽管在 2010 年代早期和中期,JIT 在加速浏览器方面发挥了举足轻重的作用,但对 Edge 的性能来说,JIT 已经不是一个关键功能。

一个看起来复杂精巧的系统在带来好处的同时,也可能是麻烦的源头。

勒索软件攻击迫使医院将救护车拒之门外

美国印第安纳州的一家拥有 315 张床位的医院,在周三凌晨开始的勒索软件攻击中陷入瘫痪。他们关闭了一些服务和业务,以试图阻止恶意软件通过其系统传播。这导致他们不得不将救护车拒之门外,并将病人转移到其他医院。截至星期四晚上,该医院的电子邮件系统和电子医疗记录仍然处于关闭状态。

从本质上上勒索软件攻击就是恶意的,并不能指望他们“盗亦有道”。

DNS 服务商被发现可以监听其他客户的动态 DNS 流量的漏洞

安全研究人员发现了一个简单的漏洞,可以拦截一部分通过亚马逊和谷歌等托管 DNS 服务商的动态 DNS 流量。他们“窃听”了包括财富 500 强公司和政府机构在内的 15000 个组织和数百万台设备的内部网络流量。在实验中,他们发现了各种敏感数据,包括计算机名称、雇员姓名、办公地点以及暴露的网络资源信息。亚马逊和谷歌已经在其各自的 DNS 服务中修复了这个问题。

国内使用这种动态 DNS 的企业并不多,而且其实这种服务更应该通过企业内服务提供。

在超级信息高速公路上绕行。

 title=

用传奇的 DNS 黑客 Dan Kaminsky 的话说,“事实证明,互联网对全球社会而言意义重大”。为了使互联网发挥作用,计算机必须能够在最复杂的网络万维网(WWW)中找到彼此。这是几十年前给政府工作人员和学术界 IT 人员提出的问题,而今天我们使用的正是他们的解决方案。然而,他们实际上并不是在寻求建立 互联网 the Internet ,他们是在为 互联网络(实际上是 级联网 catenets ,即“ 级联的网络 concatenated networks ”,但这个术语最终不再流行)定义规范,它是一个 互连的网络 interconnected networks 的通用术语。

根据这些规范,网络使用数字组合,作为每台在线计算机的一种家地址,并为每个网站分配一个人性化但高度结构化的“主机名”(如 example.com)。由于用户主要是通过网站 名称 与互联网互动,可以说互联网的运作只是因为我们都同意一个标准化的命名方案。如果有足够多的人决定使用不同的命名方案,互联网的工作方式 可能 会有所不同。一群用户可以形成一个平行的互联网,它使用相同的物理基础设施(电缆、卫星和其他传输方式,将数据从一个地方传送到另一个地方),但使用不同的方法将主机名与编号地址联系起来。

事实上,这已经存在了,这篇文章展示了你如何访问它。

了解名称服务器

术语“ 互联网 internet ”实际上是 互联 interconnected 网络 networks 这两个术语的组合,因为这正是它的本质。就像一个城市里的邻里、一个国家里的城市、或一个大陆里的国家,或一个星球里的大陆一样,互联网通过将数据从一个家庭或办公室网络传输到数据中心和服务器房或其他家庭或办公室网络而跨越了全球。这是一项艰巨的任务,但它并非没有先例。毕竟,电话公司很久以前就把世界连接起来了,在那之前,电报和邮政服务也是这样做的。

在电话或邮件系统中,有一份名单,无论是正式的还是非正式的,都将人名与实际地址联系起来。它过去以电话簿的形式传递到家里,该电话簿是社区内每个电话所有者的目录。邮局的运作方式不同:他们通常依靠寄信人知道预定收信人的姓名和地址,但邮政编码和城市名称被用来把信送到正确的邮局。无论哪种方式,都需要有一个标准的组织方案。

对于计算机来说,IP 协议 描述了必须如何设置互联网上的地址格式。域名服务器 (DNS) 协议 描述了如何将人性化名称分配给 IP 以及从 IP 解析。无论你使用的是 IPv4 还是 IPv6,其想法都是一样的:当一个节点(可能是一台计算机或通往另一个网络的网关)加入一个网络时,它被分配一个 IP 地址。

如果你愿意,你可以在 ICANN(一个帮助协调互联网上的网站名称的非营利组织)注册一个域名,并将该名称指向该 IP。没有要求你“拥有”该 IP 地址。任何人都可以将任何域名指向任何 IP 地址。唯一的限制是,一次只能有一个人拥有一个特定的域名,而且域名必须遵循公认的 DNS 命名方案。

域名及其相关 IP 地址的记录被输入到 DNS 中。当你在浏览器中导航到一个网站时,它会迅速查询 DNS 网络,以找到与你所输入(或从搜索引擎点击)的任何 URL 相关的 IP 地址。

一个不同的 DNS

为了避免在谁拥有哪个域名的问题上发生争论,大多数域名注册商对域名注册收取一定的费用。该费用通常是象征性的,有时甚至是 0 美元(例如,freenom.com 提供免费的 .tk.ml.gq.cf 域名,先到先得)。

在很长一段时间里,只有几个“顶级”域名,包括 .org.edu.com。现在有很多,包括 .club.biz.name.international 等等。本质上它们就是字母组合,但是,有很多潜在的顶级域名是无效的,如 .null。如果你试图导航到一个以 .null 结尾的网站,那么你不会成功。它不能注册,也不是域名服务器的有效条目,而且它根本就不存在。

OpenNIC项目 已经建立了一个备用的 DNS 网络,将域名解析为 IP 地址,但它包括目前互联网不使用的名字。可用的顶级域名包括:

  • .geek
  • .indy
  • .bbs
  • .gopher
  • .o
  • .libre
  • .oss
  • .dyn
  • .null

你可以在这些(以及更多的)顶级域名中注册一个域名,并在 OpenNIC 的 DNS 系统上注册,使它们映射到你选择的 IP 地址。

换句话说,一个网站可能存在于 OpenNIC 网络中,但对于不使用 OpenNIC 名称服务器的人来说,仍然无法访问。这绝不是一种安全措施,甚至不是一种混淆手段。这只是一种有意识的选择,在 超级信息高速公路上绕行

如何使用 OpenNIC 的 DNS 服务器

要访问 OpenNIC 网站,你必须配置你的计算机使用 OpenNIC 的 DNS 服务器。幸运的是,这并不是一个非此即彼的选择。通过使用一个 OpenNIC 的 DNS 服务器,你可以同时访问 OpenNIC 和标准网络。

要配置你的 Linux 电脑使用 OpenNIC 的 DNS 服务器,你可以使用 nmcli 命令,这是 Network Manager 的一个终端界面。在开始配置之前,请访问 opennic.org,寻找离你最近的 OpenNIC DNS 服务器。与标准 DNS 和 边缘计算 一样,服务器在地理上离你越近,你的浏览器查询时的延迟就越少。

下面是如何使用 OpenNIC:

1、首先,获得一个连接列表:

$ sudo nmcli connection
NAME                TYPE             DEVICE
Wired connection 1  802-3-ethernet   eth0
MyPersonalWifi      802-11-wireless  wlan0
ovpn-phx2-tcp       vpn              --

你的连接肯定与这个例子不同,但要关注第一栏。这提供了你的连接的可读名称。在这个例子中,我将配置我的以太网连接,但这个过程对无线连接是一样的。

2、现在你知道了需要修改的连接的名称,使用 nmcli 更新其 ipv4.dns 属性:

$ sudo nmcli con modify "Wired connection 1" ipv4.dns "134.195.4.2"

在这个例子中,134.195.4.2 是离我最近的服务器。

3、防止 Network Manager 使用你路由器设置的内容自动更新 /etc/resolv.conf

$ sudo nmcli con modify "Wired connection 1" ipv4.ignore-auto-dns yes

4、将你的网络连接关闭,然后再次启动,以实例化新的设置:

$ sudo nmcli con down "Wired connection 1"
$ sudo nmcli con up "Wired connection 1"

完成了。你现在正在使用 OpenNIC 的 DNS 服务器。

路由器上的 DNS

你可以通过对你的路由器做这样的修改,将你的整个网络设置为使用 OpenNIC。你将不必配置你的计算机的连接,因为路由器将自动提供正确的 DNS 服务器。我无法演示这个,因为路由器的接口因制造商而异。此外,一些互联网服务提供商 (ISP) 不允许你修改名称服务器的设置,所以这并不总是一种选择。

测试 OpenNIC

为了探索你所解锁的“其他”互联网,尝试在你的浏览器中导航到 grep.geek。如果你输入 http://grep.geek,那么你的浏览器就会带你到 OpenNIC 的搜索引擎。如果你只输入 grep.geek,那么你的浏览器会干扰你,把你带到你的默认搜索引擎(如 SearxYaCy),并在窗口的顶部提供一个导航到你首先请求的页面。

 title=

不管怎么说,你最终还是来到了 grep.geek,现在可以在网上搜索 OpenNIC 的版本了。

广阔天地

互联网旨在成为一个探索、发现和平等访问的地方。OpenNIC 利用现有的基础设施和技术帮助确保这些东西。它是一个可选择的互联网替代方案。如果这些想法吸引了你,那就试一试吧!


via: https://opensource.com/article/21/4/opennic-internet

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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