DHCPサーバの構築

# DHCPサーバの構築
DHCPサーバは、クライアントに対して自動的にIPアドレスを割り当てるサービスを提供する。  
これにより、クライアントはIPアドレスの手動設定という煩雑な作業から開放される。

## DHCPサーバのインストール
ここでは、dhcp-serverによる単純な構成でDHCPサーバを構築する。  
dnsmasqとllibvirtdのサービスが起動している場合は事前に停止し、OSを再起動する。  
また、構築ネットワーク内に別のDHCPサーバがある場合は、停止しておく。
```bash
systemctl disable libvirtd
systemctl disable dnsmasq
reboot
systemctl is-active libvirtd dnsmasq
```

パッケージのインストール
```bash
dnf install -y dhcp-server
```

## DHCPサーバの設定ファイルの作成
DHCPサーバ設定ファイルのdhcp.confを記述する。  
今回は、DNSサーバが、n200.jpn.linux.hpe.comで、192.168.0.0/24のネットワーク内の10～50までの範囲で動的IPアドレスを与えるdhcp.confファイルの例  
```
vi /etc/dhcp/dhcpd.conf
```

```bash
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
option domain-name              "jpn.linux.hpe.com";
option domain-name-servers      n200.jpn.linux.hpe.com;
default-lease-time              600;
max-lease-time                  7200;
log-facility                    local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
 range                          192.168.0.10 192.168.0.50;
 option domain-name-servers     n200.jpn.linux.hpe.com;
 option domain-name             "jpn.linux.hpe.com";
 option routers                 192.168.0.1;
 option broadcast-address       192.168.0.255;
 default-lease-time             600;
 max-lease-time                 7200;
}
```

## DHCPサーバのNICの設定
DHCPサーバにNICが複数搭載されている場合、どのNICからDHCPサービスを提供するかを設定する。  
```bash
cp -p /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
vi /etc/systemd/system/dhcpd.service
```
NICはDHCPサーバのdhcpd.serviceファイルのExecStart行のno-pidの後に記述する。  
ここでは、eno1を指定している。  
```
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid eno1
```
dhcpd.serviceファイルを編集したら、dhcpd.serviceファイルの変更をsystemdに通知する
```bash
systemctl daemon-reload
```

## DHCPサービスの起動
```bash
systemctl enable --now dhcpd
systemctl is-active dhcpd
```

## セキュリティ設定
```bash
# ファイアウォールでDHCPを許可
firewall-cmd --zone=public --add-service=dhcp
firewall-cmd --runtime-to-permanent
# ファイアウォールの許可リストを表示
firewall-cmd --list-services
```


## DHCPサーバの動作確認をする
DHCPクライアント端末（Windows端末など）をネットワークに接続して確認してみる。  
windowsであればipconfigコマンドでIPがDHCPサーバのアドレスプールから割り当てられていることを確認する。  


## IPアドレスの自動固定割り当て（MACアドレスに紐づける）
DHCPは基本的に毎回同じIPアドレスを割り振るわけではなく、  
タイミングによって異なるIPアドレスをDHCPクライアントに割り当てようとする。  
DHCPクライアントマシンに毎回同じIPアドレスを付与するには、DHCPサーバ側の設定ファイルである  
/etc/dhcp/dhcpd.confファイルに、DHCPクライアントのMACアドレスと付与したいIPアドレスの対応付けを記述する。  

```bash
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
option domain-name              "jpn.linux.hpe.com";
option domain-name-servers      n200.jpn.linux.hpe.com;
default-lease-time              600;
max-lease-time                  7200;
log-facility                    local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
 range                          192.168.0.10 192.168.0.50;
 option domain-name-servers     n200.jpn.linux.hpe.com;
 option domain-name             "jpn.linux.hpe.com";
 option routers                 192.168.0.1;
 option broadcast-address       192.168.0.255;
 default-lease-time             600;
 max-lease-time                 7200;
}
# 以下の記述を追加（対象のMACアドレスに192.168.0.15を割り当てる設定）
host n015{
 hardware ethernet              E0:51:D8:15:3A:00;
 fixed-address                  192.168.0.15;
}
```

記述後、DHCPサービスを再起動する
```bash
systemctl restart dhcpd
```

対象の機器を接続して想定したIPアドレスが割り当てられているか確認する。