0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DHCPサーバーkeaでクラスレス静的経路の配布

Last updated at Posted at 2025-01-31

はじめに

isc-dhcpd から kea に移行してしばし経つが、クラスレス静的経路(RFC3442)の機能だけ移行しきれず、ごまかしながら運用していたが、じっくり調査する機会ができたので調べてみた。結論はシンプルだった。

検証環境

  • FreeBSD/amd64 14.2-R
  • kea 2.6.1 ※2.5.5 以降であることを確認

動作検証環境

  • isc-dhcpd 由来の dhclient を採用しているOSならほぼ(分岐した時期による)。
    • FreeBSD/amd64 14.2-R など。
    • 今時のいくつかの Linux Distribution でも確認している(セットアップしてまでの動作確認は未実施)。
    • 期待通りコード121(Classless static route)の設定を優先してくれる。
  • Windows 11 Pro 24H2
    • コード121(Classless static route)は認識してくれる。
    • コード3(Router)とコード121のデフォルトルーターを両方設定してしまう(イコールパス?)。
    • コード3を無視しないという振る舞い以外はほぼ期待通り。
  • Apple iPhone 16 Pro / iOS 18.3
    • コード121(Classless static route)は認識してくれる。
    • コード3(Router)があるとそちらが優先される。※微妙
    • 静的経路の確認できないので設定が効いてるかは不明。
  • Google Pixcel 6a / Android 15
    • コード121(Classless static route)を認識してくれない。
    • 結果コード3(Router)しか認識されない。
    • 静的経路の確認できないので仮に設定が出来たとしても確認できるかは不明。
  • Sony ILCE-1(α1)/ Ver. 3.00
    • コード121(Classless static route)を認識してくれない。
    • 結果コード3(Router)しか認識されない。
    • このことから組み込み系は警戒した方がいい。

設定ポイント

単純にコード3(デフォルトゲートウェイの配布)と同じ設定を目指すなら、下記のように表現します。

    {
        "name": "classless-static-route",
        "data": "0.0.0.0/0 - 192.168.0.1"
    }
  • name"classless-static-route" の固定。
  • data"サブネットアドレス - ゲートウェイIP"

複数の経路を指定する場合は , で区切って指定します。

    {
        "name": "classless-static-route",
        "data": "0.0.0.0/0 - 192.168.0.1, 192.168.1.0/24 - 192.168.0.1"
    }

空白の有り無しについては評価していないですが、見やすさとのバランスを考慮すると、上記バランスで書くのが重要かと。

過去情報についての注意喚起

以下の過去の話です、設定すると有害です。具体的にはエラーになります。

  • option-def"code": 121 なレコード定義しろ
  • uint8,ipv4-address な指定する
  • "0, 192.168.0.1, 24, 192, 168, 1, 192.168.0.1" な指定とか

Q.いつからこの設定ができるようになったのですか?

A.ソースコードの変更差分を追ってみると 2.5.5 (2024/01/31)からです。
機能追加リクエストがあり、実装されました。

2.5.4 以下では過去の設定が機能するかもしれません(自分は上手く動かせなかったので未確認)。

よくある質問とその答え

Q.isc-dhcpd とか kea って?

ISC(Internet Systems Consortium)が作ったDHCPサーバーです。古くから isc-dhcpd が一般的に使用されていましたがサポートは終了、後継の kea の使用が推奨されています。

Q.isc-dhcpd と kea の話を区別する方法は?

A.ISCやDHCPというキーワードだけなら、isc-dhcpd の話をしている可能性があります。KEAなら kea と書いてるケースが多いです。
設定ファイルを見て、セミコロンで列挙するタイプであれば isc-dhcpd、JSON形式(亜種)であれば kea であると区別できます。

Q.何か嬉しいの?

A.LANが1ポートしかないケースで嬉しいことはあんまりないです。複数ポート持ってて、それぞれのポートの先に違うサブネットワークがあるようなケースで、動的ルーティング運用するまでもないネットワークを運用するような場合、DHCPクライアント側の設定が楽になります(基本何も気にしない)。
これはルーティング情報の配布をDHCPサーバー側に集約させることができるからです。

A.この機能を要望した人によれば

冗長的なIPSec接続性を有する複雑なエンタープライズメッシュVPN構成において、DHCPサーバーからネットワークトポロジに関するヒントを提供する必要がある場合があります。
この機能により、メッシュ内のさまざまなアイランドへのCIDR経路を提供しやすくなります。

とのこと。必要な所では必要と認識されています。

Q.何を調べたの?

コード121(Classless static route)はコード3(Router)の上位互換機能となります。コード121はコード3より優先的に解釈することが求められます。コード3を実装していないDHCPクライアントは存在しませんが、コード121の方は一般的で無いため、実装の状態を確認する必要があります。

実際、サーバーユースでコード121に対応していないOSはあまり見ません(今回動作検証確認としては少ないです)が、組み込み系はどこまで頑張ってるか不明なため、確認する必要があります。

Q.isc-dhcpd 由来の dhclient とは?

A.isc-dhcpd の中に dhclient が配布されていましたが、各OSでこれを取り込み、独自に進化しています。
中には完全に置き換えたOSもあるかもしれませんが、細かくは追っていません。

Q.他の資料を読んでいるとオプションと言ってるけど、コードと何が違うの?

A.DHCPでは、やり取りする情報をオプションという形でサーバー・クライアント間で必要となる情報のやり取りをします。また各オプションではコードによりその意味が定義されています。
よってオプションはコード+データ的な意味合いがありますが、結局は伝えるべき内容の話なので、だいたいは同じ意味を指しています。
例: オプション121≒コード121

参考文献

ドキュメントが無いのなんで?(怒) option-def でオーバーライドできないというエラーが出るから…で調査始めて、更にコード見たら、コメントに書き方書いてあるのは助かったけど、そこで閉じてるのは大問題だと思うよ。
究極的には機能追加要望(イシュー)にしか情報が無いかと。検索でこの情報に到達できないの、よろしくない。

追記: all-options.json に全て書いてあるというツッコミを受けて調べたところ、// でコメントでJSON?と思いつつ、これをドキュメントと言い張るには…。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?