工作原理

hosts 文件是一个本地的文本文件,它存储了域名(如 www.google.com)和对应 IP 地址的映射关系,当您在浏览器中输入一个网址时,您的电脑会首先查询 hosts 文件,看看这个域名是否已经被“手动定义”了一个 IP 地址。

  • 如果找到了:电脑会直接使用 hosts 文件中指定的 IP 地址,而不会去访问互联网上的 DNS 服务器进行查询。
  • 如果没找到:电脑才会向 DNS 服务器查询该域名对应的真实 IP 地址。

屏蔽网站的核心原理就是:hosts 文件中,将想要屏蔽的域名指向一个无效的或本地回环的 IP 地址,最常用的 IP 地址是 0.0.10.0.0

  • 0.0.1:这是本地回环地址,指向您自己的电脑,如果将一个域名指向它,浏览器会尝试连接您电脑上的某个服务(比如一个 Web 服务器),如果该服务未运行,连接就会失败,从而达到屏蔽效果。
  • 0.0.0:这是一个“无地址”,指向一个“虚无”的地方,将域名指向它,浏览器会立即无法连接,通常比 0.0.1 的效果更直接,且不会产生任何本地连接尝试。

推荐使用 0.0.0,因为它更高效、更干净。


操作步骤

步骤 1:获取要屏蔽的域名

确定您要屏蔽的网站的准确域名。

  • www.facebook.com
  • www.youtube.com
  • www.bilibili.com
  • 以及其移动版 m.facebook.com 等。

步骤 2:找到并编辑 hosts 文件

根据您的操作系统,文件位置和编辑方法不同。

对于 Windows 用户

  1. 找到文件

    • Win + R 键,打开“运行”对话框。
    • 输入以下路径并按回车:
      C:\Windows\System32\drivers\etc\hosts
    • 或者,直接在文件资源管理器地址栏输入上述路径。
  2. 编辑文件

    • 方法一(推荐): 右键点击 hosts 文件,选择“打开方式” -> “记事本”,这样能避免文件编码问题。
    • 右键点击 hosts 文件,选择“属性”,取消“只读”复选框,然后双击用记事本打开。
  3. 添加屏蔽规则

    • 在文件末尾,另起一行,输入以下格式:
      0.0.0   www.example.com
    • 格式说明0.0.0域名 之间至少需要一个空格制表符
    • 示例:要屏蔽 Facebook 和 YouTube,可以添加:
      0.0.0   www.facebook.com
      0.0.0.0   facebook.com
      0.0.0.0   www.youtube.com
      0.0.0.0   youtube.com

      注意:屏蔽主域名(如 facebook.com)和 www 子域名可以更彻底。

  4. 保存文件

    • 在记事本中,按 Ctrl + S 保存。
    • 如果系统提示您“您没有权限修改此文件”,请点击“继续”,并以管理员身份保存,您可能需要将文件另存为,然后替换原文件。

对于 macOS 和 Linux 用户

  1. 打开终端

  2. 编辑文件

    • hosts 文件位于 /etc/ 目录下。
    • 使用具有管理员权限的文本编辑器(如 nanovim)打开文件。nano 对新手更友好。
      sudo nano /etc/hosts
    • 系统会提示您输入您的用户密码(输入时不会显示字符),输入后按回车。
  3. 添加屏蔽规则

    • 使用方向键将光标移动到文件末尾。
    • 按照与 Windows 相同的格式添加规则:
      0.0.0   www.example.com
    • 示例
      0.0.0   www.facebook.com
      0.0.0.0   facebook.com
      0.0.0.0   www.youtube.com
      0.0.0.0   youtube.com
  4. 保存并退出

    • 对于 nano 编辑器
      • Ctrl + X
      • 系统会提示您是否保存更改,按 Y 键确认。
      • 按回车键确认文件名。
    • 对于 vim 编辑器
      • Esc 键进入命令模式。
      • 输入 wq 并按回车(w 代表写入,q 代表退出)。

