ServersMan@VPS 設定記(4)

OpenVPNは面倒な匂いがプンプンしてきたので、気分を変えてDNSのセカンダリサーバを立てることに。といっても、bindをタダ動かすだけじゃ面白くないので、NSDを入れてみることに。FreeBSDだと、ports/dns/nsd で入れられるんで、そっちを参考にしながら。
ちなみに、NSDはNLnetLabsがRIPE/NCCと開発したDNSサーバー。nlnetlabs.nl辺りを読むとよいかも。

bindの設定は残しつつ、nsdにアレンジを試みる。まずは、ftp://ftp.rhnet.is/pub/nsd/ あたりから、nsd-3.2.5.tar.gz を取ってきて、おもむろに

# ./configure --with-configdir=/usr/local/etc

したら、どうもssl.h がないとconfigure に失敗するらしい。おもむろにググると、openssl-devel を入れないといけないのか。って事で、

# yum install openssl-devel

を実行して、configure & make & make installを実行。

makeが通ったら、/usr/local/etc/nsd.conf を作成。nsdだと、あんまり余計な設定を書かなくてもあっさり動いちゃうのがいいねぇ。とりあえずスレーブサーバーとして動けばいいので、
-------------------------------------------------------------
server:
database: "/var/db/nsd/nsd.db"
logfile: "/var/log/nsd.log"
pidfile: "/var/run/nsd.pid"
username: named
difffile: "/var/db/nsd/ixfr.db"
xfrdfile: "/var/db/nsd/xfrd.state"
zone:
name: "example.jp"
zonefile: "example.jp.zone"
allow-notify: 127.0.0.1 NOKEY
allow-notify: ::1 NOKEY
allow-notify: NOKEY
request-xfr: NOKEY
-------------------------------------------------------------
この程度でオッケー。DNSSEC使えよ、とかの突っ込みはありそうだけど、取りあえずやりたい人が考えて:-)

bindと違うのは、DNSの権威サーバーはnsd、DNSのリゾルバはunboundって、きっちり分かれてるので、権威サーバーでかつリゾルバも使いたい場合は頭をひねらないといけない(listenするIPアドレスで使い分けるとか?)んだけど、外で運用するサーバーなら、さしあたって困らないので、これで完結。

起動スクリプトは、とりあえずこんな感じでええのかな。
-------------------------------------------------------------
#! /bin/sh

# chkconfig: 2345 45 74
# description: nsd script
# processname: nsd
# config: /usr/local/etc/nsd/nsd.conf

# source function library
. /etc/rc.d/init.d/functions

# Get network config
. /etc/sysconfig/network

# nsd command line options
. /etc/sysconfig/nsd

RETVAL=0
prog="nsd"

case "$1" in
start)
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 1

# The process must be configured first.
[ -f /usr/local/etc/nsd/nsd.conf ] || exit 6

echo -n $"Starting $prog: "
daemon /usr/local/sbin/nsd
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/nsd
echo
;;
stop)
echo -n $"Shutting down $prog: "
killproc nsd
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/nsd
echo
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/nsd ]; then
$0 stop
$0 start
fi
RETVAL=$?
;;
status)
status nsd
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
exit 2
esac

exit $RETVAL
-------------------------------------------------------------
ちなみに、上のスクリプトの
chkconfig: 2345 45 74
こいつで、実行制御ができるらしい。2345が、runlevel 2,3,4,5で動作可能。ServersMan@VPSだと、標準だとrunlevel 3なんで、2345って書いてもあんまり意味ないけど、とりあえず定義。起動順は、S45とK74で動くらしいが、KとSって何が違うんじゃー?
んで、
# /sbin/chkconfig -add nsd
# /sbin/chkconfig nsd on
としてやれば、run levelに応じて自動的に起動するようになる。ちなみに削除するんだったら、
# /sbin/chkconfig --del nsd
確認は、
# /sbin/chkconfig --list nsd
でできる。

その後、
# /usr/local/sbin/nsdc rebuild
して、初期データベースの設定をやっておく。どっかのサイトを見てやったのだけど、記載するのを忘れて2度目に構築したらどはまりしたので、追記。

masterサーバーからの更新は、手動で
# /usr/local/sbin/nsdc update
を実行。また、masterサーバーからの自動更新は、/etc/crontabに、
0-59/15 * * * * root /usr/local/sbin/nsdc update
こんな感じの行を追加して自動でやらせる、ってのは、bindとは全く違う発想。なおかつ、高速化を図るために、スレーブサーバーはDB形式で保存しているので、master側のzone情報をクラッシュさせたら、事実上復旧は難しいんじゃないかな。

ついでに、unboundは、DNSのリゾルバに特化したアプリケーション。こっちも別の機械に入れてみたので情報提供しておくか。
こっちはFreeBSDのサーバーに入れてみたので、ports/dns/unbound を突っ込んで、/usr/local/etc/unbound.conf を次のような感じで書いて、/etc/rc.conf に、unbound_enable="YES" 書いて起動すれば終わり。
server:
access-control: 192.168.0.0/24 allow
うちは、ちょっと特殊な使い方をしてるんで、

server:
interface-automatic: yes
access-control: 192.168.0.0/24 allow
log-time-ascii: no
forward-zone:
name: "flets"
forward-addr: 220.210.xxx.yyy
forward-addr: 220.210.xxx.zzz
みたいな感じにやって、複数インターフェースからのセッションを許可したり、fletsのサイトへは無条件にforward queryを投げたりしているけど、単純なDNS resolverとしては結構便利かな。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント