Dnscrypt-proxy

提供: ArchWiki
2015年7月4日 (土) 18:56時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

DNSCrypt はユーザーと DNS リゾルバの間の DNS トラフィックを暗号化するソフトウェアです。盗聴や改竄、中間者攻撃を防ぎます。

インストール

公式リポジトリから dnscrypt-proxyインストールしてください。

設定

ヒント: DNSCrypt が自動的にリゾルバを選ぶようにしたい場合、AURdnscrypt-autoinstallAUR を使って下さい。

デフォルトで (dnscrypt-proxy.service から読み込まれる) /etc/conf.d/dnscrypt-proxydnscrypt-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.confserver セクションの最後に追加してください:

do-not-query-localhost: no
forward-zone:
  name: "."
  forward-addr: 127.0.0.1@40
ノート: Port 40 is given as an example as Unbound by default listens to 53, these must be different.
ヒント: If you are setting up a server add interface: 0.0.0.0@53 and access-control: your-network/subnet-mask allow inside the server: section so that the other computers of your LAN can connect to the server. A client must be configured with nameserver address-of-your-server in /etc/resolv.conf.

systemd サービス unbound.service を起動してください。そして Unbound の forward-zone IP とポートを DNSCrypt の /etc/conf.d/dnscrypt-proxy に設定します:

DNSCRYPT_LOCALIP=127.0.0.1
DNSCRYPT_LOCALPORT=40
ノート: DNSCrypt needs to start before Unbound, so include unbound.service on a Before= line in the [Unit] section of dnscrypt-proxy.service.

dnscrypt-proxy.serviceunbound.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.servicednsmasq.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 をアンコメントしてください。そして pdnsddnscrypt-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"