先日「HTML5 5th Anniversary」というイベントで「Web に関わる人に知っておいてほしい) Web ブラウザー 最新事情」(リンク先 SlideShare) というセッションを行いました。
このセッションで紹介した Android 9 (Pie) 以降で DoT (DNS over TLS) を利用する方法について解説します。
DoT とは
DoT (DNS over TLS) とは何か、簡単に説明しておきましょう。従来の DNS の通信は通信自体の暗号化、サーバー検証、エンティティ検証といったセキュアな通信が一切行われておらず、DNS スプーフィングや中間者攻撃に対して脆弱です。また DNS クエリの内容がネットワーク経路上で簡単に傍受できるプライバシー上の問題もありました。こうした問題を改善し DNS をセキュアなものにする技術がいくつか提唱され実用化されています。DoT はその中で、DNS クライアント(スタブ リゾルバ)と DNS キャッシュ サーバー(フルサービス リゾルバ)の間の通信を TLS で保護するものです。
DNS の安全性
携帯電話キャリアの DNS であればクライアントと DNS サーバーの間の通信はキャリアの WLAN 網内で完結するので、基本的に DNS トラフィック自体を暗号化などで保護しなくとも安全と考えられます。また固定回線で ISP 経由でインターネット接続する場合も、日本国内であれば宅内装置と ISP の間は電話会社の回線を PPPoE で通過するので、同様に ISP の DNS サーバーまでのトラフィックを暗号化などで保護しなくとも安全と考えられます。
ただし DNS 問い合わせの内容はキャリア側で収集可能なので、プライバシーの問題は考慮しなければならないでしょう。一時期話題になった「海賊版コンテンツのブロッキング」もキャリアや ISP の DNS でブロックを行う手法が検討されていました。
DNS の安全性が問題になるのは、こうしたクライアントと DNS サーバーの間の経路が信頼できない場合です。具体的には公衆無線 LAN などのパブリックなネットワークを経由してインターネット接続する場合です。こうしたネットワークでは DNS の盗聴や中間者攻撃による DNS スプーフィングが可能な場合がありますし、そもそもそのネットワークが提供している DNS サーバー自体が安全に構成されていて信頼/信用できるのかどうか分からない場合もあるでしょう。DoT(やクライアント・DNS サーバー間を暗号化する別の方法である DoH – DNS over HTTPS)はこうしたネットワークを利用する場合に効果を発揮します。
DoT を利用する
Android 9 (Pie) 以降の Android OS ではシステム DNS に DoT が実装されています。そのため [設定] でネットワークに DoT を構成すれば、基本的にすべてのネットワーク通信の DNS 問い合わせをセキュアにできます。本年後半以降、各携帯電話キャリアから発売された Android スマートフォンはほぼ Android 9 を搭載しているので、最近 Android スマートフォンを買った / 機種変更した人であれば、すぐに DoT を試してみることができます。
Android 9 以降でDoT を利用するには [設定] – [ネットワークとインターネット] を開き、[詳細設定] をタップして開きます。すると [プライベート DNS] という項目が見つかるでしょう。これが DoT の設定です。[プライベート DNS] をタップすると、以下のような画面が表示されます。
この各項目はそれぞれ次のような動作を示しています。
- OFF:DoT を利用しない
- 自動:DHCP などで現在構成されている DNS サーバーに DoT での接続を試し、DoT が使えなければ従来の DNS にフォールバックする
- プライベート DNS プロバイダのホスト名:指定した DNS サーバーに DoT で接続、失敗してもフォールバックしない
既定は「自動」ですが、現時点では携帯電話キャリアの DNS サーバーで DoT に対応しているところはありませんし、Wi-Fi アクセスポイントで DHCP で提供される DNS サーバーでも DoT に対応しているところはまずないので、「自動」のままでは DoT が利用されることは無いでしょう。
[プライベート DNS プロバイダのホスト名] を選択し、DNS のホスト名を入力します。注意が必要なのは、DoT は TLS で通信を保護するので、TLS の証明書検証のためにホスト名が必要になるという点です、通常の DNS は IP アドレスで指定しますが、ここではホスト名を指定します。
※ DoT 対応 DNS サーバーのホスト名は既存の DNS 構成を利用して(保護されていない)DNS で問い合わせ可能です。仮にここで不正なレコードが返って来たとしても、その不正な IP アドレスに対して(正しいホスト名での)TLS 接続はできませんので、安全は保たれるという仕組みです。またそのために DoT 接続に失敗した場合、フォールバックしない動作になっています。
利用可能な DoT 対応のパブリック DNS の一覧は
- DNS Privacy Public Resolvers
https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Public+Resolvers - DNS over HTTPS
https://github.com/curl/curl/wiki/DNS-over-HTTPS
などで公開されていますし、提供元の Web サイトなので設定方法が公開されています。
ここでは Cloudflare と Google、そして IIJ のパブリック DNS のホスト名を紹介しておきます。
- Cloudflare : 1dot1dot1dot1.cloudflare-dns.com
https://blog.cloudflare.com/enable-private-dns-with-1-1-1-1-on-android-9-pie/ - Google : dns.google
https://developers.google.com/speed/public-dns/docs/using#android - IIJ : public.dns.iij.jp
https://public.dns.iij.jp/
実際に Cloudflare のパブリック DNS (1dot1dot1dot1.cloudflare-dns.com) を設定して、Cloudflaer のテスト ページ(https://1.1.1.1/help)を表示すると、以下のように DoT が有効と表示されます。
※ Google のインストラクションに書かれているように、Android 9 ではこの [プライベート DNS] による DoT の設定は VPN では利用されません。この問題は Android 10 で修正されています。
コメントを残す