CentOS 7でOSSのdhcpdを使ったDHCPサーバーを構築して古いPCを再利用してみる

centos76-dhcpd-top

Photo by Thomas Jensen on Unsplash

前回の記事ではActive Directory環境でのWindows Serverを利用したDHCPサーバーの構築手順を紹介しました。この記事でも記載した通り、Active Directory環境ではWindows Serverに実装されているDHCPサーバーを利用することが第一選択になりますが、それ以外の環境でDHCPサーバーを利用する場合には幾つかの選択肢が考えられます。

Windows
【Windowsサーバー構築】Windows Server 2019 Active Directory環境のDHCPサーバー設定

 Windows ServerでActive Directoryを利用している環境ではDHCPサーバーもWindowsで運用パターンが多いと思います。今回の記事ではWindows Server 2019でのDHCPサーバー構築手順を紹介しま ...

DHCPサーバーはルーター等で実装されていることが多いので別途、構築を行うようなパターンはそれほどありませんが、ルーターで設定ができない細かい制御を利用したい場合やDHCPプロトコルの動作を理解するためにLinuxで構築を行ってみることは良いと思います。

今回はセットアップ済みのCentOS環境を利用してDHCPサーバーを構築する手順を紹介します。それ程、手間をかけずに構築できますので、老朽化したサーバーや余ったPCなどにLinuxをインストールしてDHCPサーバーとして利用してみてはいかがでしょうか。

1. DHCPサーバーを構築する環境

DHCPサーバーはセットアップ済みのLinuxシステムに展開します。ディストリビューションはCentOSを選択しました。
参考 CentOSのインストールと基本的なセットアップ手順は以下の記事で細かく紹介しています。まだCentOSが動作する環境がない場合には、記事の通りに進めることで、CentOSの環境をつくることができます。

CentOS
centos76-install-top3
CentOS 7.6をインストール Linuxのインストールは難しくありません

こんにちは、ITエンジニアの小村(@system_kom)です。 Windowsをインストールした経験のある人は多いと思いますが、Linuxをインストール経験がある人は少ないのではないでしょうか。 Linuxのインストールはサーバー構築の基 ...

CentOS
CentOS 7のインストール後におこなうLinuxの基本設定 13ポイント

CentOS 7(バージョン7.0~7.6)のインストール完了後に、設定する最低限のポイントを13点纏めてみました。(2019年6月に追加)本記事で紹介した手順は一例で、これ以外にもサーバーを構築するためには複数の手順が必要になります。まず ...

DHCPサーバーを導入するネットワークは以下のような構成を前提としています。

centos76_dhcp_map

CentOS 7 環境構成

ネットワーク環境の詳細なパラメータと設定の前提は以下のようになります。

DHCPサーバーを設定するネットワーク環境とパラメータ

  • DHCPでIPの割り当てを行うサブネットは192.168.241.0/24
  • デフォルトゲートウェイのルーターがキャッシュDNSを兼ねている
  • サブネット内で割り振るIPアドレスレンジは192.168.241.50から192.168.241.70まで
  • デフォルトゲートウェイ(192.168.241.254)とDNSサーバー(192.168.241.254)の割り当てを行う
  • オプションのドメイン名はローカル内で利用するため"int.rem-system.com"を指定
  • リース時間はモバイルが多い環境を前提として8時間

DHCPサーバー構築前の注意点


DHCPサーバーは一つのサブネットに複数あるとIPアドレスのバッティング(重複)が発生します。バッティングが発生すると機器の通信ができなくなりますので、DHCPサーバーの起動前には既存のDHCPサーバーを停止する、または機能を無効にするなどを行って下さい。

それでは次章から具体的なDHCPサーバーのセットアップ手順を紹介していきます。

2. ホスト名の設定

まずはLinuxシステム(OS)に対して任意のホスト名を設定します。ホスト名の設定には "nmcli"コマンドを以下のように実行します。ここではホスト名として"dhcp7"を設定します。

 command
# nmcli general hostname dhcp7

実行後にエラーが出力されなければ、コマンドは正常に完了しています。設定パラメータの確認は"hostname"コマンドを利用します。オプション無しでコマンドを実行すると、設定値が表示されます。

 command
$ hostname
dhcp7

設定値としてnmcliコマンドで設定したホスト名が表示されれば、ホスト名の設定確認は完了です。

3. DHCPサーバー用パッケージの確認

DHCPサーバーを構築するのに利用するアプリケーションは「dhcp」という名前でパッケージ化されています。dhcpパッケージをインストールする前にパッケージの詳細を確認します。

3-1. dhcpd関連パッケージリストの確認

先ずはCentOSに含まれるdhcpと名前の付くパッケージのリストを確認します。パッケージリストの確認は"yum search"コマンドを実行します。

 command