步骤 3:刷新 DNS 缓存

为了让修改立即生效,需要刷新操作系统的 DNS 缓存。

  • Windows:

    • Win + R,输入 cmd,然后按 Ctrl + Shift + Enter管理员身份打开命令提示符。
    • 输入以下命令并按回车:
      ipconfig /flushdns
    • 看到“已成功刷新 DNS 解析缓存”的提示即表示成功。
  • macOS:

    • 打开终端,输入以下命令并按回车:
      sudo dscacheutil -flushcache
  • Linux (根据发行版不同):

    • 对于使用 systemd 的系统 (如 Ubuntu 16.04+, Debian 8+, CentOS 7+):
      sudo systemd-resolve --flush-caches
    • 对于使用 systemd-resolved 的其他系统:
      sudo resolvectl flush-caches
    • 对于较旧的系统:
      sudo /etc/init.d/nscd restart

步骤 4:验证

打开您的浏览器,尝试访问被屏蔽的网站,如果网站无法打开,或者浏览器显示“无法访问此网站”之类的错误,那么恭喜您,屏蔽成功了!


高级技巧与注意事项

  1. 使用通配符屏蔽子域名: 如果您想屏蔽 example.com 下的所有子域名(如 a.example.com, b.example.com 等),可以使用通配符 。

    0.0.0   *.example.com

    注意:并非所有操作系统和 DNS 解析器都完美支持通配符,但在大多数现代系统上是有效的。

  2. 屏蔽网站但保留特定服务: 有些网站的服务(如 api.example.com)可能需要正常访问,而只是屏蔽其主站(www.example.com),您可以分别指定:

    0.0.0   www.example.com
    0.0.0.0   example.com
    # 其他需要屏蔽的子域名...
    # 但保留
    # 127.0.0.1   api.example.com
  3. 使用 添加注释: 为了方便日后管理和维护,可以在 hosts 文件中使用 来添加注释。

    # 屏蔽社交媒体网站
    0.0.0.0   www.facebook.com
    0.0.0.0   www.twitter.com
    # 屏蔽视频网站
    0.0.0.0   www.youtube.com
  4. 如何解除屏蔽: 要解除对某个网站的屏蔽,只需编辑 hosts 文件,找到对应的行,在行首添加一个 将其注释掉,然后保存并刷新 DNS 缓存即可。

    # 0.0.0.0   www.facebook.com
  5. 局限性

    • 仅对当前设备有效hosts 文件的修改只在您操作的这台电脑上生效,局域网内的其他电脑不会受到影响。
    • 容易被绕过:对于有一定技术知识的用户,他们可以找到并修改自己的 hosts 文件来解除屏蔽。
    • 无法屏蔽 HTTPS 网站(理论上):虽然 hosts 文件可以重定向域名,但如果目标网站使用了 HTTPS,浏览器会进行证书验证,如果域名被指向 0.0.0,证书验证会失败,从而阻止访问,所以它对 HTTPS 网站同样有效。

替代方案

如果您需要在整个局域网内屏蔽网站,或者需要一个更强大的管理工具,可以考虑以下方案:

  • 路由器层面屏蔽:在路由器的管理界面(通常是 168.1.1168.0.1)中设置“家长控制”或“URL 黑名单”,所有连接该路由器的设备都会被屏蔽。
  • 使用专业的 DNS 服务
    • OpenDNS FamilyShield:将路由器的 DNS 服务器设置为 67.222.12367.220.123,可以自动屏蔽成人内容。
    • CleanBrowsing:提供不同级别的过滤(安全、成人、家庭),可以配置为屏蔽社交媒体、游戏等网站。
    • Pi-hole:这是一款可以在您的树莓派或任何 Linux 服务器上安装的软件,它能作为整个局域网的 DNS 服务器,通过一个强大的黑名单列表来屏蔽广告和网站,功能非常强大。

希望这份详细的指南能帮助您成功屏蔽不需要的网站!