如何解决为什么 /etc/hosts 不再适用于 Big Sur 上的某些网站?
多年来我一直使用 /etc/hosts
来调整 IP 地址。有时它是为了原型设计,或添加一个尚未准备好进入公共 DNS 的用于开发目的的地址。有时我会通过将某些域重定向到错误的 IP 地址来阻止我不想访问的域。有些是侵入性跟踪网站,例如 connect.facebook.net
。作为反拖延措施,我一直屏蔽其他网站,例如 politico.com
之类的新闻网站,否则我可能会在我打算工作的时候花一整天时间阅读这些网站。
但现在在 macOS 11 Big Sur 上,我注意到一些 /etc/hosts
条目被 Safari 忽略。使用 gethostbyname()
进行 DNS 查找正确显示阻止/覆盖地址,但 Safari 仍然显示公共站点。
这到底是怎么回事? /etc/hosts
有什么变化,我可以在开发工作时继续使用它来覆盖 DNS 条目吗?
解决方法
macOS 11 添加了对正式称为 “Service binding and parameter specification via the DNS (DNS SVCB and HTTPSSV)” 的支持。
现在,当您访问网站时,不仅会查询典型的 DNS A
主机到 IP 地址记录,还会检查全新的 HTTPS
DNS 记录。这不仅仅是一个名称条目;这是一种全新的记录类型 (#65),与更熟悉的 A
和 CNAME
以及 MX
搭配使用。
这些新的 HTTPS
DNS 记录可以表明该站点支持 HTTPS,包括协议版本和 IP 地址。这样,输入一个裸域名会立即提供网站的 https://
版本,甚至可能在 HTTP/2 或 HTTP/3 上,跳过老式的 HTTP 重定向。甚至还有一个 draft option 供域运营商告诉您的计算机绕过任何本地 DNS 设置并使用特定的服务器来处理未来涉及其域的所有 DNS 查询。
这里有很多支持性能的意图,也有一些支持隐私的意图。
但是在规范和实现中都存在一个致命的隐私和安全缺陷:它消除了用户在 /etc/hosts
中覆盖域名查找的能力,即使在面对恶意的域名运营商时也是如此。
要了解这是如何运作的:
-
macOS 自带的
查看它们是否存在dig
版本不直接支持这些新记录,但是可以通过$ dig -t type65 www.politico.com … ;; QUESTION SECTION: ;www.politico.com. IN TYPE65 ;; ANSWER SECTION: www.politico.com. 53806 IN CNAME www.politico.com.cdn.cloudflare.net. www.politico.com.cdn.cloudflare.net. 300 IN TYPE65 \# 58 0001000001000302683200040008681210CA681211CA000600202606 47000000000000000000681210CA2606470000000000000000006812 11CA …
-
我不知道如何解析它,但是如果我对它进行数据包捕获,wireshark 可以做到
Domain Name System (response) Queries www.politico.com.cdn.cloudflare.net: type HTTPS,class IN Answers www.politico.com.cdn.cloudflare.net: type HTTPS,class IN Name: www.politico.com.cdn.cloudflare.net Type: HTTPS (HTTPS Specific Service Endpoints) (65) Class: IN (0x0001) Time to live: 300 (5 minutes) Data length: 58 SvcPriority: 1 TargetName: <Root> SvcParams SvcParam: ALPN SvcParamKey: ALPN (1) SvcParamValue length: 3 ALPN length: 2 ALPN: h2 SvcParam: IPv4 Hint SvcParamKey: IPv4 Hint (4) SvcParamValue length: 8 IP: 104.18.16.202 IP: 104.18.17.202 SvcParam: IPv6 Hint SvcParamKey: IPv6 Hint (6) SvcParamValue length: 32 IP: 2606:4700::6812:10ca IP: 2606:4700::6812:11ca
这就是正在发生的事情:
- Big Sur 上的 Safari 可以加载您在
/etc/hosts
中屏蔽的一些网站,因为它会从这些新的HTTPS
记录中获取这些网站的 IP 地址 - 它只能对某些网站执行此操作,因为大多数域名运营商尚未设置此功能。看起来 Cloudflare 已经为他们平台上的每个人都做了这件事;幸运的是,包括广告/跟踪/恶意软件巨头在内的大多数域名运营商尚未意识到这一点。
目前,您可以继续将 /etc/hosts
用于您完全控制的域名。
与此同时,对于其他域,您有一些选择:
- 您可以在家庭网络上运行本地 DNS 服务器或防火墙,blocks these requests
- 你可以在你的 mac 上配置一个本地 DNS 解析器守护进程,并用它来 阻止这些请求
- 您可以切换到 Linux 发行版,其中默认使用可配置的本地解析器守护程序
- 您可以停止使用 Safari,但其他使用默认 macOS 网络堆栈的应用可能会继续默默地绕过
/etc/hosts
Chrome 对此进行了一些试验,但 does not appear to have implemented it yet。 Firefox 已开始实施它but doesn’t seem to have gotten too far.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。