为什么在Big Sur上,一些网站无法使用/etc/hosts文件了?

13
多年来,我一直使用/etc/hosts来调整IP地址。有时是为了原型设计,或者添加一个开发中还没有准备好进入公共DNS的地址。有时我会通过将它们重定向到错误的IP地址来阻止一些我不想访问的域名,比如侵入式跟踪网站,例如connect.facebook.net。另外,我还将一些新闻网站(例如politico.com)阻止作为克制拖延的措施,否则我可能会在本应该工作的时间里花费整天阅读它们。
但是现在在macOS 11 Big Sur中,我注意到Safari忽略了一些/etc/hosts条目。通过gethostbyname()进行的DNS查询正确显示了阻止/覆盖地址,但是Safari仍然显示公共网站。
究竟发生了什么?/etc/hosts发生了什么变化,我能否在进行开发工作时继续使用它来覆盖DNS条目?
1个回答

32

macOS 11增加了对“通过DNS进行服务绑定和参数规范化(DNS SVCB和HTTPSSV)”的官方支持。

现在,当您访问网站时,不仅会查询典型的DNS A主机到IP地址记录,还会检查全新的HTTPS DNS记录。这不仅是一个名称条目;它是一种全新的记录类型(#65),与更熟悉的ACNAMEMX相配合。

这些新的HTTPS DNS记录可以指示该站点支持HTTPS,包括协议版本和IP地址。这样,输入裸域名就可以立即得到https://版本的站点,甚至可能是在HTTP/2或HTTP/3上,跳过了老式的HTTP重定向。甚至有一个draft option供域操作员使用,告诉您的计算机绕过任何本地DNS设置,并为涉及其域的所有未来DNS查询使用特定服务器。

这里有很多性能意图,也有一些隐私意图。

但是,在规范和实现中存在致命的隐私和安全缺陷:它删除了用户覆盖/etc/hosts中的域名查找的能力,即使面对积极恶意的域名操作员也是如此

要查看这是如何实现的:

  • The version of dig that comes with macOS doesn’t directly support these new records, but you can see whether they exist with

    $ 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
  • I don’t know how to parse that, but wireshark does if I packet-capture it

    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服务器或防火墙,阻止这些请求
  • 您可以在Mac上配置本地DNS解析器守护程序,并使用它来阻止这些请求
  • 您可以切换到Linux发行版,在那里可配置的本地解析器守护程序是默认的
  • 您可以停止使用Safari,尽管使用默认macOS网络堆栈的其他应用程序可能会继续悄悄地绕过/etc/hosts

Chrome已经进行了一些试验,但似乎尚未实施。Firefox已经开始实施它但似乎没有取得太大进展。


2
非常有趣的东西!谢谢发布。 - Synchro
谢谢,这正是我在寻找的解释。顺便说一下,现在lvh.me已经无法使用了,请查看https://nip.io/...可以做一些像`customer1.app.10.0.0.1.nip.io maps to 10.0.0.1`这样的事情。 - subelsky
对我来说,在hosts文件中添加www.website.com解决了这个问题。 - Igor
谢谢!我快疯了,有关于有效阻止这种行为的更新吗(尤其是针对MacOS 12)? - Helpful
2
使用免费且开源的应用程序Lulu 2.0作为具有Big Sur和Monterrey支持的简单GUI网络过滤器。 - Semicolon
@Semicolon link? - user5306470

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接