DHCPサーバの設定について



●DHCPサーバの設定方法(Rocky 8)

 参照URL:DHCP : サーバーの設定

 DHCPサーバをインストールします。
# dnf install dhcp-server -y
 次に、DHCPサーバを設定するため/etc/dhcp/dhcpd.confを作成します。
# vi /etc/dhcp/dhcpd.conf
# ドメイン名指定
option domain-name     "bigbang.mydns.jp";
# ネームサーバーのホスト名 または IP アドレス指定
option domain-name-servers     192.168.0.7, 192.168.0.8;
# デフォルト貸出期間
default-lease-time 86400;
# 最大貸出期間
max-lease-time 259200;
# 正当な DHCP サーバーであることの宣言
authoritative;
# ネットワークアドレスとサブネットマスク指定
subnet 192.168.0.0 netmask 255.255.255.0 {
    # 貸し出す IP アドレスの範囲指定
    range dynamic-bootp 192.168.0.181 192.168.0.190;
    # ブロードキャストアドレス指定
    option broadcast-address 192.168.0.255;
    # ゲートウェイアドレス指定
    option routers 192.168.0.254;
}
 DHCPサーバの自動起動を設定します。
# systemctl enable --now dhcpd
 Firewalldを利用している時は、下記のようにDHCPサービスを許可します。
# firewall-cmd --add-service=dhcp
success
# firewall-cmd --runtime-to-permanent
success
 DHCPサーバからリースされたIPアドレスは下記コマンドで確認できます。
# cat /var/lib/dhcpd/dhcpd.leases


●DHCPサーバの設定方法:冗長化(Rocky 8)

 参照URL:DHCPサーバの冗長化設定 (Failover設定)

 DHCPサーバをインストールします。
# dnf install dhcp-server -y
 次に、DHCPサーバを設定するため/etc/dhcp/dhcpd.confを作成します。
※DHCPサーバ1台目
# vi /etc/dhcp/dhcpd.conf
log-facility local6;

failover peer "bigbang-dhcpd" {
    primary;
    address 192.168.0.8;
    port 520;
    peer address 192.168.0.7;
    peer port 519;
    max-response-delay 60;
    max-unacked-updates 10;
    mclt 3600;
    split 128;
    load balance max seconds 3;
}

include "/etc/dhcp/dhcpd.conf.master";

※DHCPサーバ2台目
# vi /etc/dhcp/dhcpd.conf
log-facility local6;

failover peer "bigbang-dhcpd" {
    secondary;
    address 192.168.0.7;
    port 519;
    peer address 192.168.0.8;
    peer port 520;
    max-response-delay 60;
    max-unacked-updates 10;
    mclt 3600;
    load balance max seconds 3;
}

include "/etc/dhcp/dhcpd.conf.master";

# log-facility local6;を設定したので(※DHCPサーバ2台とも設定)
# vi /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
 ↓
*.info;mail.none;authpriv.none;cron.none;local16,*      /var/log/messages

# systemctl restart rsyslog
 /etc/dhcp/dhcpd.conf.masterを作成します。
# vi /etc/dhcp/dhcpd.conf.master
option domain-name "bigbang.dyndns.org";

option domain-name-servers saru.bigbang.dyndns.org, tori.bigbang.dyndns.org;

default-lease-time 21600;
max-lease-time 43200;

ddns-update-style none;

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
    option domain-name              "bigbang.dyndns.org";
    option routers                  192.168.0.254;
    option subnet-mask              255.255.255.0;
    option broadcast-address        192.168.0.255;
    option ntp-servers              192.168.0.254;
    option domain-name-servers      192.168.0.8, 192.168.0.7;
    pool {
        failover peer "bigbang-dhcpd";
        range 192.168.0.51 192.168.0.80;
        deny dynamic bootp clients;
    }
}

# systemctl restart dhcpd
 Firewallで519及び520番ポートを開放します。
# firewall-cmd --add-port=519-520/tcp --permanent
# firewall-cmd --reload
 こうするとDHCPサーバがクライアントに与えるIPアドレスは、192.168.0.51-192.168.0.80の範囲となります。
 特にクライアントからの時間枠の要求がなければ、21600秒の間、IPアドレスが貸し出されます。
 要求があった場合に最大限許される貸し出し時間は 43200秒です。
 また、サーバはクライアントに255.255.255.0をサブネットマスクとして用い、192.168.0.255をブロードキャストアドレスとして用い、192.168.0.254をゲートウェイとして用い、192.168.0.7及び192.168.0.8をDNSサーバとして用いるように「アドバイス」します。

 下記は、特定のIPアドレスをクライアントのMACアドレスに応じて割り当てることもできます。
host haagen {
	hardware ethernet 08:00:2b:4c:59:23;
	fixed-address 192.168.0.222;
}
 このようにするとIPアドレス192.168.0.222がMACアドレス08:00:2b:4c:59:23を持ったクライアントに割り当てられます。これらを適当に混ぜる事もできます。
 つまり特定のクライアントにはスタティックなIPアドレスを与え(サーバ等)、他には動的なIPを与える(ラップトップユーザなど)ことができます。
 他にもたくさんのオプションがあります。
 winsサーバのアドレスを与えたり、タイムサーバを教えたり、等です。
 これらが必要な場合はdhcpd.confのマニュアルページを読んでください。

 設定が終了したら、DHCPを起動します。
# systemctl restart dhcpd


●複数のNICを持つサーバ上でDHCPを動作させる方法(Rocky 8)

 複数のNICを持つサーバ上でDHCPを動作させるためには下記のようにします。
# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# vi /etc/systemd/system/dhcpd.service
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>
# systemctl --system daemon-reload
# systemctl restart dhcpd.service
 これで問題なく動作します。 

●割り当てられたIPアドレスの確認(Rocky 8)

 問題なく起動すれば、接続されたクライアントに自動的にIPアドレスが割り当てられます。どのパソコンにどんなIPアドレスが割り当てられたか確認するには、
  $ cat /var/lib/dhcpd/dhcpd.leases
 としてください。

 参照URL:13.2.2. リースデータベース

 なお、データベース内の時刻はすべて現地時間でなく協定世界時(UTC)で表示されます。

 注意

 LANカードやLANボードを複数枚利用している場合は上記のみの設定ではエラーのためDHCPサーバが動作しません。これを解消するのは以下を参考にしてください。
もう1枚のLANボードのサブネットが10.0.0.0/24である場合、
	subnet 10.0.0.0 netmask 255.255.255.0 { 
	} 
 としてください。これで問題なく動作します。

●dhcpd.leasesが破損した場合の対応について(Rocky 8)

 dhcpdは、貸し出しデータベースが存在していないと起動しません。この場合、/var/lib/dhcpd/dhcpd.leasesという空のファイルを作成してください。
 貸し出しデータベースが際限なく大きくなるのを防ぐため、このファイルは時々書き換えられます。まず、一時的な貸し出しデータベースが作成され、現在わかっている貸し出し記録がすべてそこにダンプされます。次に、古い貸し出しデータベースが/var/lib/dhcpd/dhcpd.leases~という名前に変更されます。最後に、新たに書き出された貸し出しデータベースが適切な場所に移動されます。
 古い貸し出しデータベースの名前が変更された後、新しいデータベースが適切な場所に移動される前には間隔があるので、この間にdhcpdプロセスがkillされたりシステムがクラッシュすると、/var/lib/dhcpd/dhcpd.leasesが存在しなくなる危険性があります。この場合dhcpdは起動しなくなり、手動での修復が必要になります。このとき新しい貸し出しファイルを単純に作成してはいけません。このようにすると、古い割り当てはすべて失われ混乱が生じることになります。その場合は、/var/lib/dhcpd/dhcpd.leases~を/var/lib/dhcpd/dhcpd.leasesにリネームし、すなわち正しい古い貸し出しファイルを元に戻してから、dhcpdを起動してください。このようにすれば、正しい貸し出しファイルに復元することができます。

●DHCPサーバのクラスタ化(Rocky 8)

 参考URL:DHCPサーバのクラスタ化
 参考URL:ISC-DHCP DHCP Failover設定
 参考URL:isc-dhcp-serverでdhcpサーバの冗長構成

 dhcpdを2台のサーバにインストールします。
 2台に共通の設定をします。
