BIND 9.9から9.11へ移行のポイント（権威DNSサーバー編）
2018年6月27日
DNS Summer Day 2018（株）日本レジストリサービス

本資料の内容• BIND 9.9.xをお使いの方に向けた、変更点の紹介– 権威DNSサーバー機能関連– ログ関連– その他• DNS Cookie （RFC 7873）の概要と運用へのインパクト

Copyright © 2018 株式会社日本レジストリサービス

2

BIND 9.11とは• 長期間のサポートを受けられる、BIND 9のメジャーバージョン（Extended Support Version: ESV）
• BIND 9.11.3（2018年3月リリース）からESVに指定された• 2021年12月末までサポートされる予定• 1つ前のESVはBIND 9.9で、2018年6月末でサポート期間終了（あと3日です！）
JPRSの藤原和典が著者に加わっているRFC 8198（NSEC/NSEC3 RRを利用して、反復検索せずにドメイン名の不存在を確認する）は、BIND 9.12以降でサポートされています（BIND 9.12ではNSECのみサポート）
Copyright © 2018 株式会社日本レジストリサービス

3

権威DNSサーバー機能関連（1/4）• update-policy: local;の挙動変更– 「localhostから」かつ「自動生成された専用のTSIG鍵を使った」場合のみ受け入れる
よう意味を変えた– 自動生成されたTSIG鍵を他のホストにコピーして使っている場合に注意– JPRSも注意喚起を実施<https://jprs.jp/tech/notice/2018-03-22-bind9-dynamicupdate.html>• パイプライン化されたTCP問い合わせへの応答– RFC 7766に準拠し、1本のTCPセッションで並行して複数の問い合わせ・応答を処理できるようになった– クライアントとの互換性に問題がある場合、keep-response-orderでホワイトリスト
Copyright © 2018 株式会社日本レジストリサービス

4

権威DNSサーバー機能関連（2/4）• request-expireの追加– RFC 7314のEDNS EXPIREオプションを付けるか指定する（デフォルトはyes）– オリジナルのexpire時間の代わりに、ゾーン転送元がデータを受け取ってからの時間を知ることができる: 多段でゾーン転送を行っているときに便利
2日前にゾーン転送
SOAのEXPIRE: 14日

example.jp. IN AXFR?
EDNS EXPIRE
example.jp. IN AXFR …

ゾーン転送直後にダウン

EDNS EXPIRE: 12日• max-recordsの追加– ゾーン内のレコード数に上限を設ける（デフォルトは0: 上限なし）

この値をゾーンの賞味期限とする– ゾーン転送を受ける際に、大量のレコードを転送されるのを防げる
Copyright © 2018 株式会社日本レジストリサービス

5

権威DNSサーバー機能関連（3/4）（項目だけ紹介）• DNS RRLが標準で有効化– configure時に--enable-rrlを指定しなくてもよくなった• ゾーンのデータベースバックエンドとしてDynDBに対応• ゾーン設定の動的管理バックエンドとしてLMDBに対応• ゾーン設定をゾーン情報の形で配布できるCatalog Zonesに対応

Copyright © 2018 株式会社日本レジストリサービス

6

権威DNSサーバー機能関連（4/4）（項目だけ紹介）• in-view: viewをまたいだゾーンの共有• masterfile-format（変更）– ゾーンファイルのフォーマットとしてmapが増えた• masterfile-style（追加）– デフォルトはrelative: 以前と同じ形式• serial-update-method（変更）– Dynamic DNSのシリアル番号の形式としてdate（YYYYMMDDnn）が増えた
Copyright © 2018 株式会社日本レジストリサービス

7

ログ関連（1/3）• クエリログフォーマットの変更– 接続元IPアドレス（2001:db8::c:53#23456）の前に、named内部のクライアントオブジェクトID（@0x????????????????）が追加された– EDNSバージョン番号（E(n)）が追加された– DNS Cookieの検証結果（正しい: V、正しくない: K）が追加されたクエリログの例
queries: info: client @0x7f8db039d7a0 192.0.2.254#6278 (example.jp): query: example.jp IN A -E(0)DCV (203.119.40.1)

内部のクライアント
オブジェクトID

EDNS
バージョン
Copyright © 2018 株式会社日本レジストリサービス

DNS
Cookie8ログ関連（2/3）• namedのオプションによるログ出力先ファイル指定– ログ設定がない場合のデフォルトでは、起動直後のログはsyslogに出力していた– namedの起動オプションに「-L (filename)」が追加され、デフォルトのログ出力先としてファイルを指定できるようになった• ログファイル出力のバッファリング– ログのchannel設定にbufferedオプションが追加され、バッファリングを有効にする（ログ出力時に毎回flushしないようにする）ことができるようになった– 異常終了時にログの一部が失われることと引き換えに、性能の向上が期待できる– デフォルトではバッファリングしない

Copyright © 2018 株式会社日本レジストリサービス

9ログ関連（3/3）• ログカテゴリの追加– dnstap: dnstap関連のログ– trust-anchor-telemetry: トラストアンカー情報を通知するクエリを受けたときのログ（ルート以外では通常来ないはず）• dnstap– DNSトラフィックをサーバー側で記録する仕組み– 詳しくは <http://dnstap.info/>

Copyright © 2018 株式会社日本レジストリサービス

