このページはリンク切れを生じないために残してありますが、内容は古くなっていますのでご注意下さい。

小ネタ

chroot()

READMEやsamples/knot.full.confにも記述がありませんし、ソースツリーでgrep chrootを実行してみてもヒットしないので、v1.0.6の時点ではchroot()の機能はないようです。

特権放棄

samples/knot.full.confには

system {
        user knot;
}

この設定を追加して、/proj/knot-dns/var/*と/proj/dns/namedb/example2.jpを削除し、さらにchmod 777 /proj/knot-dns/var /proj/dns/namedbしてknotc startしてみました。

% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc start
2012-06-28T21:52:31.798155+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.

起動は問題なくできました。ところがPIDファイルのオーナがknotにならずrootで、サイズが0Byteです。

% ls -l /proj/knot-dns/var
total 24
-rw-r----- 1 knot root 20517 Jun 28 21:56 example2.jp.diff.db
-rw-r--r-- 1 root root     0 Jun 28 21:56 knot.pid

この状態でknotc reloadしてみると

% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc reload
2012-06-28T21:59:04.610592+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-06-28T21:59:04.634286+09:00 [warning] Server PID not found, probably not running.

knotcはPIDファイルを参照しているようで、reloadに失敗してしまいました。
この問題は既にknot-dns-users MLで議論されているので、近い内に修正されるのではないでしょうか。

version.bindなど


% dig @192.0.2.1 version.bind TXT CH

; <<<< DiG 9.8.1-P1 <<<< @192.0.2.1 version.bind TXT CH
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -<<HEADER<<- opcode: QUERY, status: REFUSED, id: 41600
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;version.bind.  CH      TXT

;; Query time: 3 msec
;; SERVER: 192.0.2.1#53(192.0.2.1)
;; WHEN: Sat Jun 30 15:28:16 2012
;; MSG SIZE  rcvd: 30

% dig @192.0.2.1 hostname.bind TXT CH

; <<<< DiG 9.8.1-P1 <<<< @192.0.2.1 hostname.bind TXT CH
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -<<HEADER<<- opcode: QUERY, status: REFUSED, id: 14165
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;hostname.bind. CH      TXT

;; Query time: 3 msec
;; SERVER: 192.0.2.1#53(192.0.2.1)
;; WHEN: Sat Jun 30 15:30:12 2012
;; MSG SIZE  rcvd: 31

% dig @192.0.2.1 id.server TXT CH

; <<<< DiG 9.8.1-P1 <<<< @192.0.2.1 id.server TXT CH
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -<<HEADER<<- opcode: QUERY, status: REFUSED, id: 16990
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;id.server.     CH      TXT

;; Query time: 5 msec
;; SERVER: 192.0.2.1#53(192.0.2.1)
;; WHEN: Sat Jun 30 15:30:57 2012
;; MSG SIZE  rcvd: 27

knot-1.0.6/src/knot.full.confに
  # Identity of the server (see RFC 4892). Not used yet.
  identity "I have no mouth and must scream";
knot-1.0.6/KNOWN_ISSUESに
Here is a list of the most notable features that are not supported in the 
current version of Knot.

* Other DNS classes than IN (CH, CS, HS)
と書いてあるように、これらのサポートは予定にはあるようですが、まだされていません。

ゾーンデータのBIND独自拡張

BINDには、RFC 1035, DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATIONRFC 2308, Negative Caching of DNS Queries (DNS NCACHE)($TTLが定義されている)で定義されているゾーンデータの書式の他に、時間に関するm(minutes)、h(hour)、d(day)、w(week)の補助単位と、$GENERATEディレクティブが独自に拡張されています。
このうち、時間に関する補助単位は起動のページで既に無意識の内に使ってしまいました。ここで$GENERATEについて調べてみましょう。
/proj/dns/namedb/example1.jpに、以下のように$GENERATEを書き足して

$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
$GENERATE 2-254 pool$ IN A 192.0.2.$
knotc checkzoneしてみると

% /proj/knot-1.0.6/sbin/knotc checkzone example1.jp
2012-07-03T22:32:43.530181+09:00 Using '/proj/knot-dns/etc/knot.conf' as default configuration.
2012-07-03T22:32:43.550375+09:00 [warning] /proj/dns/namedb/example1.jp:11: Unknown directive: $GENERATE
2012-07-03T22:32:43.551988+09:00 [error] /proj/dns/namedb/example1.jp:11: syntax error
2012-07-03T22:32:43.555547+09:00 [error] /proj/dns/namedb/example1.jp:11: unknown character '$' (\036) seen - is this a zonefile?
2012-07-03T22:32:43.555651+09:00 [error] /proj/dns/namedb/example1.jp:11: unknown character '$' (\036) seen - is this a zonefile?
2012-07-03T22:32:43.555723+09:00 [error] /proj/dns/namedb/example1.jp:11: unrecognized RR type '2-254'
2012-07-03T22:32:43.555888+09:00 [error] Parser finished with 4 error(s).

エラーになってしまいました。
NSDでもメーリングリストで$GENERAGEをサポートして欲しいというリクエストがあって、nsdc rebuildの前にperlで下処理すれば?で話が終わっているんですが、Knot DNSも、少なくとも現時点では$GENERATEはサポートしていませんでした。
確かにNSDやKnot DNSがターゲットにしているrootやTLDでは$GENERATEを使う場面はありませんし、DNSSECを使うには署名前に$GENERATEを展開しなければならず、ネームサーバにロードされる時点では展開が済んでいますから、開発コンセプトとしては必要ない機能なんでしょうね。

RFC 2317

RFC 2317, Classless IN-ADDR.ARPA delegationで規程されている/24に満たないIPv4アドレス空間の逆索きゾーンの例として32/27.2.0.192.in-addr.arpa(192.0.2.32/27に対応するゾーン名)を試してみました。
knot.conf(実際はknot-2317.confという名前で試しました)には

zones { 32/27.2.0.192.in-addr.arpa { file "/proj/dns/etc/namedb/32_27.2.0.192.in-addr.arpa"; } }
という設定を追加し、ゾーンデータは

$TTL 1d
$ORIGIN 32/27.2.0.192.in-addr.arpa
@       IN      SOA     ns.example1.jp. hostmaster.example1.jp. (
                2012070401
                20m
                15m
                4w
                15m )
        NS      ns.example1.jp.

という内容で作成してknotc checkzoneしたところ

% /usr/bin/sudo /proj/knot-1.0.6/sbin/knotc -c /proj/knot-dns/etc/knot-2317.conf checkzone 32/27.2.0.192.in-addr.arpa
2012-07-04T19:47:33.287327+09:00 [error] Config '/proj/knot-dns/etc/knot-2317.conf' - syntax error on line 5 (current token '32').
2012-07-04T19:47:33.287980+09:00 [error] Failed to parse configuration '/proj/knot-dns/etc/knot-2317.conf'.

というエラーになりました。この件もメーリングリストでレポートしたところ開発者から反応がありましたので、そのうち直ると思います。
v1.1.0-rc1で直っています。

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) $
[TSIGでゾーン転送を認証してみるへ|indexへ]