$ yum search dhcp
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
================================= N/S matched: dhcp =====================================
dhcp-common.x86_64 : Common files used by ISC dhcp client and server
dhcp-devel.i686 : Development headers and libraries for interfacing to the DHCP server
dhcp-devel.x86_64 : Development headers and libraries for interfacing to the DHCP server
dhcp-libs.i686 : Shared libraries used by ISC dhcp client and server
dhcp-libs.x86_64 : Shared libraries used by ISC dhcp client and server
dhclient.x86_64 : Provides the ISC DHCP client daemon and dhclient-script
dhcp.x86_64 : Dynamic host configuration protocol software
dnsmasq.x86_64 : A lightweight DHCP/caching DNS server
dnsmasq-utils.x86_64 : Utilities for manipulating DHCP server leasesName and summary matches only, use "search all" for everything.

上記の出力結果からわかるように「dhcp」と名前の付くパッケージは複数あります。この中でDHCPサーバー構築に最低限インストールが必要になるパッケージは以下になります。

dhcp.x86_64 : Dynamic host configuration protocol software

このパッケージについて詳細を確認します。

3-2. dhcpパッケージの詳細を確認

インストール前にパッケージの内容に間違いないか、念のためにdhcpのパッケージ詳細を確認します。

 command
$ yum info dhcp
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
利用可能なパッケージ
名前 : dhcp
アーキテクチャー : x86_64
エポック : 12
バージョン : 4.2.5
リリース : 68.el7.centos.1
容量 : 1.4 M
リポジトリー : base/7/x86_64
要約 : Dynamic host configuration protocol software
URL : http://isc.org/products/DHCP/
ライセンス : ISC
説明 : DHCP (Dynamic Host Configuration Protocol) is a protocol which allows
: individual devices on an IP network to get their own network
: configuration information (IP address, subnetmask, broadcast address,
: etc.) from a DHCP server. The overall purpose of DHCP is to make it
: easier to administer a large network.
:
: To use DHCP on your network, install a DHCP service (or relay agent),
: and on clients run a DHCP client daemon. The dhcp package provides
: the ISC DHCP service and relay agent.

表示された説明からdhcpパッケージがDHCPサーバー構築に必要であることが確認できました。

4. dhcpパッケージのインストールと確認

本章では項目3. で確認したDHCPサーバーに関するパッケージをyumコマンドでインストールする手順と確認の方法を記載していきます。

4-1. dhcpパッケージのインストール

dhcpパッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目3-2. で必要なパッケージが確認できましたので、yumコマンドでインストールします。

 command
# yum -y install dhcp

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

 log
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ dhcp.x86_64 12:4.2.5-68.el7.centos.1 を インストール
--> 依存性解決を終了しました。依存性を解決しましたインストール 1 パッケージ
総ダウンロード容量: 513 k
インストール容量: 1.4 M
Downloading packages:
dhcp-4.2.5-68.el7.centos.1.x86_64.rpm | 513 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : 12:dhcp-4.2.5-68.el7.centos.1.x86_64 1/1
検証中 : 12:dhcp-4.2.5-68.el7.centos.1.x86_64 1/1
インストール:
dhcp.x86_64 12:4.2.5-68.el7.centos.1
完了しました!

エラーの出力がなく「完了しました!」と表示されれば、dhcpパッケージはインストールされています。

4-2. インストール後の確認

dhcpパッケージがインストールされたことを確認します。インストールされているパッケージはyum listコマンドで確認できます。以下のように実行することで、dhcpパッケージがインストールされていることを確認します。

 command
$ yum list installed | grep dhcp

dhcpパッケージが表示されることを確認します。

 log
dhcp.x86_64 12:4.2.5-68.el7.centos.1 @base
dhcp-common.x86_64 12:4.2.5-68.el7.centos.1 @anaconda
dhcp-libs.x86_64 12:4.2.5-68.el7.centos.1 @anaconda

続いてdhcpがインストールされた場所を確認します。dhcpのプログラム本体はdhcpdという名前になります。インストールされた場所(パス)を確認するためにはwhichコマンドを利用します。以下のようにwhichを実行することでインストールパスを確認できます。

 command
$ which dhcpd
/sbin/dhcpd

この結果からdhcpdが/sbin以下にインストールされたことが確認できます。これでdhcpパッケージのインストールと確認が終了しました。

5. dhcpdの基本的な設定

項目4.の手順まででdhcpパッケージの導入までが完了しました。dhcpdの場合、サービスを起動させる前に設定を行う必要があります。本記事ではDHCPサーバーを運用するにあたって必要になる基本的な設定を行います。項目1.でも記載していますが再度、設定の前提を記載します。

