火狐启用doh后内网域名解析失败,因其绕过系统hosts和本地dns,所有查询强制走https;唯一可靠解法是配置network.trr.excluded-domains字符串值,填入逗号分隔的纯域名(如intranet.company,gitlab.internal),使匹配域名回退系统dns。

火狐浏览器默认启用 DoH 后,所有 DNS 查询都会走 HTTPS 加密通道,包括本应直连内网的域名(如 gitlab.internal、printer.lan、192.168.1.100),这会导致解析失败或访问异常。它不支持自动识别内网域名并回退到本地 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,而公共 DoH 服务(如阿里、腾讯、Cloudflare)根本无法解析私有域名。
- 现象:访问
http://intranet.company显示“无法找到服务器”,但用 curl 或其他浏览器能通 - 现象:
about:networking#dns中看到该域名查询 Protocol 列是 HTTPS,但状态为 failed 或 timeout - 关键点:DoH 本身无“智能分流”能力,firewall 或 hosts 规则对它无效
配置 network.trr.excluded-domains 强制直连
这是唯一可靠的内网域名例外方案:告诉火狐哪些域名**跳过 TRR(Trusted Recursive Resolver)**,改用系统默认 DNS(即你的路由器或企业 DNS)解析。该配置仅在 about:config 中生效,图形界面无对应开关。
- 在地址栏输入
about:config,确认风险后进入 - 搜索
network.trr.excluded-domains;若不存在,右键 → 新建 → 字符串,名称填这个,值填你要放行的域名列表 - 值格式为逗号分隔的纯域名,**不带协议、不带路径、不加点结尾**,例如:
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是字符串类型,不是布尔或整数,填错类型会导致整个配置被静默丢弃











