角川の金盾の件も頭の片隅には置きつつ、それ以前に、名前解決が平文で行われるのはセキュアではないよね、と思ったので、最近話題のDNS over HTTPSを使って名前解決が出来るようにしてみる。
環境はUbuntu 18.04 LTS。
まずはdnscrpyt-proxyをインストールする。
sudo add-apt-repository ppa:shevchuk/dnscrypt-proxy sudo apt install dnscrypt-proxy
で、設定ファイルを変更。
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
--- dnscrypt-proxy.toml.orig 2018-10-16 21:15:17.821726742 +0900 +++ dnscrypt-proxy.toml 2018-10-16 21:23:20.394256628 +0900 @@ -27,13 +27,13 @@ ## The proxy will automatically pick the fastest, working servers from the list. ## Remove the leading # first to enable this; lines starting with # are ignored. -# server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare'] +server_names = ['google', 'cloudflare'] ## List of local addresses and ports to listen to. Can be IPv4 and/or IPv6. ## Note: When using systemd socket activation, choose an empty set (i.e. [] ). -listen_addresses = [] +listen_addresses = ['127.0.0.1:53']
server_namesはお好みで。GoogleのとCloudflareのがあればいいだろうって判断したけど、検閲絡みのハナシを考えるとscaleway-fr(フランス?)とかyandex(ロシア)のも入れておいたほうがいいのかな。とはいえ起動時のRTT判定で十中八九Cloudflareが選択されるので変化はないかも。
このままでは起動しなかったので、systemdのUnitファイルにちょっと書き足す。
/lib/systemd/system/dnscrypt-proxy.service
--- dnscrypt-proxy.service.orig 2018-10-16 21:16:23.818348613 +0900 +++ dnscrypt-proxy.service 2018-10-16 23:09:48.422039898 +0900 @@ -20,6 +20,7 @@ CacheDirectory=dnscrypt-proxy LogsDirectory=dnscrypt-proxy RuntimeDirectory=dnscrypt-proxy +AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] Also=dnscrypt-proxy.socket
この変更入れないと、DynamicUser=yesだから一般ユーザとして起動するのに、53番をlistenしようとしてコケるんだよね。
で、systemd-resolvedを殺す。
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
最後に、名前解決をlocalhostでやるようにする。
$ cat /etc/resolv.conf nameserver 127.0.0.1:53
再起動して完了。システムごとでもいいし、サービス再起動でも動くはず。
sudo systemctl restart dnscrypt-proxy sudo systemctl restart NetworkManager