DHCPサーバーを設定する前提とパラメータ

  • DHCPでIPの割り当てを行うサブネットは192.168.241.0/24
  • サブネット内で割り振るIPアドレスレンジは192.168.241.50から192.168.241.70まで
  • デフォルトゲートウェイとDNSサーバーの割り当てを行う
  • リース時間はモバイルが多い環境を前提として8時間

この条件に合わせてDHCPサーバーの設定を行っていきます。

5-1. dhcpd.confの変更

dhcpdの設定は/etc/dhcp/以下にあるdhcpd.confで行います。dhcpd.confはデフォルトで設定が何も入っていない状態になっています。
サンプルの設定ファイルが"/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example"に入っています。このファイルを参考しても良いのですが、設定の内容が多岐に渡るため、こちらは利用せずに最低限の設定をdhcpd.confに追記します。
dhcpd.confの変更前に元のファイルをバックアップしておきます。バックアップは以下の手順で元ファイルのコピーを行います。

 command
# cd /etc/dhcp/
# ls
dhclient-exit-hooks.d dhclient.d dhcpd.conf dhcpd6.conf scripts
# cp -p dhcpd.conf dhcpd.conf.org

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

 command
# vi dhcpd.conf

5-1-1. サブネットの追加

dhcpd.confファイルにサブネットの追記を行います。サブネットはWindows DHCPのスコープと同じ意味合いでサブネットに対して配布するIPアドレスのレンジとオプション類を一つのグループとして記載します。
ここでは項目5. の要件を元に以下のようにサブネットを追加しました。

 code
# Rem System Test Subnet
subnet 192.168.241.0 netmask 255.255.255.0 {
range 192.168.241.50 192.168.241.70;
option domain-name-servers 192.168.241.254;
option domain-name "int.rem-system.com";
option routers 192.168.241.254;
option broadcast-address 192.168.241.255;
default-lease-time 28800;
max-lease-time 43200;
}

記載したパラメータは以下のような内容になります。

設定ファイルに記載したパラメータの内容

  • subnet:IPアドレスを配布するサブネットとネットマスクを指定します。
  • range:割り当てるIPアドレスのレンジになります。
  • option domain-name-servers:ネームサーバーを指定します。(192.168.241.254)
  • option domain-name:ドメインのサフィックスを指定します。(任意)
  • option routers:デフォルトゲートウェイを指定します
  • option broadcast-address:ブロードキャストアドレスを指定します。
  • default-lease-time:リース時間を指定します。

実際の設定値は運用ルールやご利用のネットワーク環境に合わせて変更してください。

これでdhcpd.confの設定は完了です。設定を行った後のdhcpd.confは以下のようになっています。

 code
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
## Rem System Test Subnet
subnet 192.168.241.0 netmask 255.255.255.0 {
range 192.168.241.50 192.168.241.70;
option domain-name-servers 192.168.241.254;
option domain-name "int.rem-system.com";
option routers 192.168.241.254;
option broadcast-address 192.168.241.255;
default-lease-time 28800;
max-lease-time 43200;
}

内容を確認して問題なければ追記した設定ファイルを保存します。

5-2. 設定ファイルの確認

dhcpd.confに設定できる内容は多岐にわたるため、設定ファイル自体に間違いがないかを確認するオプションが用意されています。DHCPサーバーの起動前にdhcpdコマンドに"-t"オプションをつけて設定ファイルをチェックします。以下、実行例になります。

 command
# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file

エラーが出力されなければ、設定ファイルの確認は完了です。

6. DHCPサーバー起動と自動起動設定

本章では設定したdhcpdが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動、停止を行います。

6-1. DHCPサーバーの起動

dhcpdは以下のように実行することで起動できます。

 command
# systemctl start dhcpd

コマンドを実行してエラーが出力されなければ、dhcpdは起動しています。
続いて、サービスの状態を確認します。systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

 command
$ systemctl status dhcpd
 dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
Active: active (running) since 金 2019-06-07 11:21:31 JST; 5s ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 14331 (dhcpd)
Status: "Dispatching packets..."
CGroup: /system.slice/dhcpd.service
mq14331 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid6月 07 11:21:31 dhcp7 dhcpd[14331]: Internet Systems Consortium DHCP Server 4.2.5
6月 07 11:21:31 dhcp7 dhcpd[14331]: Copyright 2004-2013 Internet Systems Consortium.
6月 07 11:21:31 dhcp7 dhcpd[14331]: All rights reserved.
6月 07 11:21:31 dhcp7 dhcpd[14331]: For info, please visit https://www.isc.org/software/dhcp/
6月 07 11:21:31 dhcp7 dhcpd[14331]: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were no...g file
6月 07 11:21:31 dhcp7 dhcpd[14331]: Wrote 0 leases to leases file.
6月 07 11:21:31 dhcp7 dhcpd[14331]: Listening on LPF/ens33/02:1c:25:09:f1:ad/192.168.241.0/24
6月 07 11:21:31 dhcp7 dhcpd[14331]: Sending on LPF/ens33/02:1c:25:09:f1:ad/192.168.241.0/24
6月 07 11:21:31 dhcp7 dhcpd[14331]: Sending on Socket/fallback/fallback-net
6月 07 11:21:31 dhcp7 systemd[1]: Started DHCPv4 Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

