/var/log/study

つまり雑記

ISC DHCP から置き換わるであろう Kea の話し 後編

ISC DHCP から置き換わるであろう Kea の話し 後編

Kea DHCPに纏わる話を 、後編という感じで書きます。

本記事は後編です。以下の記事は2017/12/17にwebにある情報を元に記述しています。

前編, 中編の振り返り

  • ISC DHCPの開発が終わってサポートも終わろうとしているよ
  • 今後は Kea というDHCPを開発していくよ
  • Keaは色々便利機能とかがあるけど、特にWebAPIサーバーが生えていて便利!!!
  • 色々APIが生えているよ
  • ドキュメントの類いが充実しているよ

今回書くこと

  • 中編で取り扱わなかったAPIについての言及
  • 有料のhookの存在
  • 最近の開発動向

中編で取り扱わなかったAPIについての言及

中編では主に3つのAPIが生えていると言及しました。また主に設定変更等を含むサーバー操作系のAPIについて言及もしたので、本記事ではそれ以外のリース情報操作系と統計情報閲覧系について言及しようと思います。

  • 設定変更等を含むサーバー操作系
  • リース情報の操作系
  • サーバーが受け取ったパケットの統計情報の閲覧系

リース情報の操作系

http://kea.isc.org/docs/kea-guide.html#lease-cmds に記載があります。利用方法は、 設定ファイルで libdhcp_lease_cmds.so を読み込むだけなのですが、一点注意があり、 Control-Agent の設定には対象のhookを 記載してはいけない という事があります(Dhcp4やDhcp6にだけ記載するということ)。もし両方を読み込むと、リース操作系として使えるAPIは常に、no current lease manager is available というエラーのレスポンスを受け取ることとなります。一応、Control-AgentとDhcp4の両方でhookを読み込んだとしても、標準のAPIには影響が無いことを確認しています。

APIを上手く叩けず、試行錯誤していたらたまたま気づきました。コードを読んでもなぜそうなっているのか?は追えなかったのですが 内部のコンポーネントの一つの LeaseMgr を生成するためのここらへん の処理が不可解な状態になっているのではないかなぁ?と推測しています。

さて注意点を先に記載したのですが、上記APIで出来ることとしては、リースデータベースを操作することです。ここで思い出していただきたいのが、Kea のバックエンドには複数種類の方法を選ぶことが出来る点です。つまりこのAPIで本当に提供したいことはMySQLPostgreSQL, Cassandraを抽象化し、バックエンドにかかわらずリースの情報を操作するインターフェースを提供することとなります。

Note: not all backends support this command.

なんてこっそりと書いてありますが、どのバックエンドでも利用できそうな雰囲気をしています。コードは以下にリンクするので困ったら読めば良いと思います。

出来ることは以下となっています。

  • lease4-add
    • adds new IPv4 lease;
  • lease4-get
    • checks if an IPv4 lease with the specified parameters exists and returns it if it does;
  • lease4-del
    • attempts to delete an IPv4 lease with the specified parameters;
  • lease4-update
    • updates an IPv4 lease;
  • lease4-wipe
    • removes all leases from a specific IPv4 subnet;

個人的には、払い出したIPとmacaddressのリストが欲しいと思うので、lease4-get-all とかのコマンドが欲しいよね?と思ってます。

サーバーが受け取ったパケットの統計情報の閲覧系

http://kea.isc.org/docs/kea-guide.html#stats に記載がありますが、DHCPが受け取ったパケットの統計情報を見ることが出来るAPIが生えています。

利用の仕方は標準APIと同様、設定のjsonでhookは指定せず利用可能ですが、APIを叩く際はサービスを指定することだけ忘れないようにしてください。(Control-Agentに対して(サービスを指定しない状態)でlist-commandsとかをしても統計APIは見えない気がします。)

叩いてみた程度なので、使いみちについてはよくわかってませんが、運用する際は頭の片隅においておくのが良いと思います。

statistic-get-all を叩くと以下の様なレスポンスが返って来ます。たとえば、declined-addresses とかがやたら増えていたら、DHCPとして嬉しくないことが管理配下のサブネットで発生している!とかが分かるんですかね。

