DNS Summer Day 2019
本記事は、DNS Summer Day 2019で発表した内容を記事として書き起こし、加筆修正したものです。
目次
RFC (Request for Comments)とは
IETFによる技術仕様の保存や公開を示します。主にプロトコルやデータフォーマットが取り扱われます。(=標準仕様)
XACK DNSもRFCに準拠するように開発しています。ですが、一部の記述で曖昧な点などがあります。開発中にどう扱うべきか、どのように解釈すべきかなど困った事例や悩んだ事例をご紹介します。
差分ゾーン転送
- 最初にセカンダリーからSOA要求を行う目的は?
- セカンダリー側でプライマリーに更新があったかを確認するため。

- 差分ゾーン転送のRFCはRFC 1995(最新)。

- セカンダリーからのSOA要求は直接的に書かれていないような。。。
- この件はRFC 1034にこのような記述があります。

【ポイント1】
- ある1つの機能を実現すべき内容が複数のRFCに点在する。
空の非終端(Empty Non-Terminal)
- 空の非終端とは

QNAME | レコード | RCODE |
example.com | ある(頂点) | NoError |
test1.abc.example.com | ある | NoError |
test2.abc.example.com | ない | NXDomain |
abc.example.com | ない | NoError(NoData) |
- 空の非終端の問い合わせにはNoError(NoData)を応答する。
- RFC 1034,1035では一部触れられているものの、明示的に「Empty Non-Terminal」という記述はない。
- どこに書いてある?
- RFC 5155に記述されています。

- RFC 8020で明記されています。

【ポイント2】
- 後々のRFCで明記されるまでは動作仕様が曖昧なものがある。
TTL関連 ~ ゾーンファイル ~
- RFC 2181にTTLの最小値と最大値が記述されています。

- XACK DNSではこの記述を根拠にゾーンファイルに最大値を超過するTTLを設定するとエラーとしていました。
- RFC 2181にはこのような記述もあります。

- BINDではこの記述を根拠にゾーンファイルに最大値を超過するTTLの設定を許容するように見えます。(応答のTTLは0)
- XACK DNSはRFCに準拠している動作ですが、BINDは若干拡大解釈しているような。。。
- BINDからの移行でこのようなTTLが指定されているゾーンファイルがあってもXACK DNSで受け入れたい。

- XACK DNS側も追従して、設定で許容可能としました。
- RFC 2308でSOAレコードのMINIMUMフィールドが再定義されています。

- ネガティブキャッシュのTTLはSOAレコードのMINIMUMフィールドとSOAレコードの小さい方を採用します。

- SOAレコードのMINIMUMフィールドはTTLのように扱われますが、BINDでは最大値をTTLの最大値としていないようです。

- XACK DNS側も追従して、設定で許容可能としました。
【ポイント3】
- 実装によってRFCの解釈が異なる場合がある。
- RFC 4034にはRRSIG RRのTTL値は、署名対象のRRsetのTTL値と一致しなければならないと記述されています。

- RFC 4035には複数のRRSIG RRがある場合、どれか1つでもRRsetのTTLと同じであればよいようにとれる記述があります。

- RFC 4035にはこのような記述もあり、1つのRRsetで複数のRRSIG RRを持つ可能性があると示されています。

- 異なるTTLを持つRRSIG RRが存在しても良いような。。。
- 同じ所有者名で異なるTTLを持つRRSIG RRが複数ある場合、時間経過で一部のRRSIG RRが消えた時に署名検証ができなくなるのでは。
- XACK DNSでは同一署名対象のRRsetごとに、最小のTTLの値に合わせています。
【ポイント4】
- エラーケースなどの記述が網羅されていない。
NSECからNSEC3への移行・戻し
- RFC 5155の10.4.と10.5.には署名ゾーンにおけるNSECからNSEC3への移行・戻しの手順が記述されています。

- 署名ツールでできることは、以下の通り。
- NSEC署名を行う
- NSEC3署名を1つだけ行う
- したがって、署名ツールを使っての2.と3.の実施ができない。

【ポイント5】
- RFCに手順が記述されているものの具体的な実行手順が示されていないものがある。
おわりに
- 標準仕様であるRFCに準拠することは製品の品質を担保する上では必要不可欠。
- 文章の解釈の違いにより、他の実装と動作が異なる場合には調整が必要。
- RFCに準拠しない対向先への考慮も必要。
XACKではよりよい製品開発を目指して参ります。

課題抽出やどの製品を選定すればよいかの整理からご相談ください
システムの新規構築や更改にお悩みのお客様もお待ちしています。
現状の課題抽出や要件の整理、解決に導くための機能紹介やシステム
構成まで、アプライアンス・ソフトウェア問わずご提案します。