上記では分かり難いかもしれませんが、丸(●)の部分が正常な起動状態の場合には緑色で表示されます。Active項目に(running)と表示されていますので、起動していることが確認できます。
稼働しているプロセスを表示するpsコマンドでもdhcpdが起動していることを確認できます。以下のように実行します。

 command
$ ps -aux | grep dhcpd
dhcpd 14331 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

これでdhcpdの起動は完了です。

6-2. dhcpd自動起動の設定

dhcpdの起動が確認できましたのでサーバーの再起動や停止の復旧時にdhcpdが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

 command
# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。以下のように実行します。

 command
# systemctl is-enabled dhcpd
enabled

実行結果として「enabled」と表示されれば自動起動の設定は完了です。

7. DHCPサーバーの動作確認

設定したDHCPサーバーからクライアントがIPアドレスが取得できるかを確認してみます。使用するOSはWindows10です。クライアント側のネットワーク設定についてはIPアドレスの自動取得を設定します。

centos76_dhcp-server-01

7-1. クライアント側からの確認

クライアントコンピューター:win10-testにログオンしてコマンドプロンプトからIPアドレスをDHCPで取得するための

 command
> ipconfig /renew

コマンドを実行してIPアドレスを取得します。

ipconfig /renewコマンドの実行後に割り当てられたIPアドレスを確認するとdhcpdのサブネットに設定した範囲のIPアドレスやDNSサフィックス、リース時間などが割り当てられていることが確認できます。

 command
> ipconfig

centos76_dhcp-server-02

7-2. DHCP リース状況の確認

DHCPサーバー「dhcp7」側でもDHCP割り当て状況の確認ができます。DHCPの割り当て状況はsyslogの

/var/log/message

または

/var/lib/dhcpd/dhcpd.leases

に出力されます。
/var/log/messageには以下のように出力されます。lessコマンドやmoreコマンドで閲覧できます。

 command
# less /var/log/message
Jun 7 11:29:02 dhcp7 dhcpd: DHCPDISCOVER from 02:1c:25:af:a3:57 via ens33
Jun 7 11:29:03 dhcp7 dhcpd: DHCPOFFER on 192.168.241.50 to 02:1c:25:af:a3:57 (win10-test) via ens33
Jun 7 11:29:06 dhcp7 dhcpd: DHCPDISCOVER from 02:1c:25:af:a3:57 (win10-test) via ens33
Jun 7 11:29:06 dhcp7 dhcpd: DHCPOFFER on 192.168.241.50 to 02:1c:25:af:a3:57 (win10-test) via ens33
Jun 7 11:29:06 dhcp7 dhcpd: DHCPREQUEST for 192.168.241.50 (192.168.241.215) from 02:1c:25:af:a3:57 (win10-test) via ens33
Jun 7 11:29:06 dhcp7 dhcpd: DHCPACK on 192.168.241.50 to 02:1c:25:af:a3:57 (win10-test) via ens33

dhcpd.leaseにはもう少し詳細な情報が記載されています。このファイルもlessコマンドやmoreコマンドで閲覧できます。

 command
$ less /var/lib/dhcpd/dhcpd.leases
server-duid "\000\001\000\001$\214\206\253\010\314)\111\261\255";lease 192.168.241.50 {
starts 5 2019/06/07 02:29:06;
ends 5 2019/06/07 10:29:06;
cltt 5 2019/06/07 02:29:06;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 02:1c:25:af:a3:57;
uid "\001\000\015)\257\283W";
client-hostname "win10-test";
}

サーバー側でもDHCPによるIPアドレスのリース状況が確認できました。

8. まとめ

本記事ではCentOS7でのDHCPサーバー構築手順を紹介しました。Windows Serverが無いSOHO環境やスモールオフィスにはLinuxでDHCPサーバーを利用することもあるかと思います。それ程、設定の手間も掛からないこともあり、手軽に利用できます。DHCPサーバーは一つのサブネットに一つという決まりだけ守っていただければ導入後はそれ程、設定変更することもないかと思います。是非、ネットワークの理解を深める上でもDHCPサーバーを構築してみて下さい。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, オープンソース