それマグで!

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

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

udhcp でDHCPの割当とルーティングを入れる。

udhcp というDHCPクライアント

udhcp はDHCPプロトコルに基づいて、クライアントリクエストをブロードキャストする。DHCPサーバーを結果を受け取る。

その結果はシェル変数に入った状態で、スクリプトに渡される。

udhcp -i eth0 -s /path/to/script.sh

スクリプト内部でIPアドレスの割当やルーティングを行う。 そのスクリプトは、標準的なものが、/usr/share/udhcpc/default.script で用意されている。

殆どの場合、標準のdefault.script で十分である。ただ、このスクリプトはデフォルトGWやルーティングを書き換えてしまうので注意する。 特に、busybox が搭載されたLinuxルーターの場合、このGWの書き換えが重要になる。VPNなどを利用するときは自分で用意する必要がある。

udhcp を試してみる。

スクリプトを指定して使うudhcp だから、何もしないでecho するスクリプトを用意する。

DHCP 取得値は、変数に入るので変数をECHO する。

呼び出しは、複数回行われる。取得時、リリース時、更新時である。

呼び出しスクリプトを作る

root@OpenWrt:~# vim /root/sample.sh
root@OpenWrt:~# chmod +x /root/sample.sh
/root/sample.sh
#!/usr/bin/env bash
echo "####script start ####"
echo $@
echo -----------
for i in ip mask subnet serverid interface router opt53 ; do
  echo $i=${!i}
done
echo "####script end ####"

udhcp を呼び出す。

root@OpenWrt:~# udhcpc -i vpn_soeth0 -s /root/sample.sh
udhcpc: started, v1.30.1
####script start ####
deconfig
-----------
####script end ####
udhcpc: sending discover
udhcpc: sending select for 10.35.225.152
udhcpc: lease of 10.35.225.152 obtained, lease time 43200
####script start ####
bound
-----------
lease=43200
mask=24
ip=10.35.225.152
router=10.35.225.254
domain=Z3543
dns=10.255.235.20 160.193.8.6
serverid=10.255.235.7
subnet=255.255.255.0
opt53=05
interface=vpn_soeth0
####script end ####
root@OpenWrt:~#

udhcp から引数付きで呼ばれる。

udhcp から、イベントごとに次のように引数付きで呼び出されることがわかる。

## 初期化
/root/sample.sh deconfig
## 割当取得時
/root/sample.sh bound
## 割当取得時
/root/sample.sh renew

参考資料