dhcpstatusでIPアドレスリース状況を確認する(dhcpstatusのCPU100%対策)
RaspberryPiはDHCPサーバを兼ねているので、dhcpstatusを使ってそのIPアドレスリース状況を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が変わっていた »
この記事へのコメントは終了しました。
コメント