# cat /etc/dhcp/conf.d/dynamic-lease.conf
option domain-name              "【ドメイン名】";
option domain-name-servers      DNSサーバ1, DNSサーバ2, DNSサーバ3;
default-lease-time 21600;
max-lease-time 43200;
subnet 【ネットワークアドレス】 netmask 【サブネットマスク】 {
  pool {
    failover peer "【クラスタルール名】";
    range 【開始アドレス】 【終了アドレス】;
    deny dynamic bootp clients;
  }
        option routers                  【ルータのIPアドレス】;
        option subnet-mask              【サブネットマスク】;
        option broadcast-address        【ブロードキャストアドレス】;
        option ntp-servers              【NTPサーバアドレス】;
}
 プライマリDHCPサーバ側の設定。
# vi /etc/dhcp/dhcpd.conf
## Global setting
ddns-update-style none;
one-lease-per-client true;
authoritative;
log-facility local6;
## Failover setting
failover peer "【クラスタルール名】" {
        primary;
        address 【プライマリDHCPサーバのアドレス】;
        port 519;
        peer address 【セカンダリDHCPサーバのアドレス】;
        peer port 520;
        max-response-delay 60;
        max-unacked-updates 10;
        mclt 300;
        split 128;
        load balance max seconds 3;
}
include "/etc/dhcp/conf.d/dynamic-lease.conf";
 セカンダリDHCPサーバ側の設定。
ddns-update-style none;
one-lease-per-client true;
authoritative;
log-facility local6;
failover peer "【クラスタルール名】" {
        secondary;
        address 【セカンダリDHCPサーバのアドレス】;
        port 520;
        peer address 【プライマリDHCPサーバのアドレス】;
        peer port 519;
        max-response-delay 60;
        max-unacked-updates 10;
}
include "/etc/dhcp/conf.d/dynamic-lease.conf";
 syslog関連の設定。
# vi /etc/rsyslog.d/40-dhcpd.conf
# HCP-SERVER
local6.*        /var/log/dhcpd.log
# touch /var/log/dhcpd.log
 2台とも再起動します。
# systemctl restart rsyslog
# systemctl restart dhcpd

 フェールオーバー試験。
 セカンダリDHCPサーバを停止します。
# systemctl stop dhcpd ← セカンダリDHCPサーバの停止
セカンダリDHCPサーバでのログ出力
failover peer 【クラスタルール名】: I move from normal to communications-interrupted

 フェールバック試験。
 セカンダリDHCPサーバを起動します。
# systemctl start dhcpd ← セカンダリDHCPサーバの起動
セカンダリDHCPサーバでのログ出力
failover peer 【クラスタルール名】: peer moves from normal to normal
Wrote 30 leases to leases file.
failover peer 【クラスタルール名】: I move from communications-interrupted to normal
balancing pool 55ec1267hhb0 192.168.0.0/24  total 30  free 8  backup 13  lts -2  max-own (+/-)2
balanced pool 55ec1267hhb0 192.168.0.0/24  total 30  free 8  backup 13  lts -2  max-misbal 3
Sending updates to 【クラスタルール名】.
プライマリDHCPサーバでのログ出力
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/
Wrote 30 leases to leases file.
Listening on LPF/eth1/00:0c:29:b9:cd:58/192.168.0.0/24
Sending on   LPF/eth1/00:0c:29:b9:cd:58/192.168.0.0/24
Sending on   Socket/fallback/fallback-net
failover peer 【クラスタルール名】: I move from normal to startup
failover peer 【クラスタルール名】: peer moves from normal to communications-interrupted
failover peer 【クラスタルール名】: I move from startup to normal
balancing pool 558av2879870 192.168.0.0/24  total 30  free 8  backup 13  lts 2  max-own (+/-)2
balanced pool 558av2879870 192.168.0.0/24  total 30  free 10  backup 11  lts 0  max-misbal 3
Sending updates to 【クラスタルール名】.
failover peer 【クラスタルール名】: peer moves from communications-interrupted to normal


●DHCPサーバの設定方法(CentOS 7)

 DHCPサーバをインストールします。
