Linux 上的主机文件

所有支持网络的操作系统都有一个 hosts 文件来将主机名转换为 IP 地址。 每当您通过输入主机名打开网站时,您的系统都会通读主机文件以检查相应的 IP,然后打开它。 hosts 文件是一个简单的文本文件,位于 Linux 和 Mac OS (/等等/主机)。 Windows 也有一个 hosts 文件,在 Windows 上你可以在 WindowsSystem32driversetc 中找到它

这是它的样子:

从我们提到的内容来看,您可能希望这个文件有一个很长的 IP 列表和相应的主机名; 但事实并非如此。 hosts文件只包含几行;

  • 默认情况下,第一部分包含本地主机和机器的主机名和 IP 地址。 这是您通常会修改以进行所需更改的部分。
  • 第二部分包含有关支持 IPv6 的主机的信息,您几乎不会编辑这些行。

每当您输入地址时,您的系统都会检查主机文件是否存在; 如果存在,您将被定向到相应的 IP。 如果主机名未在主机文件中定义,您的系统将检查您互联网的 DNS 服务器以查找相应的 IP 并相应地重定向您。

为什么要编辑 /etc/hosts 文件?

通过编辑主机文件,您可以实现以下目标:

  • 阻止网站
  • 处理攻击或解决恶作剧
  • 为本地服务器上的位置创建别名
  • 覆盖您的 DNS 服务器提供的地址
  • 控制对网络流量的访问

如何编辑 /etc/hosts 文件?

您只能以超级用户身份编辑位于 /etc/hosts 的 hosts 文本文件。 您首先必须在 Linux 终端中的文本编辑器中打开它,例如 VI 编辑器、Nano 编辑器或 gedit 等。 然后,您将进行所需的更改并保存文件以使这些更改生效。

在本文中,我们将使用 Nano 编辑器来编辑文件。 请输入以下命令:

$ sudo nano /etc/hosts

或者

$ sudo gedit /etc/hosts

(用于 gedit)

使用 nano 编辑器编辑 /etc/hosts 文件

如前所述,我们将编辑主机文件的第一部分,其中定义了 IP 地址和主机名。 我们将解释以下两种使用 hosts 文件的方法:

  • 阻止网站
  • 通过别名访问远程计算机

阻止网站

您可以通过将网站重定向到本地主机的 IP 或默认路由来阻止网站。

例如,如果我们想阻止 google.com,我们可以将以下文本添加到我们的文件中:

127.0.0.1 www.google.com

现在,当我们打开 google 网站时,我们的系统将从主机文件中获取我们的 localhost (127.0.0.1) 的 IP,并将我们重定向到该 IP,而不是来自我们 DNS 服务器的 google IP。

或者

0.0.0.0 www.google.com

现在,当我们打开 google 网站时,我们的系统将从主机文件中获取默认路由 (0.0.0.0) 的 IP,并将我们重定向到该 IP,而不是来自我们 DNS 服务器的 google IP。

这就是编辑后的文件的样子。 请按 ctrl+X 保存更改。

编辑主机文件以阻止对域的访问

现在,当您尝试从浏览器打开 www.google.com 时,您将看到如下错误消息:

在桌面上成功阻止站点

请注意,我们在主机文件中定义了完整的地址 www.google.com 而不仅仅是主机名 google.com 因为如果我们只定义后者,现代浏览器有时会绕过该块。

您还可以在 hosts 文件中使用一些预定义的阻止列表: https://github.com/StevenBlack/hosts

通过别名访问远程计算机

假设我们有一个位于我们想要访问的本地网络的服务器。 我们通常必须键入服务器的 IP 才能访问它,除非它已在我们的本地 DNS 上定义。 避免反复输入 IP 的一种方法是在主机文件中为服务器分配一个别名,如下所示:

192.168.1.10 myserver

IP 对应我们要访问的服务器的位置,而 myserver 是我们要使用的新别名。

将域重定向到新 IP

现在,当我们保存文件并在地址栏中键入 myserver 时,我们将被重定向到我们的远程服务器。

我们了解到,通过对主机文件进行非常简单的更改,我们可以根据需要自定义并重定向网络流量。 我们还可以通过将主机文件恢复为默认值来摆脱网络攻击或恶作剧。