はじめに
isc-dhcpd から kea に移行してしばし経つのだが、クラスレス静的経路(RFC3442)の機能だけ移行しきれず、ごまかしながら運用していたのですが、じっくり調査する機会ができたので、調べてみた。結論はシンプルだった。
検証環境
- FreeBSD/amd64 14.2-R
- kea 2.6.1 ※2.5.5 以降
動作検証環境
- ISC由来の
dhclient
を採用しているOSならほぼ(分岐した時期による)。- FreeBSD/amd64 14.2-R など。
- 今時のいくつかの Linux Distribution でも確認している(セットアップしてまでの動作確認は未実施)。
- 期待通りコード121(Classless static route)の設定を優先してくれる。
- Windows 11 Pro 24H2
- コード121(Classless static route)は認識してくれる。
- コード3(Router)とコード121のデフォルトルーターを両方設定してしまう(イコールパス?)。
- 他のサブネット情報は反映されてないように見える(再起動しないとダメ?)。
- 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.何か嬉しいの?
A.LANが1ポートしかないケースで嬉しいことはあんまりないです。複数ポート持ってて、それぞれのポートの先に違うサブネットワークがあるようなケースで、動的ルーティング運用するまでもないネットワークを運用するような場合、DHCPクライアント側の設定が楽になります(基本何も気にしない)。
これはルーティング情報の配布をDHCPサーバー側に集約させることができるからです。
A.この機能を要望した人によれば
冗長的なIPSec接続性を有する複雑なエンタープライズメッシュVPN構成において、DHCPサーバーからネットワークトポロジに関するヒントを提供する必要がある場合があります。
この機能により、メッシュ内のさまざまなアイランドへのCIDR経路を提供しやすくなります。
とのこと。必要な所では必要と認識されています。
Q.何を調べたの?
コード121(Classless static route)はコード3(Router)の上位互換機能となります。コード121はコード3より優先的に解釈することが求められます。コード3を実装していないDHCPクライアントは存在しませんが、コード121の方は一般的で無いため、実装の状態を確認する必要があります。
実際、サーバーユースでコード121に対応していないOSはあまり見ません(今回動作検証確認としては少ないです)が、組み込み系はどこまで頑張ってるか不明なため、確認する必要があります。
参考文献
- Support for option 121 (classless-static-routes) is needed
- src/lib/dhcp/option_classless_static_route.cc
- doc/examples/kea4/all-options.json
ドキュメントが無いのなんで?(怒) option-def
でオーバーライドできないというエラーが出るから…で調査始めて、更にコード見たら、コメントに書き方書いてあるのは助かったけど、そこで閉じてるのは大問題だと思うよ。
究極的には機能追加要望(イシュー)にしか情報が無いかと。検索でこの情報に到達できないの、よろしくない。
追記: all-options.json
に全て書いてあるというツッコミを受けて調べたところ、//
でコメントでJSON?と思いつつ、これをドキュメントと言い張るには…。