分类 技术 下的文章

这是一个包含了所有已知 USB 设备 ID 的开源项目。

市场上有成千上万的 USB 设备:键盘、扫描仪、打印机、鼠标和其他无数的设备,都能在 Linux 上工作。它们的供应商详情都存储在 USB ID 仓库中。

lsusb

Linux lsusb 命令列出了连接到系统的 USB 设备的信息,但有时信息不完整。例如,我最近注意到我的一个 USB 设备的品牌没有被识别。设备是可以使用的,但是在列出我所连接的 USB 设备的详情中没有提供任何识别信息。以下是我的 lsusb 命令的输出:

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc.
Bus 001 Device 003: ID 0951:16d2 Kingston Technology
Bus 001 Device 002: ID 18f8:1486  
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

正如你在最后一栏中看到的,有一个设备没有制造商描述。要确定这个设备是什么,我必须对我的 USB 设备树进行更深入的检查。幸运的是,lsusb 命令有更多的选项。其中一个选项是 -D device,来获取每个设备的详细信息,正如手册页面所解释的那样:

“不会扫描 /dev/bus/usb 目录,而只显示给定设备文件所属设备的信息。设备文件应该是类似 /dev/bus/usb/001/001 这样的文件。这个选项会像 v 选项一样显示详细信息,但你必须是 root 用户才行。"

我认为如何将设备路径传递给 lsusb 命令并不容易,但在仔细阅读手册页和初始输出后,我能够确定如何构造它。USB 设备驻留在 UDEV 文件系统中。它们的设备路径始于 USB 设备目录 /dev/bus/usb/。路径的其余部分由设备的总线 ID 和设备 ID 组成。我的无描述设备是 Bus 001 Device 002,被翻译成了 001/002,完成的路径为 /dev/bus/usb/001/002。现在我可以把这个路径传给 lsusb。我还会用管道传给 more,因为这里往往有很多信息:

$ lsusb -D /dev/bus/usb/001/002 |more
Device: ID 18f8:1486  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x18f8
  idProduct          0x1486
  bcdDevice            1.00
  iManufacturer           0
  iProduct                1
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0
        HID Device Descriptor:

不幸的是,这里并没有提供我希望找到的细节。初始输出中出现的两个字段 idVendoridProduct 都是空的。这有些帮助,因为往下看一下,就会发现 Mouse 这个词。所以,这个设备就是我的鼠标。

USB ID 仓库

这让我不禁想知道如何才能填充这些字段,不仅是为了自己,也是为了其他 Linux 用户。原来已经有了一个开源项目:USB ID 仓库。它是一个公共仓库,它包含了 USB 设备中使用的所有已知 ID。它也被用于各种程序中,包括 USB Utilities,用于显示人类可读的设备名称。

 title=

你可以从网站上或通过下载数据库来浏览特定设备的仓库。也欢迎用户提交新的数据。我要为我的鼠标提交数据,因为它没有在里面。

更新你的 USB ID

USB ID 数据库存储在一个名为 usb.ids 的文件中。这个文件的位置可能会因 Linux 发行版的不同而不同。

在 Ubuntu 18.04 中,这个文件位于 /var/lib/usbutils。要更新数据库,使用命令 update-usbids,你需要用 root 权限或 sudo 来运行。

$ sudo update-usbids

如果有新文件,它就会被下载。当前的文件将被备份,并被替换为新文件:

$ ls -la
total 1148
drwxr-xr-x  2 root root   4096 Jan 15 00:34 .
drwxr-xr-x 85 root root   4096 Nov  7 08:05 ..
-rw-r--r--  1 root root 614379 Jan  9 15:34 usb.ids
-rw-r--r--  1 root root 551472 Jan 15 00:34 usb.ids.old

最新版本的 Fedora Linux 将数据库文件保存在 /usr/share/hwdata 中。而且,没有更新脚本。而是,数据库由一个名为 hwdata 的软件包维护。

