Macos 为什么/etc/hosts不再适用于Big Sur上的一些网站?

Macos 为什么/etc/hosts不再适用于Big Sur上的一些网站?,macos,dns,privacy,hosts,hosts-file,Macos,Dns,Privacy,Hosts,Hosts File,多年来,我一直使用/etc/hosts来调整IP地址。有时是为了原型设计,或者为了开发目的添加一个地址,而这个地址还没有准备好进入公共DNS。有时我会通过将某些我不想访问的域重定向到错误的IP地址来阻止它们。有些是侵入性跟踪网站,例如,connect.facebook.net。还有一些我一直被封锁,作为一种反拖延措施,例如politico.com等新闻网站,我本来打算工作的时候可能会整天阅读这些网站 但现在在macOS 11 Big Sur上,我注意到Safari忽略了一些/etc/hosts条

多年来,我一直使用
/etc/hosts
来调整IP地址。有时是为了原型设计,或者为了开发目的添加一个地址,而这个地址还没有准备好进入公共DNS。有时我会通过将某些我不想访问的域重定向到错误的IP地址来阻止它们。有些是侵入性跟踪网站,例如,
connect.facebook.net
。还有一些我一直被封锁,作为一种反拖延措施,例如
politico.com
等新闻网站,我本来打算工作的时候可能会整天阅读这些网站

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


到底发生了什么事?使用
/etc/hosts
更改了什么?在进行开发工作时,我是否可以继续使用它覆盖DNS条目?

macOS 11添加了对官方名称的支持

现在,当你访问一个网站时,它不仅仅是一个典型的DNS
a
主机到ip地址记录,而且还会检查一个全新的
HTTPS
DNS记录。它不仅仅是一个名字条目;这是一种全新的记录类型(),与更熟悉的
a
CNAME
MX
一起使用

这些新的
HTTPS
DNS记录可以表明站点支持HTTPS,包括协议版本和IP地址。这样一来,输入一个裸域名就可以立即提供站点的
https://
版本,甚至可以在HTTP/2或HTTP/3上,跳过老式的HTTP重定向。域名运营商甚至可以通知您的计算机绕过任何本地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
    
    域名系统(响应)
    询问
    www.politico.com.cdn.cloudflare.net:键入HTTPS,在
    答案
    www.politico.com.cdn.cloudflare.net:键入HTTPS,在
    名称:www.politico.com.cdn.cloudflare.net
    类型:HTTPS(特定于HTTPS的服务端点)(65)
    类别:IN(0x0001)
    生存时间:300(5分钟)
    数据长度:58
    优先权:1
    TargetName:
    SvcParams
    SvcParam:ALPN
    SvcParamKey:ALPN(1)
    SVC参数值长度:3
    阿尔卑斯山长度:2
    ALPN:h2
    SvcParam:IPv4提示
    SvcParamKey:IPv4提示(4)
    SVC参数值长度:8
    IP:104.18.16.202
    IP:104.18.17.202
    SvcParam:IPv6提示
    SvcParamKey:IPv6提示(6)
    SvcParamValue长度:32
    IP:2606:4700::6812:10ca
    IP:2606:4700::6812:11ca
    
这就是正在发生的事情:

  • Big Sur上的Safari可以加载您在
    /etc/hosts
    中阻止的一些网站,因为它从这些新的
    HTTPS
    记录中获取它们的IP地址
  • 它只能对一些网站这样做,因为大多数域名运营商还没有设置。看起来Cloudflare已经为他们平台上的每个人做到了这一点;幸运的是,包括广告/追踪/恶意软件巨头在内的大多数域名运营商尚未意识到这一点
  • 现在,您可以继续对完全控制的域名使用
    /etc/hosts

    同时,对于其他域,您有一些选择:

    • 您可以在您的家庭网络上运行本地DNS服务器或防火墙
    • 您可以在mac上配置本地DNS解析器守护程序,并使用它来 阻止这些请求
    • 您可以切换到Linux发行版,其中默认为可配置的本地解析器守护进程
    • 您可以停止使用Safari,尽管其他使用默认macOS网络堆栈的应用程序可能会继续悄悄绕过
      /etc/hosts

    Chrome已经为此进行了一些试验,但是没有成功。Firefox已经开始实现它了

    非常有趣的东西!谢谢你的发帖。谢谢,这就是我想要的解释。仅供参考,既然lvh.me不起作用,请检查。。。可以执行类似于
    customer1.app.10.0.0.1.nip.io映射到10.0.0.1的操作