以前紹介した、Stubbyを使ったDNS over TLS(DoT)での名前解決環境の作り方的なメモ。書いておいて公開していなかったので。
※参考URLは忘れた。
※もしかしたら誤りとかあるかも。
前提
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 〜