どうも、Tです。
今までWindowsのフリーソフトを使ってDHCP環境を作っていましたが、ちゃんと検証環境内にDHCPサーバを作ろうと思いRHELを使ってDHCPサーバを作ったので備忘録です。
目次
環境
OS情報
vSphere上の仮想マシンとして動作しているRHELマシンを使用しています。
# cat /etc/redhat-release Red Hat Enterprise Linux release 9.2 (Plow)
設定自体はあまり変更していません。下記部分くらいになります。
- firewalld無効
- SELinux有効
- RHNへ登録済み
操作はすべてrootユーザーで行っています。
ネットワーク情報
DHCPサーバのNICには事前にIPアドレスなどを設定済みです。
# nmcli device show GENERAL.DEVICE: ens33 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:50:56:82:03:FB GENERAL.MTU: 1500 GENERAL.STATE: 100 (接続済み) GENERAL.CONNECTION: ens33 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 WIRED-PROPERTIES.CARRIER: オン IP4.ADDRESS[1]: 192.168.10.203/24 IP4.GATEWAY: 192.168.10.254 IP4.ROUTE[1]: dst = 192.168.10.0/24, nh = 0.0.0.0, mt = 100 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.10.254, mt = 100 IP4.DNS[1]: 192.168.10.201 IP4.DNS[2]: 192.168.10.202 IP4.SEARCHES[1]: k.local.lab IP6.ADDRESS[1]: fe80::250:56ff:fe82:3fb/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 256 GENERAL.DEVICE: ens35 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:50:56:82:BA:06 GENERAL.MTU: 1500 GENERAL.STATE: 100 (接続済み) GENERAL.CONNECTION: ens35 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/8 WIRED-PROPERTIES.CARRIER: オン IP4.ADDRESS[1]: 192.168.11.203/24 IP4.GATEWAY: 192.168.11.254 IP4.ROUTE[1]: dst = 192.168.11.0/24, nh = 0.0.0.0, mt = 101 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.11.254, mt = 101 IP4.DNS[1]: 192.168.10.201 IP4.DNS[2]: 192.168.10.202 IP4.SEARCHES[1]: k.local.lab IP6.ADDRESS[1]: fe80::47f2:26cf:7273:102c/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024 GENERAL.DEVICE: lo GENERAL.TYPE: loopback GENERAL.HWADDR: 00:00:00:00:00:00 GENERAL.MTU: 65536 GENERAL.STATE: 100 (接続済み (外部)) GENERAL.CONNECTION: lo GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1 IP4.ADDRESS[1]: 127.0.0.1/8 IP4.GATEWAY: -- IP6.ADDRESS[1]: ::1/128 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = ::1/128, nh = ::, mt = 256
やりたいこと
本記事ではDHCPサーバに2枚のNICでそれぞれ別のセグメントのクライアントにIPアドレスを配布します。
DHCPで配布する情報は、各NICで以下のを想定しています。
| 項目 | NIC1側 | NIC2側 |
| ドメイン | k.local.lab | k.local.lab |
| LANセグメント | 192.168.10.0/24 | 192.168.11.0/24 |
| サブネットマスク | 255.255.255.0 | 255.255.255.0 |
| デフォルトゲートウェイ | 192.168.10.254 | 192.168.11.254 |
| IP割当範囲 | 開始:192.168.10.220 終了:192.168.10.249 | 開始:192.168.11.220 終了:192.168.11.249 |
| DNSサーバー | 192.168.10.201 192.168.10.202 | 192.168.10.201192.168.10.202 |
| デフォルトリース時間 ※1 | 21600秒(6時間) | |
| 最大リース時間 ※1 | 86400(24時間) | |
※1:それそれ別設定ではなく、共通項目設定として扱う。
DHCPサーバインストール
DHCPサーバをインストールします。
# dnf install dhcp-server
DHCPサーバ設定
DHCPサーバの設定ファイルを編集します。
# vi /etc/dhcp/dhcpd.conf
内容は下記になります。
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp-server/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
# Common setting
default-lease-time 21600;
max-lease-time 86400;
# 192.168.10.0/24 settings
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.220 192.168.10.249;
option routers 192.168.10.254;
option broadcast-address 192.168.10.0;
option domain-name-servers 192.168.10.201,192.168.10.202;
option domain-name "k.local.lab";
}
# 192.168.11.0/24 settings
subnet 192.168.11.0 netmask 255.255.255.0 {
range 192.168.11.220 192.168.11.249;
option routers 192.168.11.254;
option broadcast-address 192.168.11.0;
option domain-name-servers 192.168.10.201,192.168.10.202;
option domain-name "k.local.lab";
}各設定の意味は下記のようになっています。
| 項目 | 意味 |
| default-lease-time | デフォルトのリース期間です。 |
| max-lease-time | DHCPクライアントからリース延長要求があった場合に、延長される最大期間です。 |
| subnet <ネットワーク> netmask <サブネットマスク> | 設定対象になるネットワークセグメントの指定です。{}内のオプション値が反映される範囲です。 |
| range | 配布するIPアドレスの範囲です。 |
| option routers | デフォルトゲートウェイの指定です。 |
| option broadcast-address | ブロードキャストアドレスの指定です。 |
| option domain-name-servers | DNSサーバーの指定です。 |
| option domain-name | ドメイン名の指定です。 |
設定が終わったのち、「dhcpd -t」コマンドを実行し設定ファイルが正しいことを確認します。下記のようにエラーが表示さなければ、書式などの誤りなく正しい設定ファイルになっています。
# dhcpd -t Internet Systems Consortium DHCP Server 4.4.2b1 Copyright 2004-2019 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ ldap_gssapi_principal is not set,GSSAPI Authentication for LDAP will not be used Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcpd/dhcpd.leases PID file: /var/run/dhcpd.pid Source compiled to use binary-leases
DHCPサービスの自動起動を有効にし、起動します。
# systemctl enable dhcpd --now
正常に起動していることを確認します。
# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; preset: disabled)
Active: active (running) since Fri 2023-07-28 10:15:42 JST; 54min ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 2642 (dhcpd)
Status: "Dispatching packets..."
Tasks: 1 (limit: 48800)
Memory: 4.6M
CPU: 15ms
CGroup: /system.slice/dhcpd.service
mq2642 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
7月 28 10:15:42 k-util dhcpd[2642]: Sending on LPF/ens33/00:50:56:82:03:fb/192.168.10.0/24
7月 28 10:15:42 k-util dhcpd[2642]: Sending on Socket/fallback/fallback-net
7月 28 10:15:42 k-util dhcpd[2642]: Server starting service.
7月 28 10:15:42 k-util systemd[1]: Started DHCPv4 Server Daemon.
7月 28 10:23:18 k-util dhcpd[2642]: DHCPREQUEST for 192.168.10.221 from 00:50:56:82:9a:59 (tpl-rhel92) via ens33
7月 28 10:23:18 k-util dhcpd[2642]: DHCPACK on 192.168.10.221 to 00:50:56:82:9a:59 (tpl-rhel92) via ens33
7月 28 10:42:19 k-util dhcpd[2642]: DHCPREQUEST for 192.168.11.220 from 00:50:56:82:62:c0 (testwin10) via ens35
7月 28 10:42:19 k-util dhcpd[2642]: DHCPACK on 192.168.11.220 to 00:50:56:82:62:c0 (testwin10) via ens35
7月 28 10:53:18 k-util dhcpd[2642]: DHCPREQUEST for 192.168.10.221 from 00:50:56:82:9a:59 (tpl-rhel92) via ens33
7月 28 10:53:18 k-util dhcpd[2642]: DHCPACK on 192.168.10.221 to 00:50:56:82:9a:59 (tpl-rhel92) via ens33
動作確認
それぞれのセグメントにDHCPクライアントを配置し、DHCPサーバからIPアドレスが取得できることを確認します。
今回は、DHCPクライアントにWindows 10を使用しています。
192.168.10.0/24側確認
DHCPサーバから取得できています。
192.168.11.0/24側確認
DHCPサーバから取得できています。
おまけ
DHCPサーバで払い出した情報は、dhcpd.leasesファイルに保存されています。
# cd /var/lib/dhcpd # ls -lh 合計 8.0K -rw-r--r--. 1 dhcpd dhcpd 1.6K 7月 28 11:33 dhcpd.leases -rw-r--r--. 1 dhcpd dhcpd 1.2K 7月 28 11:32 dhcpd.leases~ -rw-r--r--. 1 dhcpd dhcpd 0 11月 3 2022 dhcpd6.leases
dhcpd.leasesファイルの中身は下記のようになっています。
# cat dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.2b1
# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;
----
長いため一部割愛
----
lease 192.168.11.220 {
starts 5 2023/07/28 02:33:09;
ends 5 2023/07/28 08:33:09;
cltt 5 2023/07/28 02:33:09;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:50:56:82:62:c0;
uid "\001\000PV\202b\300";
set vendor-class-identifier = "MSFT 5.0";
client-hostname "testwin10";
}
lease 192.168.10.221 {
starts 5 2023/07/28 02:33:23;
ends 5 2023/07/28 08:33:23;
cltt 5 2023/07/28 02:33:23;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:50:56:82:9a:59;
uid "\001\000PV\202\232Y";
client-hostname "tpl-rhel92";
}なお、「dhcpd.leases」「dhcpd.leases~」を手動で削除などはしてはいけません。これらはDHCPサーバが動作するために必要なファイルです。
詳細は、下記をご参照ください。
参考
公式
ブログ
まとめ
思っていた以上に簡単にDHCPが作れました。本番環境ではルータを経由したリレーなどの考慮も必要ですが、検証環境であればLinuxでさくっとDHCPサーバーを作るのはありですね。
