本文档介绍如何在electron中使用DoH
1. 前言
Electron 是一个基于 Chromium 和 Node.js 的跨平台应用开发框架,开发者可以使用 JavaScript / HTML / CSS 来构建桌面应用程序。
Electron 默认使用系统的 Local DNS 解析域名,Local DNS的劫持、调度不精准、解析延迟高等问题会导致应用内的网络请求会失败或被导向错误的服务节点,本文将介绍如何通过 DoH 解决Electron 的 DNS 解析问题。
2. 前提条件
通过 DoH 接入 Electron 前,请您确保已经完成配置DoH服务。
3. 接入方案
Electron 官网提供了标准的DoH接入方案,只需要在应用初始化后,通过app.configureHostResolver
配置 HTTPDNS 的 DoH 链接,就可以完成接入。
const { app } = require('electron')
app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'automatic',
secureDnsServers: [
// 您的 DoH 服务链接
'https://xxx.aliyunhttpdns.com/dns-query'
]
})
})
Electron 由 Node.js(主进程)与 Chromium(渲染进程/H5 界面)组成,通过当前接口配置的 DoH 服务只会在渲染进程中生效。
Chromium 内核会使用内置的探测域名 www.gstatic.com 对 DoH 可用性检查,在探测完成前,DoH 被视为“未确定可用”,为保证 DoH 服务正常工作,请确保 www.gstatic.com 域名添加到解析列表中或允许所有域名解析。
Chromium 内核在“未确定可用”时,此时
secureDnsMode
选择不同的模式会有不同的行为:automatic
模式:当 DoH 未确定可用或服务不可用时,Chromium 会自动降级到 Local DNS,探测通过后自动切换回 DoH。secure
模式:强制使用 DoH,等待DoH探测结果,若没有可用的 DoH 端点,不会降级到 Local DNS,为避免极端情况下,DoH服务不可用导致您的业务不可用,建议在 secure 模式下添加其他 DoH 兜底,比如免费 DoH 服务等。
4. 示例Demo
效果
demo代码
const { app, BrowserWindow } = require('electron'); app.whenReady().then(async () => { try { // 配置DNS over HTTPS - 支持自动故障转移 app.configureHostResolver({ secureDnsMode: 'automatic', // DoH失败时自动回退到本地DNS secureDnsServers: [ // 这里填入您的实际DOH链接 'https://xxxx.aliyunhttpdns.com/dns-query' ] }); console.log('✅ DoH配置成功:自动故障转移已启用'); } catch (error) { console.error('❌ DoH配置失败:', error); } // 创建窗口 const mainWindow = new BrowserWindow({ width: 1000, height: 700 }); mainWindow.loadURL('https://www.aliyun.com'); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } });
5. 总结
通过本文档介绍的步骤,您可以成功在 Electron 框架中集成DNS over HTTPS (DoH)功能,从而显著提升应用程序的安全性和用户隐私保护能力。配置后可通过将手机 WIFI 网络的 DNS 服务器设置为一个无效地址,观察业务请求是否依然能够正常发起,以此判断 DoH 是否接入成功。