# yum install dhcp
 次に、DHCPサーバを設定するため/etc/dhcp/dhcpd.confを作成します。
 通常は IP アドレスをランダムに割り当てる方法でしょう。これには以下のような設定を用います。
	subnet 192.168.0.0 netmask 255.255.255.0 {
		range 192.168.0.101 192.168.0.200;
		default-lease-time 86400;
		max-lease-time 259200;
		option subnet-mask 255.255.255.0;
		option broadcast-address 192.168.0.255;
		option routers 192.168.0.254;
		option domain-name-servers 192.168.0.254;
		option domain-name "space.local";
	}
 こうすると DHCP サーバがクライアントに与える IP アドレスは192.168.0.101-192.168.0.200 の範囲となります。特にクライアントからの時間枠の要求がなければ、86400秒の間 IP アドレスが貸し出されます。要求があった場合に最大限許される貸し出し時間は 259200 秒です。またサーバはクライアントに 255.255.255.0 をサブネットマスクとして用い、192.168.0.255 をブロードキャストアドレスとして用い、192.168.0.254 をゲートウェイとして用い、 192.168.0.254 を DNS サーバとして用いるように「アドバイス」します。

 特定の IP アドレスをクライアントの Ethernet アドレスに応じて割り当てることもできます。
	host haagen {
		hardware ethernet 08:00:2b:4c:59:23;
		fixed-address 192.168.0.222;
	}
 このようにすると IP アドレス 192.168.0.222 が Ethernet アドレス 08:00:2b:4c:59:23 を持ったクライアントに割り当てられます。これらを適当に混ぜる事もできます。つまり特定のクライアントにはスタティックな IP アドレスを与え(サーバなど)、他には動的な IP を与える(ラップトップユーザなど)ことができます。他にもたくさんのオプションがあります。wins サーバのアドレスを与えたり、タイムサーバを教えたり、などです。これらが必要な場合は dhcpd.conf のマニュアルページを読んでください。

 設定が終了したら、DHCPを起動します。
# systemctl restart dhcpd


●複数のNICを持つサーバ上でDHCPを動作させる方法(CentOS 7)

 複数のNICを持つサーバ上でDHCPを動作させるためには下記のようにします。
# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# vi /etc/systemd/system/dhcpd.service
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <your_interface_name(s)>
# systemctl --system daemon-reload
# systemctl restart dhcpd.service
 これで問題なく動作します。 

●割り当てられたIPアドレスの確認(CentOS 7)

 問題なく起動すれば、接続されたクライアントに自動的にIPアドレスが割り当てられます。どのパソコンにどんなIPアドレスが割り当てられたか確認するには、
  $ cat /var/lib/dhcpd/dhcpd.leases
 としてください。

 参照URL:13.2.2. リースデータベース

 なお、データベース内の時刻はすべて現地時間でなく協定世界時(UTC)で表示されます。

 注意

 LANカードやLANボードを複数枚利用している場合は上記のみの設定ではエラーのためDHCPサーバが動作しません。これを解消するのは以下を参考にしてください。
もう1枚のLANボードのサブネットが10.0.0.0/24である場合、
	subnet 10.0.0.0 netmask 255.255.255.0 { 
	} 
 としてください。これで問題なく動作します。

●dhcpd.leasesが破損した場合の対応について(CentOS 7)

 dhcpdは、貸し出しデータベースが存在していないと起動しません。この場合、/var/lib/dhcpd/dhcpd.leasesという空のファイルを作成してください。
 貸し出しデータベースが際限なく大きくなるのを防ぐため、このファイルは時々書き換えられます。まず、一時的な貸し出しデータベースが作成され、現在わかっている貸し出し記録がすべてそこにダンプされます。次に、古い貸し出しデータベースが/var/lib/dhcpd/dhcpd.leases~という名前に変更されます。最後に、新たに書き出された貸し出しデータベースが適切な場所に移動されます。
 古い貸し出しデータベースの名前が変更された後、新しいデータベースが適切な場所に移動される前には間隔があるので、この間にdhcpdプロセスがkillされたりシステムがクラッシュすると、/var/lib/dhcpd/dhcpd.leasesが存在しなくなる危険性があります。この場合dhcpdは起動しなくなり、手動での修復が必要になります。このとき新しい貸し出しファイルを単純に作成してはいけません。このようにすると、古い割り当てはすべて失われ混乱が生じることになります。その場合は、/var/lib/dhcpd/dhcpd.leases~を/var/lib/dhcpd/dhcpd.leasesにリネームし、すなわち正しい古い貸し出しファイルを元に戻してから、dhcpdを起動してください。このようにすれば、正しい貸し出しファイルに復元することができます。

