WindowsでDNS over HTTPS(DoH)を設定するのは、特にデフォルトではDNSトラフィックがプレーンテキストで送信されるため、第三者による傍受や改ざんの危険性が高まり、少々面倒です。プライバシーが心配な方や、「暗号化されていない」というレッテルを貼られたくない場合は、DoHを有効にするとDNSクエリが暗号化されたHTTPS接続でラップされるようになります。しかし、正直に言うと、特にWindows 11では、ようやくサポートが追加されたとはいえ、設定はそれほど簡単ではありません。そこで、私が実際に試した方法と、何かおかしな点があったり、期待通りに動作しない場合に試すべき方法を以下にまとめました。
Windows GUIからDNS over HTTPSを有効にする方法
設定メニューを使用して、ネットワークのDoHをオンにします
- [設定] -> [ネットワークとインターネット]に移動し、ネットワーク インターフェイス (イーサネットまたは Wi-Fi) を選択します。
- [プロパティ]をクリックします(接続名だけでなく、実際に詳細までクリックします)。
- DNS サーバーの割り当てセクションまで下にスクロールし、[編集]をクリックします。
- [DNS 編集]のドロップダウンで[手動]を選択し、必要に応じて IPv4 または IPv6 をオンにして、 Cloudflare の 1.1.1.1 および 1.0.0.1、または Google の 8.8.8.8 および 8.8.4.4などの DoH をサポートする DNS サーバー IP アドレスを入力します。
- さて、ここからが厄介なところです。Windows GUIでDoHを有効にする設定が分かりにくいのです。Windows Serverや一部のブラウザとは異なり、Windows 11のネットワークインターフェースには「暗号化DNSを有効にする」という明確な切り替えボタンがありません。
- ただし、Windows 11ではPowerShellコマンドを実行することで強制的にDoHを有効にすることができます(下記参照)。設定によっては、DNSサーバーがDoHをサポートしているとWindowsが認識した場合、DoHが有効になっているDNSサーバーが使用されますが、追加の調整を行わない限り、DoHが有効になるとは限りません。
注:Windowsで明示的にDoHを優先させたい場合は、レジストリ設定を調整するか、コマンドラインツールを使用する必要があるかもしれません。当然ながら、WindowsはDoHを必要以上に難しく設定する必要があるためです。
Windows 11ではPowerShell経由で設定します
DoHを実際に動作させるのに役立ったのは以下の点です。お好みのDoHサーバーをシステムに追加し、コマンドラインから使用を強制できます。一方で、一部のノートパソコンや設定では、これらのコマンドを管理者権限で実行し、その後再起動する必要があるという報告もあります。例えば、フィルタリング(ファミリーモード)用のURLでCloudflareのDoHサーバーを追加するには、次のようにします。
$DNSServer = "1.1.1.3" # or 1.0.0.3 for family DNS Add-DnsClientDohServerAddress -ServerAddress $DNSServer -DohTemplate "https://family.cloudflare-dns.com/dns-query" -AllowFallbackToUdp $False -AutoUpgrade $True
これにより、DoHサーバーが追加され、Windowsが暗号化されたクエリにDoHサーバーを使用するようになります。その後、インターフェース設定を更新して、このサーバーを優先するようにしてください。
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses $DNSServer
次に、レジストリの調整やグループポリシーを利用して、DoHの使用を明示的に強制します。レジストリの場合(これも管理者として実行):
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\Dnscache\Parameters" -Name "EnableAutoDoh" -Value 2 -PropertyType DWord -Force
このフラグ(値2)は、自動DoHサポートを有効にするはずです。一部のマシンでは、最初は失敗しますが、再起動後に動作するようになります。理由は不明ですが、試してみる価値はあります。
WindowsでDoHが動作していることを確認する方法
ネットワークトラフィックモニターで確認する
Windowsでは、DNSクエリが暗号化されているかどうかを確認するための組み込みpktmon.exeツールを使用できます。少し扱いにくいですが、問題なく動作します。まず、既存のフィルターをすべて削除してください。
pktmon filter remove
次に、ポート 53 (通常の DNS、UDP、または TCP) のフィルターを追加します。
pktmon filter add -p 53
リアルタイム監視を開始します:
pktmon start --etw -m real-time
すべてが正しく設定されていれば、ポート53のDNSトラフィックはほとんど、あるいは全く確認されないはずです。これは、すべてのDNSトラフィックがポート443経由でHTTPSで暗号化されて送信されていることを示しています。時折、分かりにくいエラーや遅延が発生するものの、私の環境では概ねDoHが機能していることを確認しました。
もう一つの方法は、セキュアDNSチェックを利用することです。DNSクエリが暗号化されているかどうか、DoHが有効になっているかどうかを確認できます。
もちろん、Chrome、Firefox、EdgeなどのブラウザにはDoHを有効にする独自の設定があり、ブラウザ固有のDNSにさらに暗号化レイヤーを追加します。しかし、これは全く別の問題です。
正直なところ、Windows では実装が曖昧なため、プロセス全体がかなり面倒です。それでも、うまく動作させることができれば、第三者がこっそりと DNS トラフィックを盗聴する心配は大幅に軽減されます。少なくとも、それが狙いです。
まとめ
- PowerShell コマンドを使用して、DoH サーバーを追加および適用します。
- DoH 互換 IP を使用するようにネットワーク アダプターの DNS 設定を変更します。
- pktmon.exe を使用してトラフィックをチェックし、DNS クエリが暗号化されているかどうかを確認します。
- いくつかの調整には再起動またはレジストリの編集が必要になる場合があります (注意してください)。
- ブラウザは DoH を個別に処理するため、必要に応じてブラウザでも DoH を有効にしてください。
まとめ
WindowsでDNS over HTTPSを動作させるのは直感的ではありませんが、コマンドラインの魔法を使えば可能です。すぐには動作しない場合もあるので、再起動するか、DNS設定をもう一度確認してみてください。設定が完了すれば、DNSクエリを傍受されるのがはるかに難しくなるので、安心です。この情報が、暗号化されたDNSをスムーズに動作させるのに役立つことを願っています。幸運を祈ります!