BINDの排除とUnbound/LDNSの導入
FreeBSD 10からはベースシステムからBINDが取り除かれる点に注意が必要。BINDはよくセキュリティ脆弱性が発見されるソフトウェアのひとつだが、BINDのリリースエンジニアリングとFreeBSDの相性の問題で今回ベースシステムからは外れることになった。置き換えというわけにはいかないが、これを補うことになるソフトウェアとしてUnboundとLDNSの一部がベースシステムにマージされている。
% ls /etc/rc.d/ | grep named
% ls /etc/rc.d/ | grep unbound
local_unbound
% grep unbound /etc/defaults/rc.conf
local_unbound_enable="NO" # local caching resolver
%
BINDはベースシステムから削除されている。ローカルキャッシュリゾルバの機能を担当するソフトウェアとしてUnboundがマージされた
dig(1)はBINDに含まれていたツールであるため、dig(1)もベースシステムから削除されている。同じくBIND由来のhost(1)やnslookup(1)もベースシステムから取り除かれている。この代替としてはLDNSベースのdrill(1)とhost(1)が追加されている。
% whereis dig
dig:
% whereis host
host: /usr/bin/host /usr/share/man/en.UTF-8/man1/host.1.gz /usr/src/usr.bin/host
% whereis drill
drill: /usr/bin/drill /usr/share/man/en.UTF-8/man1/drill.1.gz /usr/src/usr.bin/drill
%
BINDをベースシステムから削除したことで、BINDに含まれていたdig(1)も削除。これの代替としてはLDNSのhost(1)およびdrill(1)がベースシステムにマージされた
host(1)はDNSルックアップを実施するための簡易ユーティリティ。ちょっとした名前引きなどに利用される。
% host news.mynavi.jp
news.mynavi.jp has address 210.154.149.96
%
host(1)コマンド実行例
drill(1)はdig(1)をより強力にしたようなツールで、DNSおよびDNSSECのすべての情報にアクセスできる設計になっている。FreeBSD 10以降は基本的にはdrill(1)を使えばよい。
% drill news.mynavi.jp
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 4892
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 4
;; QUESTION SECTION:
;; news.mynavi.jp. IN A
;; ANSWER SECTION:
news.mynavi.jp. 3504 IN A 210.154.149.96
;; AUTHORITY SECTION:
mynavi.jp. 2568 IN NS ns1.mynavi.jp.
mynavi.jp. 2568 IN NS angels.sprite.ad.jp.
mynavi.jp. 2568 IN NS ns2.mynavi.jp.
mynavi.jp. 2568 IN NS ns-kg022.ocn.ad.jp.
mynavi.jp. 2568 IN NS ns3.mynavi.jp.
;; ADDITIONAL SECTION:
ns1.mynavi.jp. 927 IN A 210.154.149.8
ns2.mynavi.jp. 927 IN A 210.154.149.9
ns3.mynavi.jp. 503 IN A 210.190.113.64
angels.sprite.ad.jp. 83727 IN A 202.227.128.129
;; Query time: 8 msec
;; SERVER: 192.168.1.1
;; WHEN: Mon Dec 23 14:00:02 2013
;; MSG SIZE rcvd: 224
%
drill(1)コマンド実行例
こうした新しいコマンドではなく従来のコマンドを使いたいという場合にはbind-tools(dns/bind-tools)をインストールするという方法がある。bind-tools(dns/bind-tools)をインストールするとBINDベースのdig(1)、host(1)、nslookup(1)が利用できるようになる。
% cd /usr/ports/dns/bind-tools/
% cat pkg-plist
bin/dig
bin/host
bin/nslookup
%
dig(1)が使いたい場合はbind-tools(dns/bind-tools)をインストールするという方法もある
Unboundはローカルキャッシュリゾルバとして導入されている。たとえば/etc/rc.confに次の設定を追加することで利用できるようになる。
local_unbound_enable="YES"
ローカルキャッシュリゾルバ機能を有効にするために/etc/rc.confファイルに追加する設定
次のようにUnboundを起動すると、一番最初の起動時には現在のシステムの設定から新しくUnboundの設定ファイルを生成するとともに、/etc/resolv.confファイルをunbound(8)を利用するように書き換えが行われる。ネームサーバとして127.0.0.1が指定されるようになっていればunbound(8)を利用するようになる。
% service local_unbound start
Performing initial setup.
Extracting forwarders from /etc/resolv.conf.
/var/unbound/forward.conf created
/var/unbound/unbound.conf created
/etc/resolvconf.conf created
original /etc/resolv.conf saved as /etc/resolv.conf.20131223.141713
Starting local_unbound.
%
unbound(8)を起動
% cat /etc/resolv.conf
# Generated by resolvconf
search ongs.co.jp
# nameserver 192.168.1.1
nameserver 127.0.0.1
options edns0
%
/etc/resolv.confファイルはunbound(8)によって自動的に更新される
% cat /var/unbound/forward.conf
# Generated by local-unbound-setup
forward-zone:
name: .
forward-addr: 192.168.1.1
% cat /var/unbound/unbound.conf
# Generated by local-unbound-setup
server:
username: unbound
directory: /var/unbound
chroot: /var/unbound
pidfile: /var/run/local_unbound.pid
auto-trust-anchor-file: /var/unbound/root.key
include: /var/unbound/forward.conf
% cat /etc/resolvconf.conf
# Generated by local-unbound-setup
resolv_conf="/dev/null" # prevent updating /etc/resolv.conf
unbound_conf="/var/unbound/forward.conf"
unbound_pid="/var/run/local_unbound.pid"
unbound_service="local_unbound"
unbound_restart="service local_unbound reload"
%
ほかの設定ファイルも起動時に自動生成される
実際に名前解決を測ってみるとその効果がよくわかる。たとえば次の例では、ローカルキャッシュ効果が出る前の段階ではクエリに394ミリ秒かかっている。
% drill www.freebsd.org
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 27410
;; flags: qr rd ra ; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; www.freebsd.org. IN A
;; ANSWER SECTION:
www.freebsd.org. 429 IN CNAME wfe0.ysv.freebsd.org.
wfe0.ysv.freebsd.org. 1921 IN A 8.8.178.110
;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:
;; Query time: 394 msec ← 394ミリ秒かかっている
;; SERVER: 127.0.0.1
;; WHEN: Fri Dec 27 16:37:30 2013
;; MSG SIZE rcvd: 72
%
ローカルキャッシュに入る前:394ミリ秒
しかし、1度実行した後は、実行時間が1ミリ秒へ短縮していることがわかる。
% drill www.freebsd.org
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 12650
;; flags: qr rd ra ; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; www.freebsd.org. IN A
;; ANSWER SECTION:
www.freebsd.org. 424 IN CNAME wfe0.ysv.freebsd.org.
wfe0.ysv.freebsd.org. 1916 IN A 8.8.178.110
;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:
;; Query time: 1 msec ← 394ミリ秒から1ミリ秒へ短縮している
;; SERVER: 127.0.0.1
;; WHEN: Fri Dec 27 16:37:35 2013
;; MSG SIZE rcvd: 72
%
ローカルキャッシュに入った後:1ミリ秒
Unboundでは正引きや逆引きの設定を簡単に設定することができ(/var/unbound/unbound.conf)、/etc/hostsの替わりに利用することもできる。