●DHCPサーバのクラスタ化(CentOS 7)

 参考URL:DHCPサーバのクラスタ化
 参考URL:ISC-DHCP DHCP Failover設定
 参考URL:isc-dhcp-serverでdhcpサーバの冗長構成

 dhcpdを2台のサーバにインストールします。
 2台に共通の設定をします。
# cat /etc/dhcp/conf.d/dynamic-lease.conf
option domain-name              "【ドメイン名】";
option domain-name-servers      DNSサーバ1, DNSサーバ2, DNSサーバ3;
default-lease-time 21600;
max-lease-time 43200;
subnet 【ネットワークアドレス】 netmask 【サブネットマスク】 {
  pool {
    failover peer "【クラスタルール名】";
    range 【開始アドレス】 【終了アドレス】;
    deny dynamic bootp clients;
  }
        option routers                  【ルータのIPアドレス】;
        option subnet-mask              【サブネットマスク】;
        option broadcast-address        【ブロードキャストアドレス】;
        option ntp-servers              【NTPサーバアドレス】;
}
 プライマリDHCPサーバ側の設定。
# vi /etc/dhcp/dhcpd.conf
## Global setting
ddns-update-style none;
one-lease-per-client true;
authoritative;
log-facility local6;
## Failover setting
failover peer "【クラスタルール名】" {
        primary;
        address 【プライマリDHCPサーバのアドレス】;
        port 519;
        peer address 【セカンダリDHCPサーバのアドレス】;
        peer port 520;
        max-response-delay 60;
        max-unacked-updates 10;
        mclt 300;
        split 128;
        load balance max seconds 3;
}
include "/etc/dhcp/conf.d/dynamic-lease.conf";
 セカンダリDHCPサーバ側の設定。
ddns-update-style none;
one-lease-per-client true;
authoritative;
log-facility local6;
failover peer "【クラスタルール名】" {
        secondary;
        address 【セカンダリDHCPサーバのアドレス】;
        port 520;
        peer address 【プライマリDHCPサーバのアドレス】;
        peer port 519;
        max-response-delay 60;
        max-unacked-updates 10;
}
include "/etc/dhcp/conf.d/dynamic-lease.conf";
 syslog関連の設定。
# vi /etc/rsyslog.d/40-dhcpd.conf
# HCP-SERVER
local6.*        /var/log/dhcpd.log
# touch /var/log/dhcpd.log
 2台とも再起動します。
# systemctl restart rsyslog
# systemctl restart dhcpd

 フェールオーバー試験。
 セカンダリDHCPサーバを停止します。
# systemctl stop dhcpd ← セカンダリDHCPサーバの停止
セカンダリDHCPサーバでのログ出力
failover peer 【クラスタルール名】: I move from normal to communications-interrupted

 フェールバック試験。
 セカンダリDHCPサーバを起動します。
# systemctl start dhcpd ← セカンダリDHCPサーバの起動
セカンダリDHCPサーバでのログ出力
failover peer 【クラスタルール名】: peer moves from normal to normal
Wrote 30 leases to leases file.
failover peer 【クラスタルール名】: I move from communications-interrupted to normal
balancing pool 55ec1267hhb0 192.168.0.0/24  total 30  free 8  backup 13  lts -2  max-own (+/-)2
balanced pool 55ec1267hhb0 192.168.0.0/24  total 30  free 8  backup 13  lts -2  max-misbal 3
Sending updates to 【クラスタルール名】.
プライマリDHCPサーバでのログ出力
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/
Wrote 30 leases to leases file.
Listening on LPF/eth1/00:0c:29:b9:cd:58/192.168.0.0/24
Sending on   LPF/eth1/00:0c:29:b9:cd:58/192.168.0.0/24
Sending on   Socket/fallback/fallback-net
failover peer 【クラスタルール名】: I move from normal to startup
failover peer 【クラスタルール名】: peer moves from normal to communications-interrupted
failover peer 【クラスタルール名】: I move from startup to normal
balancing pool 558av2879870 192.168.0.0/24  total 30  free 8  backup 13  lts 2  max-own (+/-)2
balanced pool 558av2879870 192.168.0.0/24  total 30  free 10  backup 11  lts 0  max-misbal 3
Sending updates to 【クラスタルール名】.
failover peer 【クラスタルール名】: peer moves from communications-interrupted to normal