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"