工作原理
hosts 文件是一个本地的文本文件,它存储了域名(如 www.google.com)和对应 IP 地址的映射关系,当您在浏览器中输入一个网址时,您的电脑会首先查询 hosts 文件,看看这个域名是否已经被“手动定义”了一个 IP 地址。
- 如果找到了:电脑会直接使用
hosts文件中指定的 IP 地址,而不会去访问互联网上的 DNS 服务器进行查询。 - 如果没找到:电脑才会向 DNS 服务器查询该域名对应的真实 IP 地址。
屏蔽网站的核心原理就是:在 hosts 文件中,将想要屏蔽的域名指向一个无效的或本地回环的 IP 地址,最常用的 IP 地址是 0.0.1 和 0.0.0。
0.0.1:这是本地回环地址,指向您自己的电脑,如果将一个域名指向它,浏览器会尝试连接您电脑上的某个服务(比如一个 Web 服务器),如果该服务未运行,连接就会失败,从而达到屏蔽效果。0.0.0:这是一个“无地址”,指向一个“虚无”的地方,将域名指向它,浏览器会立即无法连接,通常比0.0.1的效果更直接,且不会产生任何本地连接尝试。
推荐使用 0.0.0,因为它更高效、更干净。
操作步骤
步骤 1:获取要屏蔽的域名
确定您要屏蔽的网站的准确域名。
www.facebook.comwww.youtube.comwww.bilibili.com- 以及其移动版
m.facebook.com等。
步骤 2:找到并编辑 hosts 文件
根据您的操作系统,文件位置和编辑方法不同。
对于 Windows 用户
-
找到文件:
- 按
Win + R键,打开“运行”对话框。 - 输入以下路径并按回车:
C:\Windows\System32\drivers\etc\hosts - 或者,直接在文件资源管理器地址栏输入上述路径。
- 按
-
编辑文件:
- 方法一(推荐): 右键点击
hosts文件,选择“打开方式” -> “记事本”,这样能避免文件编码问题。 - 右键点击
hosts文件,选择“属性”,取消“只读”复选框,然后双击用记事本打开。
- 方法一(推荐): 右键点击
-
添加屏蔽规则:
- 在文件末尾,另起一行,输入以下格式:
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子域名可以更彻底。
- 在文件末尾,另起一行,输入以下格式:
-
保存文件:
- 在记事本中,按
Ctrl + S保存。 - 如果系统提示您“您没有权限修改此文件”,请点击“继续”,并以管理员身份保存,您可能需要将文件另存为,然后替换原文件。
- 在记事本中,按
对于 macOS 和 Linux 用户
-
打开终端。
-
编辑文件:
hosts文件位于/etc/目录下。- 使用具有管理员权限的文本编辑器(如
nano或vim)打开文件。nano对新手更友好。sudo nano /etc/hosts
- 系统会提示您输入您的用户密码(输入时不会显示字符),输入后按回车。
-
添加屏蔽规则:
- 使用方向键将光标移动到文件末尾。
- 按照与 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
-
保存并退出:
- 对于
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
- 对于使用 systemd 的系统 (如 Ubuntu 16.04+, Debian 8+, CentOS 7+):
步骤 4:验证
打开您的浏览器,尝试访问被屏蔽的网站,如果网站无法打开,或者浏览器显示“无法访问此网站”之类的错误,那么恭喜您,屏蔽成功了!
高级技巧与注意事项
-
使用通配符屏蔽子域名: 如果您想屏蔽
example.com下的所有子域名(如a.example.com,b.example.com等),可以使用通配符 。0.0.0 *.example.com注意:并非所有操作系统和 DNS 解析器都完美支持通配符,但在大多数现代系统上是有效的。
-
屏蔽网站但保留特定服务: 有些网站的服务(如
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 -
使用 添加注释: 为了方便日后管理和维护,可以在
hosts文件中使用 来添加注释。# 屏蔽社交媒体网站 0.0.0.0 www.facebook.com 0.0.0.0 www.twitter.com # 屏蔽视频网站 0.0.0.0 www.youtube.com -
如何解除屏蔽: 要解除对某个网站的屏蔽,只需编辑
hosts文件,找到对应的行,在行首添加一个 将其注释掉,然后保存并刷新 DNS 缓存即可。# 0.0.0.0 www.facebook.com -
局限性:
- 仅对当前设备有效:
hosts文件的修改只在您操作的这台电脑上生效,局域网内的其他电脑不会受到影响。 - 容易被绕过:对于有一定技术知识的用户,他们可以找到并修改自己的
hosts文件来解除屏蔽。 - 无法屏蔽 HTTPS 网站(理论上):虽然
hosts文件可以重定向域名,但如果目标网站使用了 HTTPS,浏览器会进行证书验证,如果域名被指向0.0.0,证书验证会失败,从而阻止访问,所以它对 HTTPS 网站同样有效。
- 仅对当前设备有效:
替代方案
如果您需要在整个局域网内屏蔽网站,或者需要一个更强大的管理工具,可以考虑以下方案:
- 路由器层面屏蔽:在路由器的管理界面(通常是
168.1.1或168.0.1)中设置“家长控制”或“URL 黑名单”,所有连接该路由器的设备都会被屏蔽。 - 使用专业的 DNS 服务:
- OpenDNS FamilyShield:将路由器的 DNS 服务器设置为
67.222.123和67.220.123,可以自动屏蔽成人内容。 - CleanBrowsing:提供不同级别的过滤(安全、成人、家庭),可以配置为屏蔽社交媒体、游戏等网站。
- Pi-hole:这是一款可以在您的树莓派或任何 Linux 服务器上安装的软件,它能作为整个局域网的 DNS 服务器,通过一个强大的黑名单列表来屏蔽广告和网站,功能非常强大。
- OpenDNS FamilyShield:将路由器的 DNS 服务器设置为
希望这份详细的指南能帮助您成功屏蔽不需要的网站!
