ず~みんの頭の中🐣

shogozminのブログ.

Cloudflare DNSによるDNS over HTTPSをWindows環境で動かす

概要

1.1.1.1で有名なCloudflare DNSによるDNS over HTTPS (DoH)をWindows環境で動作させる方法を備忘録として残しておきます.

後述するcloudflaredというプログラムがDNSプロキシの役割をし,localhostDNS問い合わせを行うとcloudflaredが1.1.1.1にDoT経由で問い合わせをしてくれるというものです.

概念図としては以下のようになります.

Windows↔[通常DNS]↔cloudflared (localhost)↔[DoT]↔1.1.1.1

ネットワークアダプタの設定からDNSに1.1.1.1を設定するだけではDoHとはならないためご注意ください.

この場合は概念図としては以下のようになります.

Windows↔[通常DNS]↔1.1.1.1

所要時間は30分程度です.管理者権限が必要です.

⚠問題点⚠

フリーWi-Fiスポットにあるログイン画面に遷移できないことがあります.
フリーWi-Fiスポットを使う機会がある場合は導入しないでください.

環境構築

1. Cloudflaredをダウンロードする

developers.cloudflare.com

上記のリンクに飛んで,Windows版をダウンロードしてきます.

f:id:shogozmin:20201107005329p:plain

Windows版をダウンロード

cloudflared-stable-windows-amd64.zip (64bit版)またはcloudflared-stable-windows-386.zip (32bit版)がダウンロードされると思うので,それをCドライブ直下などわかりやすい所に解凍してください.(フォルダ名も短くcloudflaredなどとしておくと後々楽かも)

f:id:shogozmin:20201107010120p:plain

ダウンロードしてきたZIPファイルをCドライブ直下などに解凍

以下,Cドライブ直下にcloudflaredという名前のフォルダにさきほどのZIPファイルを解凍したという状況で進めていきます.
解凍先やフォルダ名が違う場合は各自で読み替えてください.

f:id:shogozmin:20201107010630p:plain

Cドライブ直下に解凍してできたcloudflaredフォルダ内

2. cloudflared.exeの動作確認・アップデート

ここまででC:cloudflared内にcloudflared.exeがあるような状態ができたと思います.
このexeは最新版でない場合があるのでアップデートします.

その後実際にDoTが動作するかどうか確認をします.

2.1. コマンドプロンプトでcloudflared.exeを起動

コマンドプロンプトを開き,以下のコマンドを順に実行していきます.

2.2. カレントディレクトリを解凍先に移動
cd C:/cloudflared
2.3. バージョン確認する(しなくてもOK)
cloudflared --version
2.4. アップデートを実行
cloudflared update
2.5. cloudflared.exeのDNSプロキシを動作開始
cloudflared proxy-dns

ここまで実行すると以下の画像のようになっているはずです.

f:id:shogozmin:20201107062103p:plain

コマンドプロンプトの画面
2.6. nslookupでDNSの問い合わせを行う(動作確認)

別窓でコマンドプロンプトを開き,以下のコマンドを入力してみてください.

nslookup (任意のアドレス) 127.0.0.1

(任意のアドレス)にはgoogle.comなど適当なアドレスを代入してください.

画像のようにIPアドレスが出てくれば動作しています.IPアドレスを見つけられない場合,PCが1.1.1.1相手に接続できるかどうかを確認してください.

f:id:shogozmin:20201107062131p:plain

nslookupの動作例

動作確認ができたらcloudflaredが動いている方のコマンドプロンプトに戻って"Ctrl"+"C"で終了させてください.

3. cloudflared.exeをサービスとして登録する

いちいちコマンドプロンプトを立ち上げて起動するのは面倒なのでこのプログラムをサービスとして登録します.これにより勝手にDNSプロキシが起動し何もすることなくDoTが使用できるようになります.

3.1. メモ帳でconfig.ymlを作成,保存する

サービスとしてcloudflared.exeを動かすにはconfig.ymlと呼ばれる設定ファイルが必要です.メモ帳を開いて以下の内容でconfig.txtを作りcloudflared.exeと同じ場所(筆者の場合C:/cloudflared/)に置きます.その後拡張子を.txtから.ymlに変更します.

