openwrt で hotplug dhcp を調べる
DHCP に何が書かれるか、どういうタイミングでホットプラグが呼ばれるのか全然わからないので調べることにした
調査用のファイルを作成
cat << "EOF" > /etc/hotplug.d/dhcp/00-logger logger -t hotplug $(env) EOF
調査する
logread -f
ネットワークを再起動する
service network restart
hotplug のdhcp は公式ページにも記載がない。
公式ページのHotplugの章を読んでみたが、記載がない
実行結果が次の通り
調査してみた結果次のような変数が得られた
Wed May 15 17:21:04 2024 user.notice hotplug: ACTION=update IPADDR=10.0.2.105 SHLVL=1 HOME=/ MACADDR=44:07:0b:5a:bc:b3 TERM=linux BOOT_IMAGE=/boot/vmlinuz PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/ Wed May 15 17:21:04 2024 user.notice hotplug: ACTION=add HOSTNAME=Google-Home-Mini IPADDR=10.0.2.103 SHLVL=1 HOME=/ MACADDR=38:8b:59:4a:11:fe TERM=linux BOOT_IMAGE=/boot/vmlinuz PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/ Wed May 15 17:21:04 2024 user.notice hotplug: ACTION=update IPADDR=10.0.2.105 SHLVL=1 HOME=/ MACADDR=44:07:0b:5a:bc:b3 TERM=linux BOOT_IMAGE=/boot/vmlinuz PATH=/usr/sbin:/usr/bin:/sbin:/bin PWD=/
つまり、次の変数が取れている。
ACTION=add HOSTNAME=Google-Home-Mini IPADDR=10.0.2.105 SHLVL=1 HOME=/ MACADDR=44:07:0b:5a:bc:b3
また、UPDATEのときは、ホスト名がないことがわかる。
ACTION=update IPADDR=10.0.2.105 SHLVL=1 MACADDR=44:07:0b:5a:bc:b3
変数まとめ
変数 | 値 | 役割 |
---|---|---|
ACTION | update | DHCPの更新リクエスト |
ACTION | add | DHCPの取得リクエスト |
IPADDR | 0.0.0.0 | 紐づけたアドレス |
MACADDR | 00:00:00:00 | 紐づけたMACアドレス |
SHLVL | int | シェルのネスト |
SHLVL はシェルのネスト度合いなので、hotplug がhotplug を呼び出して重複起動しないために重要なので掲載。
DHCPのホットプラグまとめ
コレを使えば、特定のDHCPクライアントが来たときに、ルーティングテーブルを書くような離れ業(荒業)が可能になる。
例えば、未登録のMACADDRはログイン画面に飛ばすとかね。