RHEL 8 で DHCPサーバーを構築する

# 1.環境
RHEL8.2 を使用しました。

```
$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)
$
```

# 2.作業に必要な基本コマンド

後々でいろいろとコマンドを使用する事になるので、参照用にコマンドの一覧をリストしておきます。

```
# 起動   
$ systemctl start dhcpd

# 停止
$ systemctl stop dhcpd

# ステータスの確認
$ systemctl status dhcpd

# 自動起動
$ systemctl enable dhcpd

# 自動起動設定確認
$ systemctl is-enabled dhcpd

# ファイルの構文確認
$ dhcpd -t

```

# 3.DHCP サーバーのインストールと構成

##3.1 dhcpd のインストール

yum で dhcp-server をインストールします。

```
$ yum install -y dhcp-server
Updating Subscription Management repositories.
Last metadata expiration check: 2:43:50 ago on Tue Sep  8 22:55:55 2020.
Dependencies resolved.
===================================================================================================================
 Package        Architecture        Version              Repository                        Size
===================================================================================================================
Installing:
 dhcp-server     x86_64          12:4.3.6-40.el8       rhel-8-for-x86_64-baseos-rpms        529 k

Transaction Summary

<省略>     
                                                                                                                                                

Installed:
  dhcp-server-12:4.3.6-40.el8.x86_64

Complete!
[root@ns1 dhcp]#

```



##3.2. dhcpd の設定

###3.2.1 dhcpd.service の編集

サンプルの設定ファイルをコピーします。

```shell:
$ cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
```

上記でコピーした `/etc/systemd/system/dhcpd.service` を編集します。

(追記：後から気づいたのですが、この後、`dhcpd.service` を編集して `dhcpd` を使用するインターフェイスを指定するのですが、ここで書いてる方法より「3.2.2 dhcpd でインターフェイスを指定する方法」を使用した方がスマートです。) 

この例では特定の Interface の `ens256`にだけ DHCP  を有効にします。IPv4の例です。
※IPv6の場合は、設定ファイル名は `/etc/dhcp/dhcpd6.conf` で、`systemd` サービス名 も `dhcpd6`になります。

```shell:
$ vim /etc/systemd/system/dhcpd.service
```

```shell:/etc/systemd/system/dhcpd.service
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/dhcpd
# 以下のラインを変更する。DHCP Server に使用するインターフェイス ens256 を追加する。
# ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS  ens256
StandardError=null

[Install]
WantedBy=multi-user.target

````

###3.2.2 dhcpd でインターフェイスを指定する方法

後から気づいたのです、`dchpd.service` のファイルを直接編集しなくても `dhcpd` で使用するインターフェイスを指定できます。
`/etc/sysconfig/dhcpd` を編集して以下を追加します。

```shell:/etc/sysconfig/dhcpd
DHCPDARGS="ens192"   # DHCPDサービスを使いたい Interface 名
```

この`DHCPDARGS` は、`dchpd.service` 内の DHCPD サービスの起動コマンドの引数に渡されます。

###3.2.3 dhcpd.conf の編集

次に `/etc/dhcp/dhcpd.conf` を編集します。
始めは何も書かれてないはずです。以下のように編集します。

```shell:
$ vi /etc/dhcp/dhcpd.conf
```

```shell:/etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
option domain-name "example.com";
default-lease-time 86400;

authoritative;

subnet 192.0.2.0 netmask 255.255.255.0 {
  range 192.0.2.20 192.0.2.99;　　　　　　　　　　# IP Address のレンジ
  option domain-name-servers 192.0.2.100;　　　　# DNS Server のアドレス。この例は DHCP と DNS兼用なので自アドレス。
  option routers 192.0.2.1;　　　　　　　　　　 　# DHCPクライアントに、GatewayのIPとして渡される。
  option broadcast-address 192.0.2.255;
  max-lease-time 172800;
}
```

編集が終わったら、設定をリロードして dhcpd を起動します。


 設定ファイルの構文を確認します。

```shell:
$ dhcpd -t
```

リロードします。

```shell:
$ systemctl daemon-reload
```

再起動します

```shell:
$ systemctl start dhcpd

# ステータスを確認します。
$ systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/etc/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-09-09 10:51:32 EDT; 10s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 39370 (dhcpd)
   Status: "Dispatching packets..."
    Tasks: 1 (limit: 23426)
   Memory: 4.8M
   CGroup: /system.slice/dhcpd.service
           └─39370 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid ens256

Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Config file: /etc/dhcp/dhcpd.conf
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Database file: /var/lib/dhcpd/dhcpd.leases
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: PID file: /var/run/dhcpd.pid
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Source compiled to use binary-leases
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Wrote 0 leases to leases file.
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Listening on LPF/ens256/00:50:56:96:49:d2/192.0.2.0/24
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Sending on   LPF/ens256/00:50:56:96:49:d2/192.0.2.0/24
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Sending on   Socket/fallback/fallback-net
Sep 09 10:51:32 ns1.example.com dhcpd[39370]: Server starting service.
Sep 09 10:51:32 ns1.example.com systemd[1]: Started DHCPv4 Server Daemon.

# 自動起動を有効にしておきます。
$ systemctl enable dhcpd
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /etc/systemd/system/dhcpd.service.
```
以上で、DHCPサーバーのインストールは完了です。


# 4.ログの確認

以下のコマンドで dhcpd のログが確認できます。

```shell:
tail -f /var/log/messages | grep dhcp
```