とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

DHCP(dnsmasq)のIPリース情報をブラウザで表示する

はじめに

我が家では家庭内DHCPとしてdnsmasqを利用しています。


DHCPでリースされたIPアドレスを確認するには、サーバへSSHでログインし dnsmasq.leases のファイル内容を確認しますが、
毎回サーバへログインするのが面倒になってきました。


そこで、WEBサーバを立ち上げてDHCPのIPリース状況をWEBブラウザから簡単に確認できるようにしました。


先行事例
先行事例をgoogleで簡単に調べましたが特に見つかりませんでした。
探している時間が勿体ないのでさっさと作りました。

方針

  • DHCPのリース情報が書かれている、以下ファイル内容をWEBブラウザから確認できるようにする。
    • /var/lib/dnsmasq/dnsmasq.leases
  • httpサーバはDHCP(dnsmasq)をインストールしているサーバに構築する。
  • 今回は目的が単純なので重装備のapacheは利用せずにpythonのウェブサーバ機能を利用する。
  • 家庭内LANで利用するのでセキュリは後回しにします、まずは最速最短でサーバを構築し運用を開始する。

作成したWEBスクリプト

$vi /var/www-py/cgi-bin/index.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

print('Content-type: text/html; charset=UTF-8\r\n')
print('<H1>%s</H1>\n' % "dnsmasq.leases")

f=open("/var/lib/dnsmasq/dnsmasq.leases", "rt")
try:
  for line in f:
    print(line.strip() + "<br>\n")
finally:
  f.close()
スクリプトを実行できるように権限を付与する
$ ls -l /var/www-py/cgi-bin/index.py
-rwxr-xr-x. 1 root root 121  612 15:13 /var/www-py/cgi-bin/index.py

実行方法

#ファイヤウォールのポートを空ける
#webサーバが起動しているときだけポートを空けたいので --permanent は付けない。
#ファイヤウォールの制御は後述でスクリプトにします。
$firewall-cmd --add-port=8000/tcp --zone=public
$firewall-cmd --reload

#サーバの起動
$cd /var/www-py
$python -m CGIHTTPServer 8000

#ctl-z で終了します。

WEBブラウザで確認する

プライベートな情報は伏せています。(殆ど黒塗りだな・・・)

サービス化する

OS起動時にWEBサーバを自動起動できるようにサービスを作ります。

サービスの設定ファイル

$vi /usr/lib/systemd/system/www-py.service

[Unit]
Description=www-py server.
After=dnsmasq.service firewalld.service

[Service]
Type=simple
ExecStartPre=/var/www-py/service/start StartPre
ExecStart=/var/www-py/service/start Start
ExecStopPost=/var/www-py/service/start StopPost

[Install]
WantedBy=multi-user.target
サービスから呼ぶスクリプトファイル

サービスが起動しているときだけFirewallのポートを空けたいので、firewall-cmdコマンドに --permanent オプションは付けません。

$vi /var/www-py/service/start

#!/bin/bash

if [ "$1" = "StartPre" ] ; then
  firewall-cmd --add-port=8000/tcp --zone=public
elif [ "$1" = "StopPost" ] ; then
  firewall-cmd --remove-port=8000/tcp --zone=public
elif [ "$1" = "Start" ] ; then
  cd /var/www-py/
  python -m CGIHTTPServer 8000
else
  echo "Unknown arg. arg=$1"
fi
ファイルのアクセス権
ls -l  /var/www-py/service/start
-rwxr-xr-x. 1 root root 105 Jun 12 20:36 /var/www-py/service/start
仕上げ
#サービスを起動&停止して
$systemctl start www-py
$systemctl stop www-py

webサーバのプロセスが残っていないか確認します。
$ps -aux | grep python

#サービス起動時にポートが開き、終了時にはポートが閉じているか確認します。
$firewall-cmd --list-ports --zone=public

#問題なければOS起動時にサービスを読み込むようにします。

$systemctl enable www-py

環境

Raspberry Pi3 b

$uname -a
Linux foo-bar.local 4.9.80-v7.1.el7 #1 SMP Thu Mar 15 13:29:03 UTC 2018 armv7l armv7l armv7l GNU/Linux

$ cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

$ python --version
Python 2.7.5