それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openwrt で hotplug dhcp を調べる

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の章を読んでみたが、記載がない

OpenWrt Wiki / 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はログイン画面に飛ばすとかね。