【问题标题】:Why does /etc/hosts not work anymore for some websites on Big Sur? [closed]为什么 /etc/hosts 不再适用于 Big Sur 上的某些网站? [关闭]
【发布时间】:2021-01-30 19:42:18
【问题描述】:

多年来,我一直使用/etc/hosts 来调整 IP 地址。有时它是用于原型设计,或为开发目的添加尚未准备好进入公共 DNS 的地址。有时我会阻止某些我不想访问的域,方法是将它们重定向到不正确的 IP 地址。有些是侵入性跟踪网站,例如connect.facebook.net。为了防止拖延,我一直屏蔽其他一些网站,例如 politico.com 这样的新闻网站,否则我可能会在我打算工作的时候花一整天的时间阅读。

但现在在 macOS 11 Big Sur 上,我注意到一些 /etc/hosts 条目被 Safari 忽略了。使用gethostbyname() 的 DNS 查找正确显示了阻止/覆盖地址,但 Safari 仍然显示公共站点。

到底发生了什么? /etc/hosts 有什么变化,我可以在开发工作时继续使用它来覆盖 DNS 条目吗?

【问题讨论】:

    标签: macos dns privacy hosts hosts-file


    【解决方案1】:

    macOS 11 增加了对正式名称为 “Service binding and parameter specification via the DNS (DNS SVCB and HTTPSSV)” 的支持。

    现在,当您访问网站时,不仅会查询典型的 DNS A host-to-ip-address 记录,还会检查全新的 HTTPS DNS 记录。这不仅仅是一个名称条目;这是一种全新的记录类型 (#65),与更熟悉的 ACNAMEMX 一起使用。

    这些新的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
      

    原来是这样的:

    1. Big Sur 上的 Safari 可以加载您在 /etc/hosts 中阻止的一些网站,因为它会从这些新的 HTTPS 记录中获取它们的 IP 地址
    2. 它只能对某些网站这样做,因为大多数域名运营商还没有设置它。看起来 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.

    【讨论】:

    • 非常有趣的东西!感谢发帖。
    • 谢谢,这就是我正在寻找的解释。仅供参考,现在lvh.me 不起作用,请查看nip.io ... 可以执行customer1.app.10.0.0.1.nip.io maps to 10.0.0.1 之类的操作
    • 为我添加 www.website.com。到主机解决了这个问题
    • 谢谢!我快疯了;是否有任何关于阻止此行为的有效方法的更新(特别是对于 MacOS 12)?
    • 使用免费的开源应用 Lulu 2.0 作为简单的 GUI 网络过滤器,支持 Big Sur 和 Monterrey。
    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多