# dnf info hwdata

Installed Packages
Name         : hwdata
Version      : 0.332
Release      : 1.fc31
Architecture : noarch
Size         : 7.5 M
Source       : hwdata-0.332-1.fc31.src.rpm
Repository   : @System
From repo    : updates
Summary      : Hardware identification and configuration data
URL          : https://github.com/vcrhonek/hwdata
License      : GPLv2+
Description  : hwdata contains various hardware identification and configuration data,
             : such as the pci.ids and usb.ids databases.

现在我的 USB 设备列表在这个之前未命名的设备旁边显示了一个名字。比较一下上面的输出:

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
Bus 001 Device 003: ID 0951:16d2 Kingston Technology
Bus 001 Device 014: ID 18f8:1486 [Maxxter]
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

你可能会注意到,随着仓库定期更新新设备和现有设备的详细信息,其他设备的描述也会发生变化。

提交新数据

提交新数据有两种方式:使用网站或通过电子邮件发送特殊格式的补丁文件。在开始之前,我阅读了提交指南。首先,我必须注册一个账户,然后我需要使用项目的提交系统提供我鼠标的 ID 和名称。添加任何 USB 设备的过程都是一样的。

你使用过 USB ID 仓库么?如果有,请在评论中分享你的反馈。


via: https://opensource.com/article/20/8/usb-id-repository

作者:Alan Formy-Duval 选题:lujun9972 译者:geekpi 校对:wxy

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

在这一章的 Linux 黑话解释中,我们来讨论一些基本的东西。

让我们来讨论一下什么是 Linux 发行版,为什么它被称为 发行版 distribution (或简称 distro),以及,它与 Linux 内核有什么不同。你还会了解到为什么有些人坚称 Linux 为 GNU/Linux。

什么是 Linux 发行版?

Linux 发行版是一个由 Linux 内核、GNU 工具、附加软件和软件包管理器组成的操作系统,它也可能包括显示服务器桌面环境,以用作常规的桌面操作系统。

这个术语之所以是 “Linux 发行版”,是因为像 Debian、Ubuntu 这样的机构“发行”了 Linux 内核以及所有必要的软件及实用程序(如网络管理器、软件包管理器、桌面环境等),使其可以作为一个操作系统使用。

你的发行版还负责提供更新来维护其内核和其他实用程序。

所以,“Linux” 是内核,而 “Linux 发行版”是操作系统。这就是为什么它们有时也被称为基于 Linux 的操作系统的原因。

如果不是很理解以上所有的内容,不要担心。下面我将详细解释一下。

“Linux 只是一个内核,不是一个操作系统。”这是什么意思?

你可能看到到过这句话,这说的没错。内核是一个操作系统的核心,它接近于具体硬件。你使用应用程序和 shell 与它交互。

为了理解这一点,我就用我在《什么是 Linux 的详细指南》中曾用过的那个比喻。把操作系统看成车辆,把内核看成引擎。你不能直接驱动引擎。同样,你也不能直接使用内核。

一个 Linux 发行版可以看作是一个汽车制造商(比如丰田或福特)为你提供的现成的汽车,就像 Ubuntu 或 Fedora 发行版的发行商为你提供的一个基于 Linux 的现成操作系统一样。

什么是 GNU/Linux?

让我们再来看看这张图片。1991 年的时候,Linus Torvalds 创造的只是其中的最内圈,即 Linux 内核。

要使用 Linux,即使是以最原始的形式,甚至没有 GUI,你也需要一个 shell。最常见的是 Bash shell。

然后,你需要在 shell 中运行一些命令来完成一些工作。你能记起一些基本的 Linux 命令吗?比如 catcpmvgrepfinddiffgzip 等等。

严格来说,这些所谓的“Linux 命令”并不是只属于 Linux。它们中的很多都来源于 UNIX 操作系统。

