DHCPLEASEQUERY
今週は珍しく比較的外出が少なかったため「たまにはプログラミングを!」と、ProDHCPの機能追加をやってみました。
1年ほど前にJANOG39でDHCPに関するプレゼンを行ったのですが、本番に向けての事前ミーティングでDHCPLEASEQUERYの話題になりました。ProDHCPは、欲しいと言われれば大抵すぐに実装するのですが、DHCPLEASEQUERYを使う案件がなかったので実装していませんでした。
DHCPLEASEQUERYはRFC4388で仕様がまとめられており、簡単に言えば、リース情報の問い合わせをする為の仕組みです。DHCPサーバへのリクエストは、基本的にはクライアントが、DHCPサーバにIPアドレスの払い出しを求めたり、DHCPサーバからネットワーク設定に関する情報を求めたりするものなのですが、DHCPLEASEQUERYはクライアントがリクエストするわけではなく、ルーターなどがリース情報の問い合わせをするための仕組みです。
何に使うかといえば、ルーターがクライアントのフィルタリングに使うという感じでしょう。固定IPアドレスのクライアントには通信をさせず、DHCPサーバから払い出されたIPアドレスを使うクライアントのみ許可するというような使い方をするようです。
もともとProDHCPでは別の仕組みでリース情報の問い合わせができるようにしていましたが、一応、RFC4388に対応しておこうと機能追加を行いたかったのです。
自分では「半日もあればできるだろう」と思っていたのですが、実質まる1日分くらいかかりました。DHCPLEASEQUERYでは、IPアドレスを指定してリース情報を得る場合は良いのですが、MACアドレスやクライアントIDを指定してリース情報を得ることもでき、その場合は複数のリース情報が見つかる場合があります。DHCPLEASEQUERYでは払い出し中のみを探せば良いのですが、リリースせずにセグメントを移動した場合などにそうなります。その場合の処理などを作っていたらさすがに半日では無理でした。
op=2:BOOTREPLY
htype=1:HTYPE_ETHER
hlen=6
hops=0
xid=1521218560
secs=0
flags=0
ciaddr=192.168.33.1
yiaddr=0.0.0.0
siaddr=0.0.0.0
giaddr=192.168.33.212
chaddr=02:00:00:00:00:01
sname=your server name
file=
options
53:DHCP message type:1:13:DHCPLEASEACTIVE
54:server identifier:4:192.168.33.211
58:renewal (T1) time value:4:4920
59:rebinding (T1) time value:4:8670
51:IP address lease time:4:10000
61:client-identifier:7:01:02:00:00:00:00:01
91:client last transaction time:4:391
92:associated ip:16:192.168.111.50,192.168.34.50,192.168.33.50,192.168.33.2
255:end
こんな感じのレスポンスが得られます。リース中のものが見つかればDHCPLEASEACTIVEで、ciaddrに最新の割り当て中IPアドレスが、他にもあればOption92に残りが入ります。あまり使いやすい感じではないですね。なかなか面白いのは、Option91の最終トランザクション時間で、何秒前に最後のやりとりがあったかが返ります。
ちなみに、1日でできるのになぜ1年も間が空いたのか?というのは、プログラマーなら簡単に分かると思いますが、プログラミングをやらない人だとなかなか理解しにくいものだと思います。プログラミングは簡単なものはともかく、ある程度頭を使わないとならないものは、ソースコードを書いている時間よりも、考えている時間の方が大変です。頭の中に既存のソースコードの処理が展開され、それに追加する処理をどう組み込むかを考えるのですが、この時間に割り込みがあったりで集中できないとろくなことになりません。緊急の場合は追い詰められた感じから超人的な集中力で乗り切れますが、いつかやれば良いというレベルの場合は、集中して考える時間を取るタイミングが取れないと、出来上がらないばかりか元の処理もボロボロにしてしまう恐れがあります。一応社長ですので、メンバーからの相談もありますし、お客さんからもたくさんメールが来ますし、他にもいろいろやらねばならないことがあると、あっという間に1年経ってしまうわけです・・・。
めでたく新しい機能が増えたProDHCPはVer.14.9となりました。13年開発を続けていますが、ますますユーザも増えており、開発者としては嬉しい限りです。開発したものが役に立つのがなによりの喜びですね。