如果我修改我的/etc/hosts
文件如下:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
更改为:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 www.microsoft.com
这会将任何访问 的尝试重定向www.microsoft.com
到127.0.0.1
,从而有效地阻止对 的访问www.microsoft.com
。效果很好。
现在,我不想重定向到本地主机,而是想重定向到另一个网站,例如,我想将 /etc/hosts 更改为如下所示:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
www.google.com www.microsoft.com
但是,当我尝试访问 时www.microsoft.com
,它永远不会将我重定向到www.google.com
。它只是直接转到www.microsoft.com
并忽略我在 中执行的操作/etc/hosts
。
有人知道如何解决这个问题或者如何实现这个目标吗?
除了 Marcus 正确解释浏览器可能绕过 hosts 文件之外:
hosts 文件只能将名称解析为地址,而不能解析为另一个名称。例如
或者
一旦您的浏览器使用 hosts 文件,就会导致您的请求连接到 google,至少直到下次 google 想要改变他们的 IP 路由时,您就必须手动更新它。
但它不适用于 Web 请求。解析并连接到地址后,HTTP 会在请求标头中发送主机名。因此,您的浏览器将连接到 Google,并发送请求说“我想要 www.microsoft.com 的登录页面”。Google 会说“WTF?我不是 www.microsoft.com”并给出错误。
如果您发出 HTTPS 请求,无论是明确的还是因为该网站之前已经向您发送了 HSTS 标头(尽管www.microsoft.com没有,至少对我来说没有)和/或预加载的 HSTS,浏览器将首先与 SNI 进行 TLS 握手,要求提供 www.microsoft.com;许多主机会在 TLS 级别拒绝这种错误主机连接,但谷歌(目前?)不会,并且像普通的 TLS 连接一样,提供其证书 - 当然是谷歌的证书而不是微软的,所以浏览器会拒绝它并出现错误,例如“我无法访问www.microsoft.com,因为您的连接已被未经授权或邪恶的不法分子拦截”。
(据我所知,没有浏览器真正说的是“不法行为者”,但我喜欢它的声音。)
基于 /etc/hosts 或本地 DNS 设置的常用重定向方法通常不适用于现代浏览器;这些浏览器通常默认使用 DNS over TLS 或 DNS over HTTPS 以及自定义服务器,以独立于本地名称解析。一方面,这会将您执行的所有名称查找发送到中央服务器,因此在隐私方面感觉有点可疑,另一方面,它可以阻止您的 ISP 干扰这些操作 - 这是一种相当常见的情况,尤其是在 wifi 热点上,第一次 HTTPS 请求的重定向可能会导致相当令人困惑的失败,而不是显示网站的门户页面。
因此,您必须在浏览器中配置名称解析以不使用 HTTPS 上的 DNS。(在 Firefox 的设置对话框中搜索“DNS”)以使其正常工作。
除此之外,如果您遵循Dave Thompson 的回答,您的操作应该有效。请注意,浏览器有自己的解析器和自己的解析器缓存;我不知道如果它仍然有效并且您更改了 /etc/hosts 条目,它们是否会立即刷新其解析度。
坦白说,如果你想要屏蔽某些域名及其子域名,那么使用一个允许你这样做的浏览器插件可能是值得的。Chrome 只是在插件中禁用了该选项,因此你的首选浏览器是 Firefox,带有uBlock origin 插件。