以前紹介した、Stubbyを使ったDNS over TLS(DoT)での名前解決環境の作り方的なメモ。書いておいて公開していなかったので。
※参考URLは忘れた。
※もしかしたら誤りとかあるかも。
前提
- systemd環境(Ubuntu 18.04)。
- NetworkManagerで接続を管理している。
- IPv4/v6デュアルスタック環境(v4のみであっても適用できるが)。
- dnsmasqはすでにインストールされているようなのでインストール手順は省略。
Stubbyのインストール
$ sudo apt install stubby
Stubbyの設定
Stubbyの設定ファイルを編集し、ポート53000でリッスン、問い合わせ先サーバーとしてCloudflare DNSを使うように設定する。また原則最上位のサーバーのみ使うように設定(エラー時は次のサーバーに切り替わる)。念の為Cloudflare DNS以外のサーバー(GoogleやQuad9など)も設定しておいたほうがいいかもしれない(ここでは省略する)。
$ sudo vi /etc/stubby/stubby.yml
$ echo /etc/stubby/stubby.yml
〜
listen_addresses:
- 127.0.0.1@53000
- 0::1@53000
〜
round_robin_upstreams: 0
〜
tls_connection_retries: 5
〜
tls_backoff_time: 300
〜
upstream_recursive_servers:
- address_data: 1.1.1.1
tls_auth_name: "cloudflare-dns.com"
- address_data: 1.0.0.1
tls_auth_name: "cloudflare-dns.com"
- address_data: 2606:4700:4700::1111
tls_auth_name: "cloudflare-dns.com"
- address_data: 2606:4700:4700::1001
tls_auth_name: "cloudflare-dns.com"
〜
$ sudo systemctl restart stubby
NetworkManager/dnsmasqの設定
NetworkManagerの設定ファイルをいじり、dnsmasqをNetworkManager経由で起動させるようにする。
その後、dnsmasqの設定ファイルを作り、Stubbyから引くようにする。cache-sizeも忘れずに(デフォルトが0なため)。
$ sudo vi /etc/NetworkManager/NetworkManager.conf
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
dns=dnsmasq
〜
$ sudo vi /etc/NetworkManager/dnsmasq.d/default.conf
$ cat /etc/NetworkManager/dnsmasq.d/default.conf
no-resolv
proxy-dnssec
server=127.0.0.1#53000
listen-address=127.0.0.1,::1
cache-size=2000
systemd-resolvedのDNSサーバーを止める
127.0.0.53で動作しているsystemd-resolvedのDNSサーバーを止める。
そしてsystemd-resolvedによって生成されたresolv.confのシンボリックリンクを削除する(NetworkManagerに生成させる)。
$ sudo vi /etc/systemd/resolved.conf
$ cat /etc/systemd/resolved.conf
〜
DNSStubListener=no
$ sudo systemctl restart systemd-resolved
$ sudo unlink /etc/resolv.conf
NetworkManagerにDNSを設定する
nmcliでローカルのDNSを使うように強制する。nmcli con*1で適用する接続のUUIDを確認し設定する。
$ sudo nmcli con
NAME UUID TYPE DEVICE
docker0 12345678-9abc-def0-1234-567890abcdef bridge docker0
有線接続 1 09876543-21fe-dcba-0987-654321fedcba ethernet enp4s4
$ sudo nmcli con mod 09876543-21fe-dcba-0987-654321fedcba ipv4.ignore-auto-dns yes
$ sudo nmcli con mod 09876543-21fe-dcba-0987-654321fedcba ipv4.dns 127.0.0.1
$ sudo nmcli con mod 09876543-21fe-dcba-0987-654321fedcba ipv6.ignore-auto-dns yes
$ sudo nmcli con mod 09876543-21fe-dcba-0987-654321fedcba ipv6.dns ::1
$ sudo nmcli con up 09876543-21fe-dcba-0987-654321fedcba
(もしかしたらNetworkManagerごと再起動するか(↓)、PC再起動したほうがいいかも)
$ sudo systemctl restart NetworkManager
確認
Wiresharkで"port 53 or port 853"のルール*2でパケットキャプチャを開始し、1.1.1.1:853*3への暗号化通信のみがあれば大丈夫。
またCloudflare DNSが使われているかどうかはhttps://1.1.1.1/helpを確認すればよい。
キャッシュの確認はdigコマンドを2回連続で実行してみる。
$ dig example.com
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46218
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
; PAD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ("....................................................................")
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 10457 IN A 93.184.216.34
;; Query time: 145 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Mar 29 17:36:21 JST 2019
;; MSG SIZE rcvd: 139
$ dig example.com
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 686
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 10455 IN A 93.184.216.34
;; Query time: 0 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Mar 29 17:36:23 JST 2019
;; MSG SIZE rcvd: 56
dnsmasqの使用状況・キャッシュ状況(ヒット数など)の確認はdnsmasqに対してSIGUSR1を送り、syslog等を確認する。
$ sudo pkill -USR1 dnsmasq
$ tail /var/log/syslog
〜
Mar 29 17:34:39 hogehoge dnsmasq[1309]: time 1553848479
Mar 29 17:34:39 hogehoge dnsmasq[1309]: cache size 2000, 0/2505 cache insertions re-used unexpired cache entries.
Mar 29 17:34:39 hogehoge dnsmasq[1309]: queries forwarded 1027, queries answered locally 454
Mar 29 17:34:39 hogehoge dnsmasq[1309]: queries for authoritative zones 0
Mar 29 17:34:39 hogehoge dnsmasq[1309]: server 127.0.0.1#53000: queries sent 1027, retried or failed 0
〜