メンバー: 山本 和彦, 日比野 啓

カテゴリー:

タグ: , ,

  1. 背景:DNSを取り巻く環境は常に変化しており、DNSプロトコルの検証に利用できる独自のDNSフルリゾルバが望まれている。
  2. 目的:IIJ独自のDNSフルリゾルバを実装する

概要

Haskellで bowline というフルリゾルバを開発している。bowline は、DNS over UDP、TCP、TLS、QUIC、HTTP/2 および HTTP/3 をサポートしている。

成果

進捗

2025FY2Qの進捗

  • 機能拡張: local-data で SVCB 記述をサポートし、簡易的に DDR (RFC 9462) に対応した。またクライアント向けの TC bit に対応した
  • 堅牢性: DoT、DoH のクライアント・セッション・スレッドの例外処理を強化することで堅牢性を向上した。また、GHC eventlog に対応し、アプリケーション、ランタイムに関わるデバッグ効率を向上した
  • bowlineやdugのサイトを立ち上げ、ドキュメントを充実させた

2025FY1Qの進捗

  • dug: サーバ証明書と指名関係を検証できるようにした。並列実行時に、再接続のための情報が正しく保存されるようにした。
  • ddrd: LinuxでDDR(Discovery of Designated Resolvers)を利用できるようにするためのデーモンを開発した。
  • パブリックリリース: サイトを立ち上げ、マニュアルを整備し、dug/ddrdをリリースした。
  • バグ修正: TXTレコードの解釈の誤りを修正した。
  • 攻撃耐性: DNSメッセージエンコード時の、文字列長の桁溢れを検査し、圧縮回数を制限することで攻撃耐性を向上した。
  • 拡張性: Tagless-Final方式により、ゾーンファイル/設定ファイルの解釈、反復検索記述ロジックの拡張性と再利用性を向上した。

2024FY4Qの進捗

  • bowline の運用機能の拡充: 運用現場の要望に応えて、モニタのkeepalive化、NSID/id.server/version.serverの機能追加、ネガティブトラストアンカーの機能追加を行い、DNSSEC検証結果のカウンタを実現してmetricsへの追加を行った。
  • bowline の安定化: TCP53のVirtual Circuitのサーバーのバッファ管理の問題を修正することにより、通信の安定性を向上させた。また、設定ファイル解釈を事前に行うことで、reload失敗時もサービスを継続できるよう安定化させた。さらに、root権限が必要な処理の分離し、必要なときのみ root 権限を回復する方式によって、reload機能とユーザー変更機能の競合を解消した。

2024FY3Qの進捗

  • bowline の可用性の改善: 反復検索において、すべての NS に対してフォールバックを行ない、解決できる場合を増やした。その際、権威サーバへの攻撃とならないようにするために、反復検索内のクエリ回数を制限した
  • 不具合修正: テストで発見された次の問題を修正した。応答用のエラーコード読み替え、NSEC/NSEC3 レコードのキャッシュ、応答 AD flag の対応

2024FY2Qの進捗

  • bowline の通信安定性の改善: 中間のNATが頻繁にポートを変更する環境でも、リゾルバと安定した通信を可能とした
  • bowline の運用機能の改善: 提供するメトリックス情報を強化した
  • bowline の安定性の改善: STM(Software Transactional Memory) のトランザクションを用いてクライアント向けのセッション状態の決定性を向上したことにより、リソース管理を明確化した. また、ランダムテストにより、セッション状態管理用 STMトランザクションの頑健性を向上した
  • dug のリリースと紹介記事: dug を紹介するIIJエンジニアブログを書いた。それに合わせて、dug を複数回リリースした

2024FY1Qの進捗

  • bowline の改善: 評価中に発見した問題を解決し、またCheckDisabledフラグ、キャッシュの削除など新たな要望に対応した
  • dug の改善: TLS、QUIC、HTTP/2、HTTP/3でセッションの再開と0-RTTができるようになった。また、QUIC や TLS のハンドシェークモードなどの情報を出力の最後に表示するように変更した。NSEC/NSEC3 の検証情報出力を強化した

