なんでもできるRaspberry PiでDHCPサーバーを構築します。
DHCPサーバとは、インターネットなどのネットワークに一時的に接続するコンピュータに、IPアドレスなど必要な情報を自動的に発行するサーバ。ネットワーク設定を手動で行わなくてもすぐに適切な設定で接続することができ、ネットワークの設定に詳しくないユーザでも簡単に接続できる。
IT用語辞典
今回はDHCPサーバーソフトとして、ISC DHCP Serverというものを使います。このソフトはかなり老舗で有名らしいです。
基本的に、Raspbianのインストールとセットアップは完了しているものとして話をすすめます。初期設定編はこちらの記事を参照。
以下、RaspberryPiへ、SSH接続しているものとして進めます。
導入編
ルートになります。もしくはsudoコマンドを使ってスーパーユーザー権限で今後の作業を行ってください。
su -
サーバーソフト ISC DHCP Server をインストールします。
apt-get -y install isc-dhcp-server
設定編
初期設定
無事に、インストールが終われば、/etc/dhcp/dhcpd.confを編集します。
vi /etc/dhcp/dhcpd.conf
13行目の
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
を、シャープ#でコメントアウトします。
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
21行目、#authoritative;のコメントを外します。
#authoritative;
を
authoritative;
へ変更します。
16.17行目
default-lease-time 600;
max-lease-time 7200;
は、それぞれ、IPをリースする標準時間600秒、リースする最大時間7200秒という設定になっています。お好みで変更します。
基本設定
ここから、やっと基本設定です。一番下の行に、次のように書き加えます。ここで書く環境は、私が使っている環境に基いているので、お好みで変更してください。
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.99;
default-lease-time 600;
max-lease-time 7200;
option routers 192.168.0.1;
option domain-name "local";
option domain-name-servers 192.168.0.1, 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
}
次に、DHCPサーバーとして使うネットワークインターフェースの指定をします。
ifconfig
で、ネットワークインターフェース一覧を表示します。殆どの人が、eth0につながっていると思います。私の場合、Raspberry Piが、SoftetherVPNサーバーも兼ねていますので、br0が今回使うインターフェイスです。詳細はこちらの記事を参照してください。
vi /etc/default/isc-dhcp-server
で開いたこの部分を、実際に使うネットワークインターフェースの名前にします。
INTERFACES=""
を
INTERFACES="br0"
へ変更します。(私の場合は、前述の理由からbr0ですが、デフォルト状態ではだいたいeth0です。)
自動起動設定
次に、サービスの自動起動の設定をします。ここで、リブート後、サーバーのインターフェイスへのIPアドレス割り当てより先に、DHCPサーバーが起動してしまい、起動に失敗するという問題が確認されているらしいです。 この解決策として、サービスの起動を遅らせるという方法を取ります。
vi /etc/init.d/isc-dhcp-server
の、78行目、
case "$1" in
start)
test_config
log_daemon_msg "Starting $DESC" "$NAME"
start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
--exec /usr/sbin/dhcpd -- \
-q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES
sleep 2
if check_status -q; then
log_end_msg 0
else
log_failure_msg "check syslog for diagnostics."
log_end_msg 1
exit 1
fi
;;
の、
log_daemon_msg "Starting $DESC" "$NAME"
と
start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
の間に、sleep 10をはさみます。つまり、以下のようになります。
case "$1" in
start)
test_config
log_daemon_msg "Starting $DESC" "$NAME"
sleep 10
start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
--exec /usr/sbin/dhcpd -- \
-q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES
sleep 2
if check_status -q; then
log_end_msg 0
else
log_failure_msg "check syslog for diagnostics."
log_end_msg 1
exit 1
fi
;;
これで保存します。これで、ひとまず設定は終わりです。あとはサービスのスタートと、リブートしてのテストです。
この段階で、古いDHCPサーバ(ルータとか)の機能はオフにしておきましょう。
サービスをスタートします。
service isc-dhcp-server restart
正常に起動しているか、以下のコマンドでチェックします。
systemctl status -l isc-dhcp-server
システムログを見て、うまいこと行っているか確認
tail -n 10 /var/log/messages
IPのリースログは、
cat /var/lib/dhcp/dhcpd.leases
で見ることができます。最後に、リブートしてもうまく動くか確認します。
shutdown -r now
以上となります。
参考サイト
http://raspi.ryo.sc/isc-dhcp/
http://www.mugbot.com/2016/08/21/raspberry-pi%E3%81%ABisc-dhcp-server%E3%82%92%E8%A8%AD%E7%BD%AE%E3%80%81%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%95%E3%81%9B%E3%82%8B/
http://ko-log.net/tech-log/archives/3986466.html
http://ytooyama.hatenadiary.jp/entry/2016/04/02/193724
http://m97087yh.seesaa.net/article/301813645.html
http://www.homu.net/raspberry-pi%E3%81%A7iot%E3%81%AAit%EF%BC%9A%E8%B5%B7%E5%8B%95%E6%99%82dhcpcd%E3%81%AB%E3%82%88%E3%82%8B%E7%84%A1%E7%B7%9Alan%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9/
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/539usedhcpd.html
https://eng-entrance.com/linux_startup
コメント