以前に以下のようなknot resolverの記事を書きましたが、その後使用していてスタブフォワードが正しく機能していなかったことに気が付きました。
MLに確認したところ以下のようにするのが良いようです。
正引きは以下のように設定します。これは以前と同じです。
policy.add(policy.suffix(policy.FORWARD('192.168.1.2@10053'), {'7example3com'}))
このままだと、逆引きの問い合わせを行ったときは以下のような結果になります。
kometch@dns02:~$ drill 192.168.1.1 -x
;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 43732
;; flags: qr aa rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;; 1.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
;; AUTHORITY SECTION:
blocked. 900 IN SOA blocked. . 0 3600 900 604800 900
;; ADDITIONAL SECTION:
;; Query time: 1 msec
;; SERVER: 192.168.1.2
;; WHEN: Fri Apr 14 22:13:57 2017
;; MSG SIZE rcvd: 86
そう、blockと出力され、問い合わせがブロックされてしまうのです。これについてはMLで以下のような回答がありました。
The problem there is that the policy module contains an implicit rule
that blocks reverse queries to private zones (e.g.192.168.*.*
). You
can remove that rule by adding a line `policy.del(0)
` to your config.
policyの0行目に暗黙のルールが存在しているので、それを明示的に削除してやる必要があるそうです。
で、このあと問い合わせると以下のように結果が変わります。
kometch@dns02:/etc/knot-resolver$ drill -x 192.168.1.2
;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 9431
;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;; 2.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
;; AUTHORITY SECTION:
168.192.in-addr.arpa. 604566 IN SOA prisoner.iana.org. hostmaster.root-servers.org. 1 604800 60 604800 604800
;; ADDITIONAL SECTION:
authorityがなんかおかしいです。
というのも、knot resolver側に逆引きを転送するpolicyを書く必要があります。(あとから考えたらそのとおりですね)
policy.add(policy.suffix(policy.FORWARD('192.168.1.2@10053'), { todname('168.192.in-addr.arpa') }))
詳細は以下にあります。
Knot Resolver modules — Knot Resolver 3.2.1 documentation
とりあえずこれでstub forwardingができるようになると思います。
Vladimirさんには感謝です。