macOS MojaveでDoH(DNS over HTTPS)

FirefoxでDNS-over-HTTPSを使ってみる。ではFirefoxでDoHを利用したけどまるっとDoHを利用する方法をCloud Flareで見つけたのでやってみる。 参考:Running a DNS over HTTPS Client
  1. DNS proxyインストール
  2. 設定ファイル作成/サービス実行
  3. macOS側のDNS設定変更

DNS proxy Install

Install

$ brew install cloudflare/cloudflare/cloudflared
==> Installing cloudflared from cloudflare/cloudflare
==> Downloading https://developers.cloudflare.com/argo-tunnel/dl/cloudflared-2018.12.1-darwin-amd64.tgz
(略)
🍺 /usr/local/Cellar/cloudflared/2018.12.1: 3 files, 29.7MB, built in 3 seconds

確認

Installされているか確認
$ cloudflared --version
cloudflared version 2018.12.1 (built 2018-12-11-2047 UTC)
proxyが動作しているか確認
$ sudo cloudflared proxy-dns
Password:
INFO[0000] Adding DNS upstream                           url="https://1.1.1.1/dns-query"
INFO[0000] Starting metrics server                       addr="127.0.0.1:53031"
INFO[0000] Adding DNS upstream                           url="https://1.0.0.1/dns-query"
INFO[0000] Starting DNS over HTTPS proxy server          addr="dns://localhost:53"
dnsがlocalhostの53で動いている 別のTerminalで確認してみる
$ dig @127.0.0.1 www.barasu.org AAAA

; <<>> DiG 9.10.6 <<>> @127.0.0.1 www.barasu.org AAAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17299
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;www.barasu.org. IN AAAA

;; ANSWER SECTION:
www.barasu.org. 60 IN CNAME d2sd2g0g8zuks.cloudfront.net.
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:7e00:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:8e00:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:cc00:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:f800:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:fe00:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:4800:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:5800:9:2b3:6300:93a1
d2sd2g0g8zuks.cloudfront.net. 60 IN AAAA 2600:9000:2097:7c00:9:2b3:6300:93a1

;; Query time: 105 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 31 09:22:14 JST 2018
;; MSG SIZE rcvd: 547

設定ファイル作成/サービスInstall

config.yml作成

$ mkdir -p /usr/local/etc/cloudflared
$ cat << EOF > /usr/local/etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
EOF

サービス Install

$ sudo cloudflared service install
Password:
INFO[0000] Installing Argo Tunnel client as a system launch daemon. Argo Tunnel client will run at boot
INFO[0000] Outputs are logged to /Library/Logs/com.cloudflare.cloudflared.err.log and /Library/Logs/com.cloudflare.cloudflared.out.log

macOS側設定変更

DNSのアドレスを127.0.0.1に変更します。 DNSを1つしか指定しないのは精神的に良くないなぁ〜^^;;
Terminalからの確認
$ dig www.barasu.org

; <<>> DiG 9.10.6 <<>> www.barasu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41161
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;www.barasu.org. IN A

;; ANSWER SECTION:
www.barasu.org. 60 IN CNAME d2sd2g0g8zuks.cloudfront.net.
d2sd2g0g8zuks.cloudfront.net. 60 IN A 52.222.194.87
d2sd2g0g8zuks.cloudfront.net. 60 IN A 52.222.194.108
d2sd2g0g8zuks.cloudfront.net. 60 IN A 52.222.194.172
d2sd2g0g8zuks.cloudfront.net. 60 IN A 52.222.194.31

;; Query time: 41 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 31 09:33:51 JST 2018
;; MSG SIZE rcvd: 275
SERVER: 127.0.0.1#53(127.0.0.1)ちゃんと127.0.0.1をむいている。
  • Service Installする
  • DNS設定変更してある
これで再起動してもDoHで1.1.1.1や1.0.0.1でアクセスされるぅ〜ISPのDNS障害に耐えられるような気がする・・・

まとめ

自宅のDNSサーバーってRouteが配るからDoH対応のRouteが待たれる どさにっき AI ~2018年5月下旬~を参考にしたらunboundでCloud Flareを利用したDNS over HTTPSが行えそうな気がする。DoHってAkamaiとかのCDNとの相性ってどうなんだろうか? DoHとCDNについては時間を見つけて調べてみたいなぁ〜