在 Linux 诞生之前,Richard Stallman 就已经在 1983 年创建了 自由软件项目 free software project 中的第一个项目:GNU(GNU 是“GNU is Not Unix” 的递归缩写)。GNU 项目实现了许多流行的 Unix 实用程序,如 catgrepawk、shell(bash),同时还开发了自己的编译器(GCC)和编辑器(Emacs)。

在 80 年代,UNIX 是专有软件,而且超级昂贵。这就是为什么 Linus Torvalds 开发了一个类似 UNIX 的新内核的原因。为了与 Linux 内核进行交互,Linus Torvalds 使用了 GNU 工具,这些工具在其 GPL 开源许可证下是免费的。

有了这些 GNU 工具,它的行为也像 UNIX 一样。这就是为什么 Linux 也被称为类 UNIX 操作系统的原因。

你无法想象没有 shell 和所有这些命令的 Linux。由于 Linux 与 GNU 工具集成得很深,几乎是完全依赖于 GNU 工具,所以纯粹主义者要求 GNU 应该得到应有的认可,这就是为什么他们坚称它为 GNU Linux(写成 GNU/Linux)。

总结

那么,该用哪个术语?Linux、GNU/Linux、Linux 发行版,基于 Linux 的操作系统还是类 UNIX 操作系统?这取决于你的上下文。我已经为你提供了足够的细节,让你对这些相关的术语有更好的理解。

我希望你喜欢这个 Linux 黑话解释系列,并能学习到新的东西。欢迎你的反馈和建议。


via: https://itsfoss.com/what-is-linux-distribution/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

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

Windows Insiders 预览版 20211 开始,WSL 2 将提供一个新功能:wsl --mount。这个新的参数允许在 WSL 2 中连接和挂载一个物理磁盘,这样你就可以访问 Windows 不支持的文件系统(比如 ext4)。

因此,如果你使用不同的磁盘对 Windows 和 Linux 进行双启动,你现在可以从 Windows 访问你的 Linux 文件了。

开始使用

要挂载磁盘,请打开具有管理员权限的 PowerShell 窗口并运行。

wsl --mount <DiskPath>

要在 Windows 中列出可用的磁盘,请运行。

wmic diskdrive list brief

要从 WSL 2 上卸载和分离磁盘,请运行以下命令

wsl --unmount <Diskpath>

磁盘路径可在 DeviceID 栏中找到。通常是以 \\.\\.\PHYSICALDRIVE* 的格式。下面是一个将指定硬盘的特定分区挂载到 WSL 中并浏览其文件的例子:

使用文件资源管理器访问这些文件

一旦挂载,也可以通过 Windows 资源管理器访问这些磁盘,通过导航到 \wsl$,然后到挂载文件夹。

局限性

默认情况下,wsl --mount 会尝试将磁盘挂载为 ext4。要指定一个文件系统,或者更高级的方案,请查看在 WSL 2 中挂载磁盘

另外请注意,这个功能有一个限制,那就是只有物理磁盘可以连接到 WSL 2。目前,还不能附加单个分区。更多关于限制的细节请看这里

反馈

如果你遇到任何问题或反馈,请在 GitHub 上提交议题。

把 Jupyter 变成一个远程管理控制台。

SSH 是一个强大的远程管理工具,但有些细节还不够好。编写一个成熟的远程管理控制台听起来好像是一件很费劲的事情。当然,开源社区中肯定有人已经写了一些东西吧?

是的,他们已经写出来了,它的名字是 Jupyter。你可能会认为 Jupyter 是那些数据科学家用来分析一周内的广告点击趋势之类的工具。这并没有错,它确实是的,而且它是一个很好的工具。但这仅仅刻画是它的表面。

关于 SSH 端口转发