メモ帳に以下の内容を貼り付け,cloudflared.exeと同じ場所にconfig.txtと名前をつけて保存します.

proxy-dns: true
proxy-dns-address: "127.0.0.1"
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query

proxy-dns-upstream内のアドレスはcloudflared.exeがDNSプロキシとして名前問い合わせをする宛先になっています.

作成したconfig.txtを右クリックし"名前の変更"からconfig.ymlと変更すれば完成です.

また,このconfig.ymlですがたまに何故かファイル内が書き換わることがあるので読み取り専用としておいたほうが安全です.

エクスプローラーでconfig.ymlを選択,右クリックから"プロパティ"を開き,属性を読み取り専用とします.

f:id:shogozmin:20201107053648p:plain

"読み取り専用"にチェックを入れる
3.2. サービス登録する (管理者権限が必要です)

管理者権限でコマンドプロンプトを開き,以下のコマンドを実行します.

sc create (任意のサービス名) binPath= "C:/cloudflared/cloudflared.exe --config C:/cloudflared/config.yml"

これでサービスが作成されました.つぎにこのサービスを起動します.

sc start (任意のサービス名)

以下の画像の様になるはずです.

画像内ではサービス名が"11111"となっていますがわかりやすく"cloudflared"としておくのが良いと思います.

コマンド内のスペースが抜けているだけでエラーが出るので上手く行かない場合はスペースの有無を確認してみてください.

f:id:shogozmin:20201107024505p:plain

サービスとして登録する

4. WindowsDNS設定を変更する

Windowsのネットワーク設定でDNSアドレスを127.0.0.1に変更します.
分かる人は読み飛ばしてください.

スタートメニューの検索欄に"ネットワーク接続の表示"と入力し設定画面を開きます.これ以外にも進み方はありますのでお好きな方法でどうぞ.

Wi-Fiや有線,VPNなどいくつかネットワークアダプタが出てくると思います.その中からDoT経由させたいネットワークを選んで右クリックから"プロパティ"を開きます.

f:id:shogozmin:20201107025830p:plain

ネットワーク接続の表示

この中にある"インターネット プロトコル バージョン 4 (TCP/IPv4)"を開きます.

f:id:shogozmin:20201107030121p:plain

プロパティ画面

DNSサーバーのIPアドレスを自動取得から手動設定します.優先 DNSサーバーに127.0.0.1と入力します.代替アドレスは空欄で構いません.設定が終わったらOKで保存します.

f:id:shogozmin:20201107030258p:plain

インターネット プロトコル バージョン 4 (TCP/IPv4)

この設定を終わらせると,設定したネットワークアダプタDNS問い合わせ先がCloudflare DNSとなります.

5. サービスの動作確認

実際にサービスとしてcloudflared.exeのDNSプロキシが動作しているか確認していきます.ブラウザを使うときにCloudflare DNSが使用されているか確認してみましょう.

ブラウザを開き,以下のURLを開きます.

1.1.1.1

中段の"Debug Information"にある"Using DNS over HTTPS (DoH)"が"Yes"となっていれば成功です.

f:id:shogozmin:20201107031330p:plain

1.1.1.1/helpの画面

6. アップデートの自動化

cloudflared.exeは定期的にアップデートされるのでタスク スケジューラで自動的にアップデートするようにしてしまいましょう.

アップデートコマンドを実行するバッチファイルを作成し,それをタスクスケジューラで定期的に実行させます.

6.1. バッチファイルの作成

メモ帳を開き以下のコマンドを貼り付け,バッチファイルを作成します.

@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof
cd C:/cloudflared
cloudflared update

わかりやすく"cloudflared_update.txt"といった名前で.txtファイルを作成します.
そのあと3.1.同様拡張子を.batとすれば完成です.

わかりやすくするため保存先はcloudflared.exeと同じ場所にしておくのがいいと思います.

これをダブルクリックすると一瞬コマンドプロンプトが出てすぐ消えますが,裏でアップデートが実行されます.

6.2. タスク スケジューラに登録

6.1. で作成したバッチファイルをタスクスケジューラで定期的に実行するようにします.

スタートメニューの検索欄に"タスク スケジューラ"と入力しタスク スケジューラを起動します.

