« IIJのDNSはやっぱり速かった | トップページ | @nifty/e-AccessのDNSが変わっていた »

2014年2月23日 (日)

dhcpstatusでIPアドレスリース状況を確認する(dhcpstatusのCPU100%対策)

RaspberryPiはDHCPサーバを兼ねているので、dhcpstatusを使ってそのIPアドレスリース状況をwebで見られるようにしています。こんな感じで便利。

Dhcpstatus_web

最初、Wheezy-Raspbianに含まれる isc-dhcp-server 4.2.2.dfsg.1-5+deb70u6ではうまく動きませんでした。dhcpstatusがループし、CPU使用率100%となってしまいます。dhcpd.leasesに新しいserver-duidエントリが増えていて、dhcpstatusがこれに対応できないようです。こうなるとkillするしかありませんので、dhcpstatusにちょっと手を加えています。

この対応を含めて手順を残しておきます。
※isc-dhcp-serverとapacheはインストール済みとします。

■ダウンロード
cd
wget http://prdownloads.sourceforge.net/dhcpstatus/dhcpstatus_0.60.tar.gz

■解凍
tar xfvz dhcpstatus_0.60.tar.gz

■ライブラリを解凍
sudo mkdir /usr/local/dhcpstatus
cd /usr/local/dhcpstatus
sudo tar -xvf ~/dhcpstatus_0.60/libraries.tar

■ファイルの確認
ls -l /usr/local/dhcpstatus/dhcpstatus/*.pm
ls -l /usr/local/dhcpstatus/dhcpstatus.ini

■リースファイルその他の場所指定
sudo vi dhcpstatus.ini
----
#conf_file=/etc/dhcpd.conf
conf_file=/etc/dhcp/dhcpd.conf
----
#leases_file=/etc/dhcpd.leases
leases_file=/var/lib/dhcp/dhcpd.leases
----
show_whole_subnet=1
----

■WEBサーバ用のディレクトリ作成とCGIの配布
sudo mkdir /var/www/dhcpstatus
sudo cp -p ~/dhcpstatus_0.60/scripts/dhcpstatus.cgi /var/www/dhcpstatus

CLI実行用のファイルも配布する場合はここも
sudo cp -p ~/dhcpstatus_0.60/scripts/dhcpstatus /usr/local/bin
vi /usr/local/bin/dhcpstatus
----
#!/usr/bin/perl -w
----

■dhpcd.leasesにserver-duidのエントリがあるとループしてしまうことがあるトラブル回避。
sudo vi dhcpstatus_subnet.pm
44行目あたり。太字部分を追加
----
sub get_active_lease_ips {
my %lease_ips;
LEASE:
while (@_) {

if ($_[0] eq "server-duid") { # ignore server-duid statement.(2013/09/26)
while (shift ne ";") {}
next LEASE;
}

if ($_[0] ne "lease") { # ignore anything that isn't a lease.
while (shift ne "}") {}
next LEASE;
}
shift; # move past the "lease" keyword.
my $ip = shift; # get the ip address of the lease.
shift; # move past the opening brace.
LEASE_PARM:
while ($_[0] ne "}") {
----

sudo vi dhcpstatus.pm
159行目あたり。太字部分を追加
----
sub get_active_leases {
use dhcpstatus::Lease;
my $ip_min = shift;
my $ip_max = shift;

my $num_min = &ip2num($ip_min); # numbers are easier to do arithmetic on
my $num_max = &ip2num($ip_max); # than IP addresses.
my %lease;
LEASE:
while (@_) {
if ($_[0] eq "server-duid") { # ignore server-duid statement
while (shift ne ";") {}
next LEASE;
}

if ($_[0] ne "lease") { # ignore anything that isn't a lease.
while (shift ne "}") {}
next LEASE;
}
shift; # keyword "lease".
my $ip = shift;
----

■HTTPの設定
sudo vi /etc/apache2/conf.d/dhcpstatus.conf
----
Alias /dhcpstatus/ /var/www/dhcpstatus/
<Directory /var/www/dhcpstatus/>
DirectoryIndex dhcpstatus.cgi
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
----

■Apacheのcgiハンドラ有効化
sudo vi /etc/apache2/mods-available/mime.conf
----
AddHandler cgi-script .cgi
----

■apacheのリロード
sudo service apache2 reload

■ブラウザからアクセス
http://127.0.0.1/dhcpstatus/

■参考にしたページ
DHCPStatus
DHCPstatus - UNIXサーバメモメモ - FC2

« IIJのDNSはやっぱり速かった | トップページ | @nifty/e-AccessのDNSが変わっていた »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/143173/59183106

この記事へのトラックバック一覧です: dhcpstatusでIPアドレスリース状況を確認する(dhcpstatusのCPU100%対策):

« IIJのDNSはやっぱり速かった | トップページ | @nifty/e-AccessのDNSが変わっていた »

最近のトラックバック

2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
フォト
無料ブログはココログ