🙃

ローカルにDHCPサーバを構築(dhcpd)

2023/05/02に公開

はじめに

本記事はVirtualBoxを使用し、ローカル環境でDHCPサーバを構築したときの手順です。
"構築すること"が目的となっているため細かな設定はしません。

対象

初めてDHCPサーバ(dhcpd)を構築する方を対象としています。

学習環境

VirtualBoxのネットワーク設定では"内部ネットワーク"を選択します。
"ブリッジアダプター"を使用すると、物理ホストが使用しているDHCPが優先的に使用されて
構築するDHCPサーバによる各種情報の割り当てが機能しないためです。

  • ホスト名 : dhcpserver
    ゲストOS : CentOS 7.9.2009
    IPアドレス : 10.0.0.1 /24

  • ホスト名 : client1
    ゲストOS : CentOS 7.9.2009
    ネットワークインターフェース : enp0s3
    IPアドレス : DHCPによる割り当て

  • ホスト名 : client2
    ゲストOS : CentOS 7.9.2009
    ネットワークインターフェース : enp0s3
    IPアドレス : DHCPによる割り当て

  • dhcpd.confに設定すること
    ドメイン名 : dhcp.local
    デフォルトゲートウェイ : 10.0.0.254 /24
    DNSサーバ : 10.0.0.200 /24
    割り当て可能なアドレスの範囲 : 10.0.0.50 ~ 10.0.0.60
    サブネットマスク : 255.255.255.0
    ブロードキャストアドレス : 10.0.0.255
    リース期間 : 1日

ゴール

client1, client2はdhcpserverからネットワークに関する各種情報の取得に成功する。

DHCPサーバ(dhcpd)構築手順

<DHCPサーバ(dhcpserver)での作業>
dhcpdをインストール
sudo yum -y install dhcp

dhcpdサービスを起動
sudo systemctl enable dhcpd
sudo systemctl start dhcpd

dhcpd.confを編集

option domain-name "dhcp.local";
option domain-name-servers 10.0.0.200;

default-lease-time 86400;
max-lease-time 86400;

subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.50 10.0.0.60;
  option routers 10.0.0.254;
  option broadcast-address 10.0.0.255;
}

dhcpdを再起動
sudo systemctl restart dhcpd

<クライアントマシン(client1)での作業>
ifcfg-enp0s3を編集

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=yes
NAME=enp0s3
UUID=f14cf5be-e5e8-4b69-8622-adc17119b5fd
DEVICE=enp0s3
ONBOOT=yes

networkを再起動
sudo systemctl restart network

NetworkManagerを再起動
sudo systemctl restart NetworkManager

各種情報が割り当てられていることを確認
nmcli device show enp0s3

IP4.ADDRESS[1]:                         10.0.0.50/24
IP4.GATEWAY:                            10.0.0.254
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 10.0.0.254, mt = 100
IP4.ROUTE[2]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1002
IP4.ROUTE[3]:                           dst = 10.0.0.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             10.0.0.200
IP4.DOMAIN[1]:                          dhcp.local

<クライアントマシン(client2)での作業>
ifcfg-enp0s3を編集

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
NAME=enp0s3
UUID=9102afee-c32a-47c3-8879-692940221e03
DEVICE=enp0s3
ONBOOT=yes

networkを再起動
sudo systemctl restart network

NetworkManagerを再起動
sudo systemctl restart NetworkManager

各種情報が割り当てられていることを確認
nmcli device show enp0s3

IP4.ADDRESS[1]:                         10.0.0.51/24
IP4.GATEWAY:                            10.0.0.254
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 10.0.0.254, mt = 100
IP4.ROUTE[2]:                           dst = 10.0.0.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             10.0.0.200
IP4.DOMAIN[1]:                          dhcp.local

構築を通して学んだこと

最初は"ブリッジアダプター"を使用してDHCPサーバから各種情報を取得しようとしたのですが、
物理ホストが指定しているDHCPサーバが優先的に使用されて、構築したDHCPサーバによる割り当てが機能しませんでした。特定のDHCPサーバを指定しても機能しませんでした。
そもそもDHCPサーバは最初に応答があったところから情報を取得するからのようです。
"ブリッジアダプター"を使用してDHCPサーバを構築することも可能ですが、その時は物理ホストが指定しているDHCPサーバを無効化するか、構築したものを指定する必要があります。

さいごに

私と同様にDHCPサーバ(dhcpd)を構築する方々にとって少しでもお役に立てれば幸いです。

Discussion