[
  {
    "arguments": {
      "declined-addresses": [
        [
          0,
          "2017-12-17 15:24:55.003177"
        ]
      ],
      "reclaimed-declined-addresses": [
        [
          0,
          "2017-12-17 15:24:55.003183"
        ]
      ],
      "reclaimed-leases": [
        [
          0,
          "2017-12-17 15:24:55.003188"
        ]
      ],
      "subnet[1].assigned-addresses": [
        [
          0,
          "2017-12-17 15:24:55.003195"
        ]
      ],
      "subnet[1].declined-addresses": [
        [
          0,
          "2017-12-17 15:24:55.003201"
        ]
      ],
      "subnet[1].reclaimed-declined-addresses": [
        [
          0,
          "2017-12-17 15:24:55.003208"
        ]
      ],
      "subnet[1].reclaimed-leases": [
        [
          0,
          "2017-12-17 15:24:55.003214"
        ]
      ],
      "subnet[1].total-addresses": [
        [
          224,
          "2017-12-17 15:24:55.003159"
        ]
      ]
    },
    "result": 0
  }
]

有料のhookについて

管理者向けのリファレンス に記載がありますが、いくつか有料のhook(plugin)が販売されています。エンタープライズな感じで使いたい会社に向けたライブラリを提供している印象です。

https://www.isc.org/product/kea-premium-hook-library-kea-1-3-package/ で購入することが可能で、$499だそうです。

  • legal_log: Forensic Logging Hooks
    • たぶん監査とか用のログを出力するライブラリ
  • host_cmds: Host Commands
    • staticにipを割り振るためのライブラリ
    • 標準のAPIでも出来ることは出来るのですが、効率よく処理を行うためのライブラリとなります。
  • flex_id: Flexible Identifiers for Host Reservations
    • こちらもstaticにipを割り振るためのライブラリ
    • 何を持ってipを割り振るか?を柔軟にするヤツっぽい

また Currently this library is only available to ISC customers with a support contract. という形で以下のライブラリも扱っているようです。

  • subnet_cmds: Subnet Commands
    • サブネットを操作するためのライブラリ
    • 標準のAPIでもサブネットを操作することは可能なのですが複数のサブネットを効率よく操作するものだと思います。

最後に開発最近の動向

では最後に少しだけ最近のKeaの開発動向についてを触れて終わりにしたいと思います。

半年ほど前に1.2.0, 先月くらいに1.3.0, 半年くらい先に1.4.0が予定されている状態です。

http://kea.isc.org/wiki/KeaReleaseNotes120 とか https://www.isc.org/blogs/kea-1-3-released-take-it-for-a-spin/ とか http://kea.isc.org/milestone/Kea1.4 が元ネタです。

  • 1.2.0
    • いくつかの DHCPオプションに対応した
    • Control-Agentが追加されてhttpなAPIが叩けるようになった
  • 1.3.0
    • lease_cmd.so が付属するようになった
      • 上記のhookを読み込むとhttpなAPIでリースを操作可能となった
    • Control-Agentをhttpsで叩ける様になったとのこと
  • 1.4.0
    • High Availability と呼ばれる機能が開発中
    • Radius と呼ばれる認証認可のプロトコルに対応しようと考えている
    • 実はCassandraの対応が実験的機能なので、改善しようと考えている
    • Migration Assistantを作ろと考えている
      • ただし、Keaの機能ではなくWebサービスで実装しようと思っている

前後のバージョンの状態を見るに、KeaのDHCPとしての改善は若干落ち着いてきており、より運用を楽にするための改善、ISCとのコンパチビリティとマイグレーションをどの様にしていくか?に主眼が置かれつつあるのかな?という気がします。

まとめ

Kea DHCPに纏わる話を 、後編という感じで書きました。

クラウドの台頭により、需要が減っているプロトコルミドルウェアなのかもしれませんが、今後DHCPを新規で立てる際は、残り何年もないISC DHCPより、Keaを選択する人がこの記事によって増えたらと思います。

また前中後に分割しても書ききれなかった知見や、Keaをプロダクションに持っていくためのスクリプトを書いていたりするのがあるので、それはそれで、また機会があれば纏めて書き残したり公開したりしたいと思っていますので、今後共よろしくお願いいたします。