この Topic では、Electron で DNS over HTTPS (DoH) を使用する方法について説明します。
1. はじめに
Electron は、Chromium と Node.js に基づくクロスプラットフォームのアプリケーション開発フレームワークです。開発者は JavaScript、HTML、CSS を使用してデスクトップアプリケーションを構築できます。
デフォルトでは、Electron はシステムのローカル DNS (Domain Name System) を使用してドメイン名を解決します。ハイジャック、不正確なスケジューリング、名前解決の遅延が大きいなど、ローカル DNS の問題により、アプリ内ネットワークリクエストが失敗したり、誤ったサービスノードに誘導されたりする可能性があります。DoH を使用して、Electron でのこれらの DNS 名前解決の問題に対処できます。
2. 前提条件
Electron に DoH を統合する前に、DoH サービスが設定されていることを確認してください。
3. 統合方法
Electron の公式サイトでは、DoH 統合のための標準的なソリューションが提供されています。アプリケーションの初期化後、<a href="https://electron.js.cn/docs/latest/api/app#appconfigurehostresolver" id="371a25d48alty">app.configureHostResolver</a> を使用して DoH を統合し、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 ネットワークスタックを使用できます。このインターフェイスを介して設定された DoH サービスは、Chromium ネットワークスタックを使用するリクエストに対してのみ有効です。これらのリクエストには、以下が含まれます。
レンダリングプロセス (Web ページ): fetch、XMLHttpRequest、およびページ上のリソースの読み込み。
メインプロセス: Electron の組み込み net モジュール、BrowserWindow.loadURL() などの使用。
プリロードスクリプト: fetch や XMLHttpRequest などのブラウザ API の使用。
Chromium カーネルは、組み込みのプローブドメイン名 www.gstatic.com を使用して DoH の可用性を確認します。プローブが完了するまで、DoH サービスの可用性は不確定と見なされます。DoH サービスが期待どおりに機能することを確認するには、www.gstatic.com ドメイン名が名前解決リストに追加されているか、すべてのドメイン名の名前解決が許可されていることを確認してください。
DoH の可用性が不確定な場合、
secureDnsModeに選択されたモードによって動作が異なります。automaticモード: DoH の可用性が不確定であるか、サービスが利用できない場合、Chromium は自動的にローカル DNS にフォールバックします。プローブが成功すると、自動的に DoH に切り替わります。secureモード: このモードでは、DoH の使用が強制され、DoH プローブの結果を待ちます。アクティブな DoH エンドポイントが利用できない場合、ローカル DNS にはフォールバックしません。まれに DoH サービスが利用できなくなった場合にアプリケーションが利用できなくなるのを防ぐため、セキュアモードのバックアップとして、無料のパブリック DoH サービスなどの他の DoH サービスを追加してください。
4. デモ
結果

デモコード
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 configured successfully: Automatic failover enabled'); } catch (error) { console.error('❌ DoH configuration failed:', 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. まとめ
この Topic の手順に従うことで、DoH 機能を Electron フレームワークに統合できます。これにより、アプリケーションのセキュリティとユーザーのプライバシーが大幅に向上します。DoH を設定した後、統合を検証できます。これを行うには、ローカルデバイスのネットワークの DNS サーバを無効なアドレスに設定します。その後、ネットワークリクエストがまだ開始できるかどうかを確認します。開始できる場合、DoH の統合は成功です。