10その他（1/4）• tcp-clientsのデフォルト値変更– DNSサーバーとして、同時に受け付けるTCPクライアント接続数の制限– 100から150に増えた• minimal-anyの追加– デフォルトはno– yesに設定すると、UDPでANYクエリを受け取ったときにすべてのレコードを応答する
代わりに、レコード1つとそれに対応するRRSIG（もしあれば）だけ応答する– ANYクエリによるDDoS増幅器になるのを避けるのが目的

Copyright © 2018 株式会社日本レジストリサービス

11その他（2/4）• read-only rndcの追加– named.confに書くrndcのアクセス制御として、read-onlyが指定できるようになった– 特定のrndcクライアントに、サーバーに変更を加えないコマンドだけ許可することができる• rndcコマンド– -r: サーバーからのコマンド結果コードを表示– modzone/showzoneコマンド: addzoneで追加したゾーンの表示と編集– managed-keysコマンド: トラストアンカーの表示や更新– zonestatusコマンド: 読み込み日時、シリアル番号などゾーンステータスの表示

Copyright © 2018 株式会社日本レジストリサービス

12その他（3/4）（項目だけ紹介）• GeoIPデータベースを用いたACLのサポート• EDNS Client Subnetサポート（実験的）• CDSレコード・CDSKEYレコードの自動生成• 統計情報関連（出力形式の変更・追加、項目追加）• configureオプション --with-tuning=large– ソースコード内の定数を高性能サーバー向けに変更– 詳しくは <https://kb.isc.org/article/AA-01314>
Copyright © 2018 株式会社日本レジストリサービス

13その他（4/4）（項目だけ紹介）• ネットワークインタフェースの追加・削除の自動スキャン• HSM対応: PKCS#11のネイティブ対応• lock-file（追加）– ロックファイルによる二重起動防止; 起動時オプション-X (lockfile)でも指定可• message-compression（追加）– CPU使用率を減らすためにDNS名前圧縮をオフにできる; デフォルトはオン

Copyright © 2018 株式会社日本レジストリサービス

14

DNS Cookie （RFC 7873）とは• DNSメッセージの偽装を検知する仕組み– EDNS拡張として小さなデータ（Cookie）を埋め込み、相手からのメッセージに同じものが含まれているか否かで偽装を検知する• クライアントとサーバー両方で相互に確認する– クライアント: 問い合わせメッセージにクライアントクッキーを含めて送り、返ってきた応答メッセージに同じクライアントクッキーが含まれているか確認する– サーバー: 問い合わせメッセージに含まれるサーバークッキーに関して、クライアントのIPアドレス等から妥当性を検証する

Copyright © 2018 株式会社日本レジストリサービス

15

クッキー対応の問い合わせと応答の例
権威DNSサーバー

フルリゾルバー
① 問い合わせ時にクライアントクッキーを付けて送る（サーバー
クッキーは知らない）

Q: www.example.jp. IN A?
cookie: 0x11ff22ee33dd44cc③ 問い合わせ時のクライアントクッキーと照合、一致すれば受け入れ

R: www.example.jp. IN A 192.0.2.80
cookie: 0x11ff22ee33dd44cc
ee33b6cd5b279dfb54d7e372e07b2f3c② サーバークッキーを計算して応答に追加④ サーバークッキーを知っているので、クライアントクッキーと共に送る

Q: example.jp. IN MX?
cookie: 0x11ff22ee33dd44cc
ee33b6cd5b279dfb54d7e372e07b2f3c⑤ サーバークッキーを計算して照合、正当であるか確認⑦ 問い合わせ時のクライアントクッキーと照合、一致すれば受け入れ

R: example.jp. IN MX mail.example.jp
cookie: 0x11ff22ee33dd44cc
5d97f9745b279f4460ec5cc560525c41⑥ サーバークッキーを（nonceを含むため）再度計算して追加

Copyright © 2018 株式会社日本レジストリサービス

16

権威DNSサーバー運用へのインパクト• メッセージサイズの増大– 問い合わせや応答にクッキーが含まれるようになる– 仮にすべてのクライアントがDNS Cookieに対応した場合には、帯域幅が5％程度増加する見込み• サーバーインスタンス間でのserver secretの共有– サーバークッキーは、クライアントの情報（IPアドレス・クライアントクッキー）とserversecret（サーバーだけが知っている秘密情報）から計算される– ロードバランサー配下にいたり、anycastを構成しているサーバーは、同じserver secretを共有している必要がある– RFC 7873ではサーバークッキーの生成に同じserver secretを36日以上使いまわしてはならない（MUST NOT）とされており、頭が痛い
Copyright © 2018 株式会社日本レジストリサービス

17

BIND 9.11.3での対応状況• デフォルト設定では、サーバークッキーが不正でも通常通り扱う• サーバー側でCookieの扱いをオフにする機能がない– ロードバランサーなどで、DNS Cookie未対応のサーバーと混在させるときに困る• ロールオーバー機能がない– 複数のserver secretを指定することができない– ロールオーバー時に、古いserver secretを元にしたサーバークッキーが不正なものとみなされる• BIND 9.11.4で上記の機能不足は解決される見込み– 6月14日に最初のリリース候補版（9.11.4rc1）が公開された
Copyright © 2018 株式会社日本レジストリサービス

18