それマグで!

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

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

udhcpc で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

スクリプトを指定する理由

なぜ、スクリプトを指定するのか。省略可ではないか。

省略可だけど、問題がある。とくにVPN

スクリプト指定を省略すれば、通常のDHCPになる。

インターフェースだけ指定をすれば、通常DHCPとして動く。

udhcpc -i eth0 

このとき実行されるのは次のファイル

/usr/share/udhcpc/default.script

ただし、これは、デフォルトGWをガッツリ書き換える。

VPN 時に面倒くさい。

udhcpc を使うと、DHCP時に defaultが切り替えが起き、ネットワークが切断される

また、中途半端に書き換えるので、設定次第では、default 経路が代わりVPN経路がなくなり通信ができなくなる。

また、切断時のもとのデフォルトGWに戻せな無い。

これらの、VPN Routing を明示的に行うために、スクリプトを使う。

スクリプトの書き方は /usr/share/udhcpc/default.script を参考に、ルーティング・NAT転送・ポート閉塞・ポート解放などを書く。

udhcpc を使いLANとルータに接続する以外で使う、とくにVPNの場合スクリプトが必須である。

参考資料