2023FY4Qの進捗

  • パイプラインのテスト: dug コマンドに対して、DNS over TLS/QUIC/H2/H3のパイプライン機能を組み込んだことにより、フルリゾルバ bowline のパイプライン機能がテストできるようになった
  • ローカルゾーンデータ対応: ゾーンデータの解釈によって、ローカルゾーンおよび、ルートヒント、トラストアンカーが定義できるようになった。
  • 脆弱性対策: 入力サイズおよび検証回数の制限によって、KeyTrap攻撃に対する計算量を低減できるようになった

2023FY3Qの進捗

  • 下位ライブラリTLS、HTTP/2、QUICの安全性の向上
  • 入れ子反復検索キャッシュと否定キャッシュの条件緩和による応答入れ子反復検索キャッシュと否定キャッシュの条件緩和による応答性能の向上

2023FY2Qの進捗

  • キャッシュサーバのテスト運用に向けた機能強化
    • トランスポート層の拡充 (TLS、QUIC、HTTP2、HTTP3)
    • DNSTAPを使ったロギング機能の実装
    • サーバー管理のためのWeb APIの実装
    • 監視のための Prometheus へ対応
    • 否定応答の DNSSEC 検証機能 (NSEC/NSEC3) の組み込み
  • 反復検索およびDNSSEC の問題の修正
    • 必要のない DS クエリを発行しないよう修正
    • RRセット正規化の問題の修正 (TTL復元、正規順序)

2023FY1Qの進捗

  • 開発中のフルリゾルバ実装への DNSSEC 検証機能の組み込み
    • 反復検索時の委任情報の暗号鍵の署名(DS)検証機能
    • 結果レコードの署名(RRSIG)検証機能
    • 親子ゾーン同居ケースのフォールバック機能(“.” と “arpa.” 等)
    • 検証結果(成功、失敗、検証無し)のログ出力
  • デモを目標とした機能強化
    • SVCBからトランスポート(QUIC、TLS、H2、H3)を選択し、それを使って名前解決
    • フルリゾルバの動作(反復検索)の可視化
    • DNSSECの結果をカラーで表示
    • Open Houseで使用

2022FY4Qの進捗

  • DoX(DNS over HTTP/2, HTTP/3, TLS, QUIC) の実装
  • SVCB RRに従ったDoXの自動選択
  • Power Safe なキャッシュ失効化と読み取り効率の両立
  • DNSSEC 検証付き root-priming

2022FY3Qの進捗

  • 拡張可能DNSライブラリの開発を継続
    • HTTPS RR、SVCB RRの実装
    • DNS over HTTP2/HTTP3、DNS over TLS、DNS over QUICの実装
    • ドメイン用のデータ型の洗練化
    • 既知の攻撃に対する耐性を確認
  • DNSSEC の基本的な検証機能をDNSライブラリに追加
    • 暗号鍵 (DNSKEY RR) の検証 (DS RR)
    • リソースレコードの検証 (RRSIG RR)
    • ドメイン不在証明 (NSEC3 RR、NSEC RR)

2022FY2Qの進捗

  • 実用性を高めるための調整
    • unbound等、既存の実装との互換性の検証と修正
    • 並列実行性能の検証
  • DNSキャッシュサーバの機能拡張
    • キャッシュヒット率の計測機能
    • DNSSECの検証機能の追加のための調査
  • DNSライブラリの再実装
    • コアライブラリの変更なしでリソースレコード(RR)を拡張可能
      • 今後 SVCB RR と HTTPS を拡張する予定
    • 長期間RRをキャッシュしてもメモリの断片化を起こさない

2022FY1Qの進捗

  • DNSキャッシュサーバの開発
    • 反復検索機能とキャッシュ機能をサーバー化
    • ネガティブキャッシュを RFC2308 を参考に実装
  • 実用性を高めるための調整
    • スレッドまわりの整理
    • キャッシュのサイズが破綻しないように制限

PAGE TOP