有时,你可以通过 22 端口进入一台服务器。一般你也连接不到其他端口。也许你是通过另一个有更多访问权限的“堡垒机”,或者限制主机或端口的网络防火墙访问 SSH。当然,限制访问的 IP 范围是有充分理由的。SSH 是远程管理的安全协议,但允许任何人连接到任何端口是相当不必要的。

这里有一个替代方案:运行一个简单的 SSH 端口转发命令,将本地端口转发到一个“远程”本地连接上。当你运行像 -L 8111:127.0.0.1:8888 这样的 SSH 端口转发命令时,你是在告诉 SSH 将你的本地端口 8111 转发到它认为的“远程”主机 127.0.0.1:8888。远程主机认为 127.0.0.1 就是它本身。

就像在《芝麻街》节目一样,“这里”是一个微妙的词。

地址 127.0.0.1 就是你告诉网络的“这里”。

实际动手学习

这可能听起来很混乱,但运行比解释它更简单。

$ ssh -L 8111:127.0.0.1:8888 [email protected]
Linux 6ad096502e48 5.4.0-40-generic #44-Ubuntu SMP Tue Jun 23 00:01:04 UTC 2020 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Aug  5 22:03:25 2020 from 172.17.0.1
$ jupyter/bin/jupyter lab --ip=127.0.0.1
[I 22:04:29.771 LabApp] JupyterLab application directory is /home/moshez/jupyter/share/jupyter/lab
[I 22:04:29.773 LabApp] Serving notebooks from local directory: /home/moshez
[I 22:04:29.773 LabApp] Jupyter Notebook 6.1.1 is running at:
[I 22:04:29.773 LabApp] http://127.0.0.1:8888/?token=df91012a36dd26a10b4724d618b2e78cb99013b36bb6a0d1
<删节>

端口转发 8111127.0.0.1,并在远程主机上启动 Jupyter,它在 127.0.0.1:8888 上监听。

现在你要明白,Jupyter 在撒谎。它认为你需要连接到 8888 端口,但你把它转发到 8111 端口。所以,当你把 URL 复制到浏览器后,但在点击回车之前,把端口从 8888 修改为 8111

 title=

这就是你的远程管理控制台。如你所见,底部有一个“终端”图标。点击它可以启动一个终端。

 title=

你可以运行一条命令。创建一个文件会在旁边的文件浏览器中显示出来。你可以点击该文件,在本地的编辑器中打开它。

 title=

你还可以下载、重命名或删除文件:

 title=

点击上箭头就可以上传文件了。那就上传上面的截图吧。

 title=

最后说个小功能,Jupyter 可以让你直接通过双击远程图像查看。

哦,对了,如果你想用 Python 做系统自动化,还可以用 Jupyter 打开笔记本。

所以,下次你需要远程管理防火墙环境的时候,为什么不使用 Jupyter 呢?


via: https://opensource.com/article/20/9/remote-management-jupyter

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

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

Rclone Browser 是一款高效的 GUI 程序,它可以让你轻松地使用 Rclone 管理和同步云存储上的数据。在这里,我们来看看它提供的功能和工作方式。

如果你想原生地在 Linux 上毫不费力地使用 One Drive 或 Google Drive,你可以选择像 Insync 这样的高级 GUI 工具。

如果你能在终端上下功夫,你可以使用 rclone 与许多 Linux 上的云存储服务进行同步。我们有一份详细的在 Linux 中使用 Rclone 与 OneDrive 同步的指南

rclone 是一个相当流行且有用的命令行工具。rclone 提供的功能是很多有经验的用户需要的。

然而,即使它足够有用,也不是每个人都能从终端使用它。

因此,在本文中,我将介绍一个令人印象深刻的 GUI “Rclone Browser”,它可以让你轻松地使用 Rclone 管理和同步云存储上的数据。

值得注意的是,rclone 确实提供了一个实验性的基于 Web 的 GUI。但我们将在这里专注于 Rclone Browser

Rclone Browser:Rclone 的开源 GUI

