udhcpd
BusyBoxのみでdhcpdを構築できます。
dnsmasqと違い、自身がDNSサーバーになる機能はありませんが接続するクライアント端末にIPアドレスを配布できます。
また、dnsmasqの場合は複数のインターフェイスに対応しますが、udhcpdの場合は一つのインターフェイスにしか対応しないためeth1とwlan0の両方にIPアドレスを配る場合に2つ設定して起動する必要があります。
Busybox
Networking Utilities --->
[*] udhcpd
をチェックしてビルドすれば有効になります。
/etc/udhcpd/wlan0.conf
#pidfile /var/run/udhcpd-wlan0.pid
lease_file /var/lib/misc/udhcpd-wlan0.leases
start 192.168.3.2
end 192.168.3.50
interface wlan0
opt dns 8.8.8.8 1.1.1.1
opt subnet 255.255.255.0
opt router 192.168.3.1
wlan0用の設定ファイルはこんな感じにしました。
自身がDNSになることはできませんが、設定したDNSアドレスを通知することはできます。
lease_fileでリース中のアドレスを記録するファイルを指定しますが、ファイルが存在しない場合エラーになるので起動前に作成する必要があります。
pidfileを指定できるはずなのですが、手元では指定してもしなくてもpidファイルが作成されませんでした。
# touch /var/lib/misc/udhcpd-wlan0.leases
# udhcpd /etc/udhcpd/wlan0.conf
の様にlease_fileを作成したうえで設定ファイルを引数として起動します。
/etc/network/interfaces
auto wlan0
iface wlan0 inet static
address 192.168.3.1
netmask 255.255.255.0
post-up wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf
post-up touch /var/lib/misc/udhcpd-wlan0.leases
post-up start-stop-daemon -S -b -m -p /var/run/udhcpd-wlan0.pid -x udhcpd -- -f /etc/udhcpd/wlan0.conf
pre-down start-stop-daemon -K -p /var/run/udhcpd-wlan0.pid
pre-down killall -q wpa_supplicant
インターフェイス毎に起動する必要があるので/etc/network/interfacesで起動設定をしました。
起動前にtouchでリースファイルを作成しています。pidfileももしかしたら事前作成が必要なのか?
udhcpd単体でpidファイルが作成されなかったのでstart-stop-daemonでpidファイルを作成して個別にkillできるようにしました。
udhcpdは通常起動するとバックグラウンドで動作しますが、start-stop-daemonを通すため-fオプションをつけてフォアグラウンド起動にしました。