火狐DoH教程:内网域名安全解析与分流例外
摘要
火狐启用DoH后所有域名查询强制经公共DNS解析,导致内网域名失败。需在about:config中设置net
遇到内网域名解析失败,问题很可能出在火狐浏览器的 DoH 机制上。它会绕过系统 hosts 和本地 DNS 服务器,将所有 DNS 查询强制转发到公共 DoH 服务器,导致内网域名无法被正确解析。解决方法并不复杂:手动配置 network.trr.excluded-domains 参数,为火狐指定哪些域名不走 DoH 通道。

火狐浏览器默认启用 DoH 后,所有 DNS 查询都会改走 HTTPS 加密通道,包括那些本应直连内网的域名,例如 gitlab.internal、printer.lan,甚至 192.168.1.100 这类 IP 地址。结果就是解析失败、页面无法加载。DoH 不具备自动识别内网域名的能力,也不会智能回退到本地 DNS,只能由用户手动划定例外列表。
为什么内网域名会解析失败
DoH 本质上是应用层的 DNS 解析机制,完全不理会系统 hosts 和本地 DNS 配置。只要 network.trr.mode 设为 2 强制使用 DoH,火狐就不会读取 /etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows),也不会发送 UDP 53 请求到路由器或企业 DNS 服务器。所有查询请求全部发往你指定的 network.trr.uri 地址。阿里 DNS、腾讯 DNS、Cloudflare 等公共 DoH 服务根本不可能解析你内网中的私有域名。
典型表现包括:
- 在浏览器输入
http://intranet.company,提示“无法找到服务器”,但改用 curl 或其他浏览器却能正常访问。 - 打开
about:networking#dns,内网域名的查询记录中 Protocol 列显示为 HTTPS,状态却是 failed 或 timeout。 - 核心问题:DoH 本身不具备智能分流能力,防火墙规则或 hosts 文件对它均无效。
配置 network.trr.excluded-domains 强制直连
要让内网域名跳过 DoH,这是目前唯一可靠的方案。核心思路是告诉火狐:这些域名请直接走系统默认 DNS(即路由器或企业 DNS),不要经过 TRR。可惜这个配置在图形界面里找不到,只能手动前往 about:config 设置。
- 在地址栏输入
about:config,确认风险提示后,搜索network.trr.excluded-domains。 - 若该项不存在,则手动创建:右键选择“新建”→“字符串”,名称填入
network.trr.excluded-domains,然后输入需要放行的域名列表。 - 值的格式要求严格:必须用逗号分隔纯域名,不能带
https://,不能带路径,末尾不能加点。例如:intranet.company,gitlab.internal,printer.lan。 - 支持子域名匹配。比如填入
internal,则dev.internal和prod.internal都会被涵盖。但不支持通配符*或正则表达式。 - 配置完成后无需重启浏览器,新建标签页即可生效。已打开的页面需刷新或重新打开。
验证是否生效
光填了设置还不够,必须确认流量实际走的路径。
- 打开
about:networking#dns,在“Recent Queries”表格中找到刚才访问的内网域名,检查“Protocol”列。若显示UDP或TCP,说明已成功绕过 DoH。 - 对比 TRR Status 行:如果状态为
active,但某次查询的 Protocol 变为 UDP,说明excluded-domains已生效。 - 若不放心,可在终端执行
nslookup intranet.company 127.0.0.1(假设系统 DNS 为本地 DNS),确认能否解析出该内网域名。 - 特别注意:格式错误是大忌。如果误加了
https://或.company.这样的后缀,该配置会被直接忽略,行为不会有任何改变。
补充:hosts 文件和 network.trr.mode = 5 的误区
很多人遇到此问题首先想到修改 hosts 文件或调整 network.trr.mode 参数。但在当前 Firefox(114+)版本中,这些老方法基本失效。
/etc/hosts对 DoH 查询完全不可见——除非将network.trr.mode改回 0 彻底禁用 TRR,否则火狐不会读取它。network.trr.mode = 5号称“仅对非 HTTPS 页面降级”,但它是旧版本遗留的选项,2026 年的主流版本早已弃用,设置了也无效。- 企业若想通过策略文件
policies.json批量部署,也不行——该配置项不支持excluded-domains。因此企业环境仍需用户手动到about:config中补充。 - 最容易踩坑的一点:
network.trr.excluded-domains的数据类型必须是字符串,而非布尔值或整数。一旦填错类型,整个配置会静默丢弃,毫无效果。
来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。