このページはリンク切れを生じないために残してありますが、内容は古くなっていますのでご注意下さい。
起動
まずはプライマリになってみましょう。
ソースツリーのsamples/knot.full.confを参考に/proj/knot-dns/etc/knot.confを以下の内容で作りました。
system {
storage "/proj/knot-dns/var";
}
zones {
example1.jp {
file "/proj/dns/namedb/example1.jp";
}
}
また、example1.jpゾーンのゾーンデータ、/proj/dns/namedb/example1.jpは以下の内容で作りました。
$TTL 1d
@ IN SOA ns.example1.jp. hostmaster.example1.jp. (
2012040101
20m
15m
4w
15m )
NS ns.example1.jp.
ns A 192.0.2.1
Knot DNSの制御にはknotcコマンドを使います。knotcの構文は次の通りです。
% /proj/knot-1.0.6/sbin/knotc -help
Usage: knotc [parameters] start|stop|restart|reload|running|compile [additional]
Parameters:
-c [file], --config=[file] Select configuration file.
-j [num], --jobs=[num] Number of parallel tasks to run (only for 'compile').
-f, --force Force operation - override some checks.
-v, --verbose Verbose mode - additional runtime information.
-V, --version Print knot server version.
-w, --wait Wait for the server to finish start/stop operations.
-i, --interactive Interactive mode (do not daemonize).
-a, --auto Enable automatic recompilation (start or reload).
-h, --help Print help and usage.
Actions:
start Start knot server zone (no-op if running).
stop Stop knot server (no-op if not running).
restart Stops and then starts knot server.
reload Reload knot configuration and compiled zones.
refresh Refresh all slave zones.
running Check if server is running.
checkconf Check server configuration.
checkzone Check zones (accepts specific zones, f.e. 'knotc checkzone example1.com example2.com').
compile Compile zones (accepts specific zones, see above).
まずknotcのcheckckonfサブコマンドでknot.confをチェックしてみます。
% /proj/knot-1.0.6/sbin/knotc checkconf
2012-06-28T20:44:50.819854+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-28T20:44:50.820522+09:00 OK, configuration is valid.
OKだと言っています。続いてcheckzoneサブコマンドでexample1.jpゾーンのゾーンデータをチェックしてみます。
% /proj/knot-1.0.6/sbin/knotc checkzone example1.jp
2012-06-28T20:46:34.196737+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-28T20:46:34.201878+09:00 [error] /proj/dns/namedb/example1.jp:2: @ used, but no $ORIGIN specified.
2012-06-28T20:46:34.219498+09:00 [error] /proj/dns/namedb/example1.jp:9: Zone file does not contain SOA record!
おやおや、エラーになってしまいました。Knot DNSはBINDやNSDとは違ってzones{}に書いたゾーン名をoriginの初期値には使ってくれないようです。メーリングリストで質問したところ、開発者から反応がありましたので、そのうち仕様が変わると思います。
v1.1.0-rc1で変わりました。
ゾーンデータの2行目に$ORIGINを書き足して、以下のようにして
$TTL 1d
$ORIGIN example1.jp.
@ IN SOA ns.example1.jp. hostmaster.example1.jp. (
2012040101
20m
15m
4w
15m )
NS ns.example1.jp.
ns A 192.0.2.1
もう一度checkzoneしてみたところ
% /proj/knot-1.0.6/sbin/knotc checkzone example1.jp
2012-06-28T20:47:50.841841+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-28T20:47:50.860735+09:00 Zone file for 'example1.jp.' is OK.
OKになりました。
Knot DNSはNSDと同じように、テキストのゾーンデータを中間形式のデータファイルにコンパイルしてからサーバに読み込みます。コンパイルにはknotcのcompileサブコマンドを使います。
% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc compile
2012-06-21T19:34:49.809626+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-21T19:34:49.830451+09:00 Parsing file '/proj/dns/namedb/example1.jp', origin 'example1.jp.' ...
2012-06-21T19:34:49.834400+09:00 Compilation of 'example1.jp.' successful.
それでは起動してみましょう。knotcの-iオプションはinteractive modeで起動するオプションです。
% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc -i start
2012-06-21T19:39:18.693806+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-21T19:39:18.713661+09:00 Running in interactive mode.
2012-06-21T19:39:18.721303+09:00 Reading configuration '/proj/knot-dns/etc/knot.conf' ...
2012-06-21T19:39:18.722100+09:00 Loading 1 compiled zones...
2012-06-21T19:39:18.729707+09:00 Loaded zone 'example1.jp.'
2012-06-21T19:39:18.751623+09:00 Loaded 1 out of 1 zones.
2012-06-21T19:39:18.752808+09:00 Configured 0 interfaces and 1 zones.
2012-06-21T19:39:18.752891+09:00
2012-06-21T19:39:18.753392+09:00 Starting server...
2012-06-21T19:39:18.757210+09:00 Server started in foreground, PID = 3278
2012-06-21T19:39:18.758948+09:00 PID stored in /proj/knot-dns/var/knot.pid
起動したようです。ところが、この状態でnetstatすると、localhostにしかbind()していません。
% netstat -atu | grep :domain
tcp 0 0 localhost.locald:domain *:* LISTEN
udp 0 0 localhost.locald:domain *:*
一度^Cでknotcを停止して
2012-06-21T19:53:11.063316+09:00 Stopping server...
2012-06-21T19:53:11.064593+09:00 Server finished.
2012-06-21T19:53:11.065009+09:00 Shut down.
knot.confにinterfaces{}を書き足して以下のようにしました。
system {
storage "/proj/knot-dns/var";
}
interfaces {
eth0 {
address 192.0.2.1;
}
}
zones {
example1.jp {
file "/proj/dns/namedb/example1.jp";
}
}
今度は-iオプションなしで起動してみましょう。
% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc start
2012-06-21T19:54:06.392361+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
この状態でnetstatしてみましょう。
% netstat -atu | grep :domain
tcp 0 0 ns.example1.jp:domain *:* LISTEN
tcp 0 0 localhost.locald:domain *:* LISTEN
udp 0 0 ns.example1.jp:domain *:*
udp 0 0 localhost.locald:domain *:*
今度はLANインターフェースにもbind()しました。INADDR_ANYはダメなのでしょうか? 試しにaddressを0.0.0.0に書き換えてknotc reloadしてみたところ、localhostにしかbind()しませんでした。どうやら明示的にIPアドレスを書かなきゃいけないみたいです。ということは、ホストをリナンバするときは、ここの設定変更も忘れないようにしなきゃいけませんね。まぁ公開サーバをリナンバすることなど、そうそうないんでしょうが、それをやるような状況の精神状態では、気づきにくいんじゃないかと思います。
ついに一応動いたようなので、digでクエリしてみましょう。
% dig @192.0.2.1 example1.jp SOA
; <<>> DiG 9.6.-ESV-R5-P1 <<>> @192.0.2.1 example1.jp SOA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18151
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;example1.jp. IN SOA
;; ANSWER SECTION:
example1.jp. 86400 IN SOA ns.example1.jp. hostmaster.example1.jp. 2012040101 1200 900 2419200 900
;; AUTHORITY SECTION:
example1.jp. 86400 IN NS ns.example1.jp.
;; ADDITIONAL SECTION:
ns.example1.jp. 86400 IN A 192.0.2.1
;; Query time: 0 msec
;; SERVER: 192.0.2.1#53(192.0.2.1)
;; WHEN: Thu Jun 21 20:03:09 2012
;; MSG SIZE rcvd: 120
無事、応答しました。
この時点で/proj/knot-dns/varの下には以下のファイルができています。
% ls -l /proj/knot-dns/var
total 36
-rw-r--r-- 1 root root 282 Jun 21 19:34 example1.jp.db
-rw-r--r-- 1 root root 9 Jun 21 19:34 example1.jp.db.crc
-rw-r----- 1 root root 20517 Jun 21 20:02 example1.jp.diff.db
-rw-r--r-- 1 root root 4 Jun 21 19:54 knot.pid
どうやら、中間形式のデータファイルはゾーン毎に作られ、knot.confのstorageで指定したディレクトリ直下にフラットに置かれるようです。NSDがすべてのゾーンをnsd.db、1ファイルにまとめるのとは違いますね。.db、.db.crc、.diff.dbの各ファイルの内容はわかりませんが、サーブするゾーンの数が多いと大変そうですね。
Copyright(c) 2012 Koh-ichi Ito, All rights reserved
ページ先頭のアイコン: Copyright(c) 2017 いらすとや, All rights reserved.
Last update: $Date: 2019-08-16 11:45:02 +0900 (Fri, 16 Aug 2019) $
[インストールへ|indexへ|スレーブになってみるへ]