Rclone Browser 是一款可以让你浏览、修改、上传/下载、列出文件,并在想充分利用远程存储位置的情况下,做更多你想做的事情的 GUI。

它提供了一个简单的用户界面,并且工作良好(根据我的快速测试)。让我们详细看看它提供的功能以及如何开始使用它。

Rclone Browser 的功能

它提供了很多选项和控制来管理远程存储位置。根据你的使用情况,你可能会发现它的功能丰富或不知所措。以下是它的功能:

  • 浏览和修改 rclone 远程存储位置
  • 支持加密云存储
  • 支持自定义位置和配置加密
  • 不需要额外的配置。它将使用相同的 rclone 配置文件(如果你有的话)
  • 在不同的标签页中同时导航多个位置
  • 按层次列出文件(按文件名、大小和修改日期)
  • rclone 命令的执行是异步的,不会使 GUI 冻结
  • 你可以上传、下载、创建新文件夹、重命名、删除文件和文件夹
  • 上传文件时支持拖放
  • 在 VLC 等播放器中播放流媒体文件
  • 挂载和卸载文件夹/云端驱动器
  • 能够计算文件夹的大小、导出文件列表,并将 rclone 命令复制到剪贴板
  • 支持便携模式
  • 支持共享驱动器(如果你使用 Google Drive)。
  • 针对支持共享链接的远程存储服务,支持获取共享链接
  • 能够创建任务,你可以很容易地保存,以便以后再次运行或编辑。
  • 黑暗模式
  • 跨平台支持(Windows、macOS 和 Linux)。

在 Linux 上安装 Rclone Browser

在使用 Rclone Browser 之前,你需要在你的 Linux 发行版上安装 rclone。请按照官方安装说明来安装。

你可以在 GitHub 页面发布页找到 Rclone Browser 的 AppImage 文件。所以,你在任何 Linux 发行版上运行它都不会有问题。

如果你不知道 AppImage,我会推荐你阅读我们的在 Linux 上使用 AppImage 指南。

你也可以选择构建它。操作说明在 GitHub 页面上。

开始使用 Rclone Browser

在这里,我只分享一下使用 Rclone Browser 应该知道的几件事。

如果你在终端中使用 rclone 时有任何现有的远程位置,它将自动显示在 GUI 中。你也可以点击 “Refresh” 按钮来获取最新的新增内容。

如上图所示,当你点击 “Config” 按钮时,它会启动终端,让你轻松地添加一个新的远程或按你的要求配置它。当终端弹出的时候不用担心,Rclone browser 会执行命令来完成所有必要的任务,你只需要在需要的时候设置或编辑一些东西。你不需要执行任何 rclone 命令。

如果你有一些现有的远程位置,你可以使用 “Open” 按钮打开它们,并在不同的标签页中访问云存储,如下所示。

你可以轻松地挂载云驱动器,上传/下载文件,获取详细信息,共享文件夹的公共链接(如果支持),以及直接播放流媒体文件。

如果你想复制、移动或与远程存储位置同步数据,你可以简单地创建一个任务来完成。只需确保设置正确,你可以模拟执行或者直接运行任务。

你可以在 “Jobs” 页面找到所有正在运行的任务,如果需要,你可以取消/停止它们。

除了上面提到的所有基本功能外,你可以前往 “File->Preferences” 更改 rclone 位置、挂载选项、下载文件夹、带宽设置以及代理。

要了解更多关于它的用法和功能,你可能需要前往 GitHub 页面了解所有的技术信息。

总结

Rclone Browser 对于每一位想要使用 rclone 强大功能的 Linux 用户来说,绝对是得心应手。

你是否已经尝试过了呢?你更喜欢通过 GUI 还是终端来使用 rclone?请在下面的评论中告诉我你的想法!


via: https://itsfoss.com/rclone-browser/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

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

域名系统解析互联网网站的名称及其底层 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中国 荣誉推出