iPhoneなどを含めてPC類で20個以上、BeagleBone Black(BBB)、Raspberry Pi、Arduino EtherShield、各種USB-WIFIで30個以上の小物のイーサデバイスがあって、さすがにDHCP管理をWeb GUIベースで行うのは面倒になってきた。
ルータのNEC-WR9500N上のDHCPを止めてBBBをDHCP専用サーバとし、CUIベースで管理することにした。昔なら玄箱でやるところである。ついでにLocal Net用のDNS(キャッシュ)サーバも建てて各デバイスの名前解決もやっておきたい。
こういうちっちゃいLANの用途には dnsmasq が最適だと思う。
まず、BBB(staticに10.0.1.2に設定、gatewayは10.0.1.1)で、aptitude install dnsmasq してから、/etc/dnsmasq.confを編集する。
dnsmasq.conf
cache-size=1024
conf-dir=/etc/dnsmasq.d
dhcp-option=option:dns-server,10.0.1.2,10.0.1.1
dhcp-option=option:router,10.0.1.1 #ルータIP
dhcp-range=10.0.1.128,10.0.1.223,150,255.255.255.0,12h
domain=mikan #覚えやすいローカルドメイン名にする
expand-hosts
resolv-file=/etc/resolv.dnsmasq.conf #resolv設定ファイル
resolv関係ファイルの作成と編集
nano /etc/resolv.dnsmasq.conf
cat /etc/resolv.dnsmasq.conf
nameserver 10.0.1.2
nameserver 10.0.1.1
cat /etc/resolv.conf
nameserver 127.0.0.1
mac addressとIPの対応表の作成
/etc/dnsmasq.d/hosts.confを作成して設定。
dhcp-host=(ここにmacアドレスを書く),imac,10.0.1.128,inifinite
....略
dhcp-host=(ここにmacアドレスを書く),orange,10.0.1.202,inifinite
....略
/etc/hostsファイル更新スクリプト
【手順1】/etc/dnsmasq.d/makehosts/hosts.no-dhcpというファイルを作りDHCPを使わないホスト名一覧を書いておく。
cat hosts.no-dhcp
127.0.0.1 localhost
127.0.0.1dnsmasq
10.0.1.2 dnsmasq
10.0.1.3 fs
【手順2】/etc/dnsmasq.d/makehosts/makehosts.shを作る
cat makehosts.sh
#!/bin/sh
cat 'hosts.no-dhcp' > /etc/hosts;
awk -F, '{if(!/#/ && /./) print $3,$2}' ../hosts.conf >> /etc/hosts
sudo ./makehosts.sh すれば、/etc/hostsファイルが更新される。
dnsmasq再起動
service dnsmasq restart
動作チェック
手元のiMacターミナルから dig orange.mikan する。
; <<>> DiG 9.8.5-P1 <<>> orange.mikan
;; QUESTION SECTION:
;orange.mikan. IN A
;; ANSWER SECTION:
orange.mikan. 0 IN A 10.0.1.203
;; Query time: 2 msec
;; SERVER: 10.0.1.2#53(10.0.1.2)