在公司网络中给 Firefox 开启 DoH

2023-02-21 ⏳3.3分钟(1.3千字)

我曾专门写文章总结DNS隐私安全问题,其中最主要的问题是上网行为监控。理论上公司可以通过 DNS 记录你在上班期间的全部1网络行为。当前最好的应对策略就是开启 DNS over HTTPS (DoH)。但是公司网络中往往有很多内部系统,开启 DoH 后就无法正常访问。今天以 Firefox 为例分享一个比较完整的解决方案。

因为 DoH 使用 HTTPS 传输 DNS 查询数据,所以公司网络设备无法记录员工所访问网站的域名。而现在的 IP 地址基本上是多租户的,也就是说同一个 IP 地址基于 ALPN 协议对外提供多个 HTTPS 服务,所以可以有效防止在公司层面的网络行为监控2

但是,DoH 并没有根除网络监控行为。它只不过是把这个问题从公司网络转移到了 DoH 服务提供商,比如阿里云。理论上阿里云会掌握你的全部上网行为。但因为 DoH 不需要登录,所以它只能通过 IP 地址来分析。而公司网络一般是多人共用同一个或者少数 IP 地址,所以这个问题并不突出。

打开 Firefox 的设置页面,使用右上角的搜索功能,查找 DoH,就能找到对应的网络设置。点击设置 (Settings) 按钮打开设置面板。勾选最下面的 Enable DNS over HTTPS。 Firefox 默认使用 Cloudflare 的 DoH 服务。但 Cloudflare 在国内没有服务器,不但 DoH 服务会受到干扰,而且它解析出来的 IP 往往是海外的地址,这样会导致在国内访问比较慢。

国内有不少公共 DNS 服务商,但提供 DoH 的好像不多。我这边列出两家:

服务商 URL
阿里云 https://dns.alidns.com/dns-query
DNSPOD https://doh.pub/dns-query

如果你知道其他的服务商也欢迎留言👏

注意,以上对应的是免费版本,是真正的公共 DNS 服务。它们还提供所谓的个人专属 DoH 服务,域名里有用户标识:

https://xxx.alidns.com/dns-query
https://doh-xxx.doh.pub/dns-query

这里的 xxx 就是用户标识。国内哪里注册个帐号都得实名,所以一定不能用这种专属链接。不然你每天看的那些小电影🎬网站都会被记录下来😂

配置好之后可能需要重启浏览器。但 DoH 生效后立马面临另外一个问题,就是可能有部分公司内网的系统不能访问了。究其原因无外乎是公司在内网的 DNS 服务器添加了私有记录,或者同一个域名针对内网和外网返回不同的 IP 地址。如果开启 DoH,那所有的 DNS 解析都走公网,要么根本查不到对应的 DNS 记录,要么查到了错误的 DNS 记录,从而导致无法正常访问。

我之前一直不知道要如何解决这个问题。所以也就没办法开启 DoH。一个偶然的机会,我看到了 Firefox 的官方文档3,原来可以设置 DNS 黑名单,添加到名单的域名不走 DoH 解析。这样就完美解决了访问公司内网系统的问题。只是目前 Firefox 还不支持在配置界面添加这个黑名单,需要通过高级配置页面来设置🥲

在地址栏输入about:config并回车,浏览器会展示警告信息,点击Accept the Risk and Continue。然后搜索network.trr.excluded-domains,点击铅笔按钮开始修改。如果输出example.com,那么所有后续为example.com的域名都不会走 DoH 服务。最后点击对勾✅保存即可。

Firefox 114 版本开始支持通过配置中心指定 DNS 黑名单4,对用户更加友好👍


  1. 全部有点夸张,应该说是依赖 DNS 解析的网络行为。但直接使用 IP 的场景并不多见,所以也就没有太夸大其实。↩︎

  2. 其实单纯使用 DoH 并不能解决网络行为监控的问题。因为 TLS 系统还有一个巨大的问题——SNI。因为不同的域名可能共享同一个IP地址,所以客户端在发起 TLS 会话时需要通过所谓的 Server Name Inication (SNI) 指定当前会话的站点域名。这具 SNI 是明文发送的,公司网络设备同样可以记录!IETF 目前正在制定新的 TLS Encrypted Client Hello 规范,试图对 SNI 进行加密,但标准定稿和普及还需要很长的时间。在此之前,唯一能用的方案只有 VPN 😂↩︎

  3. https://support.mozilla.org/en-US/kb/firefox-dns-over-https↩︎

  4. https://bugzilla.mozilla.org/show_bug.cgi?id=1596847↩︎