Dnscrypt-proxy
DNSCrypt はユーザーと DNS リゾルバの間の DNS トラフィックを暗号化するソフトウェアです。盗聴や改竄、中間者攻撃を防ぎます。
目次
インストール
公式リポジトリから dnscrypt-proxy をインストールしてください。
設定
デフォルトで (dnscrypt-proxy.service
から読み込まれる) /etc/conf.d/dnscrypt-proxy
に dnscrypt-proxy が設定されており、127.0.0.1
から OpenDNS リゾルバへのリクエストを承諾するようになっています。他に使えるリゾルバは パブリックリゾルバのリスト を見て下さい。できるかぎり遅延を抑えるために、地理的に近いリゾルバを選択してください。
デフォルトの設定では、resolv.conf ファイルを変更してリゾルバのアドレスをローカルホストに置き換える必要があります:
nameserver 127.0.0.1
他のプログラムによって resolv.conf が置き換えられないようにしてください。詳しくは resolv.conf#DNS 設定の保護 を参照。
起動
systemd サービスを使って起動できます: dnscrypt-proxy.service
Tips and tricks
DNSCrypt で DNS ローカルキャッシュを転送
DNSCrypt をローカル DNS キャッシュのフォワーダとして実行することが推奨されています。そうしないと全てのクエリーが上流のリゾルバを往復することになります。ローカル DNS キャッシュプログラムならどれでも動作します。以下では Unbound, dnsmasq, pdnsd の設定例を紹介します。
例: Unbound の設定
自由に Unbound を設定 (ローカル DNS サーバーを使うように /etc/resolv.conf を設定するのを忘れずに]) してから以下の行を /etc/unbound/unbound.conf
の server
セクションの最後に追加してください:
do-not-query-localhost: no forward-zone: name: "." forward-addr: 127.0.0.1@40
systemd サービス unbound.service
を起動してください。そして Unbound の forward-zone
IP とポートを DNSCrypt の /etc/conf.d/dnscrypt-proxy
に設定します:
DNSCRYPT_LOCALIP=127.0.0.1 DNSCRYPT_LOCALPORT=40
dnscrypt-proxy.service
と unbound.service
を再起動すると変更が適用されます。
例: dnsmasq の設定
dnsmasq をローカル DNS キャッシュとして設定してください。DNSCrypt を使用する場合の基本設定:
/etc/dnsmasq.conf
no-resolv server=127.0.0.2#2053 listen-address=127.0.0.1
DNSSEC が有効になっているリゾルバを使うように DNSCrypt を設定した場合、dnsmasq でも DNSSEC を有効にするようにしてください:
/etc/dnsmasq.conf
proxy-dnssec
dnsmasq がクエリーを飛ばす 127.0.0.2
で待機するように DNSCrypt を設定:
/etc/conf.d/dnscrypt-proxy
DNSCRYPT_LOCALIP=127.0.0.2 DNSCRYPT_LOCALPORT=2053
dnscrypt-proxy.service
と dnsmasq.service
を再起動すれば変更が適用されます。
例: pdnsd の設定
pdnsd をインストールしてください。DNSCrypt を使用する基本設定:
/etc/pdnsd.conf
global { perm_cache=16384; cache_dir="/var/cache/pdnsd"; run_as="pdnsd"; server_ip = 127.0.0.1; status_ctl = on; query_method=udp_tcp; min_ttl=15m; # Retain cached entries at least 15 minutes. max_ttl=1w; # One week. timeout=10; # Global timeout option (10 seconds). neg_domain_pol=on; udpbufsize=1024; # Upper limit on the size of UDP messages. } server { label = "dnscrypt-proxy"; ip = 127.0.0.2; port = 53; timeout = 4; uptest = query; interval = 15m; proxy_only=on; } source { owner=localhost; file="/etc/hosts"; } rr { name=localhost; reverse=on; a=127.0.0.1; owner=localhost; soa=localhost,root.localhost,42,86400,900,86400,86400; }
Configure DNSCrypt to listen on 127.0.0.2:53
where pdnsd will be querying. The following has an example provider already in place. Be sure to use the provider you have chosen.
/etc/conf.d/dnscrypt-proxy
DNSCRYPT_LOCALIP=127.0.0.2 DNSCRYPT_LOCALPORT=53 DNSCRYPT_USER=nobody DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.opendns.com DNSCRYPT_PROVIDER_KEY=B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79 DNSCRYPT_RESOLVERIP=208.67.220.220 DNSCRYPT_RESOLVERPORT=443
Be sure you have configured resolv.conf properly for 127.0.0.1
.
dnscrypt-proxy.service
を編集して Before=pdnsd.service
をアンコメントしてください。そして pdnsd
と dnscrypt-proxy
サービスを有効化します。
EDNS0 の有効化
Extension Mechanisms for DNS that, among other things, allows a client to specify how large a reply over UDP can be.
以下の行を /etc/resolv.conf
に追加してください:
options edns0
You may also wish to add the following argument to dnscrypt-proxy:
--edns-payload-size=<bytes>
The default size being 1252 bytes, with values up to 4096 bytes being purportedly safe. A value below or equal to 512 bytes will disable this mechanism, unless a client sends a packet with an OPT section providing a payload size.
EDNS0 のテスト
Make use of the DNS Reply Size Test Server, use the dig command line tool from the bind-tools package to issue a TXT query for the name rs.dns-oarc.net:
$ dig +short rs.dns-oarc.net txt
EDNS0 がサポートされていれば、以下のような出力がされます:
rst.x3827.rs.dns-oarc.net. rst.x4049.x3827.rs.dns-oarc.net. rst.x4055.x4049.x3827.rs.dns-oarc.net. "2a00:d880:3:1::a6c1:2e89 DNS reply size limit is at least 4055 bytes" "2a00:d880:3:1::a6c1:2e89 sent EDNS buffer size 4096"