左側ペインにある"タスク スケジューラ ライブラリ"を選択した後,右側ペインの"新しいフォルダー..."からフォルダーを作成します.わかりやすいように"自作"などとしておくのがいいと思います(自作したタスクを管理しやすいようにするため).

f:id:shogozmin:20201107032930p:plain

タスク スケジューラ

作成した"自作"フォルダを選択し,右側ペインの"タスクの作成..."から新規タスクを作成します.

タスクスケジューラの設定例として各タブの画像を載せておきます.

全般タブでは画像にあるように設定してあります."最上位の特権で実行する"にチェックを入れると管理者のパスワードが求められます.名前はわかりやすく"cloudflared_update"としてあります.

f:id:shogozmin:20201107033903p:plain

タスクの作成(全般)

"トリガー"タブは以下の画像のとおりです.バッチファイルの実行タイミングを設定できます."新規"ボタンを押して新しいトリガーを設定できます.毎週月曜としてありますが,頻繁にアップデートされるものでもないので月ごとでも構いません.

f:id:shogozmin:20201107034251p:plain

タスクの作成(トリガー)

"操作"タブは以下の画像のとおりです."新規"ボタンを押して新しい操作を設定できます.操作は"プログラムの開始"とし,先程作成したバッチファイルを開始するように設定します.

f:id:shogozmin:20201107034556p:plain

タスクの作成(操作)

"操作"タブは以下の画像のとおりです.お好みでどうぞ.

f:id:shogozmin:20201107034825p:plain

タスクの作成(条件)

"設定"タブは以下の画像のとおりです.ここもお好みで.

f:id:shogozmin:20201107034818p:plain

タスクの作成(設定)

以上の設定を行いタスクを作成したらすべての工程ができあがりです.

PCを再起動してもCloudflared DNSが導入された状態のままです.あとはいつもどうりインターネットを使用することができます.

おまけ

IPv6アクセスでもCloudflared DNSを使用する方法をおまけとして残しておきます.

環境構築の4章でIPv4についてのみ設定変更しましたが,IPv6DNS設定も変更することで実現できます.

IPv4とは別にIPv6用にcloudflared.exeのサービスを作り,IPv6DNS設定で::1を指定します.

1. IPv6用のconfig.ymlを作成

環境構築の3.1. を参考に,"config.yml"ではなく"config_ipv6.yml"(わかりやすいように)として以下の内容を保存します.

proxy-dns: true
proxy-dns-address: "::1"
proxy-dns-upstream:
- https://[2606:4700:4700::1111]/dns-query
- https://[2606:4700:4700::1001]/dns-query
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query

Cloudflare DNSIPv6用アドレスも追記してあります(上2つ,2606と書いてある行).

"proxy-dns-address"が::1となっているのがIPv4のコンフィグと異なる部分です.これによりIPv6用のDNSプロキシを作成できます.

最後にファイルの属性を読み取り専用にしておきましょう.

2. サービスの作成

環境構築の3.2.を参考に,IPv6用のDNSプロキシのためのサービスを作成します.動かすバイナリはIPv4と同じく"cloudflared.exe"ですが起動オプションで使用するコンフィグファイルをIPv6用のものにします.サービス名はIPv4と異なるものにします.筆者は"cloudflared_ipv6"というサービス名にしています.

sc create (任意のサービス名) binPath= "C:/cloudflared/cloudflared.exe --config C:/cloudflared/config_ipv6.yml"

サービスを登録したら起動します.

sc start (任意のサービス名)

3. WindowsDNS設定を変更する

サービスが作成できたらWindowsのネットワーク設定を変更します.環境構築の4. を参考にして"インターネット プロトコル バージョン 6 (TCP/IPv6)"の優先DNSサーバーを::1に変更します.

f:id:shogozmin:20201107040550p:plain

インターネット プロトコル バージョン 6 (TCP/IPv6) の設定

これでIPv6アクセスでもCloudflared DNSを使えるようになります.

さいごに

DNS over HTTPS (DoH)をWindows環境で動作させる方法を示しました.筆者は知識がなかったため導入までに1週間くらい格闘しました.悲しい….

ブログとしてもこの記事で3本目でまだまだ説明が下手なところもありますが温かい目で見てくれると助かります.

 

⚠もし不安定になったらWindowsDNS設定をもとに戻して下さい⚠